I write data to a compressed file when the disk space is almost full and it return -ENOSPC error, but cat /sys/kernel/debug/f2fs/status shows that there still many free segments.
Signed-off-by: chenying <[email protected]> --- fs/f2fs/compress.c | 5 ++++- fs/f2fs/file.c | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c index d8a64be..6ca058b 100644 --- a/fs/f2fs/compress.c +++ b/fs/f2fs/compress.c @@ -854,6 +854,8 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc, fio.compr_blocks++; if (__is_valid_data_blkaddr(blkaddr)) f2fs_invalidate_blocks(sbi, blkaddr); + else if (blkaddr != NULL_ADDR) + dec_valid_block_count(sbi, dn.inode, 1); f2fs_update_data_blkaddr(&dn, COMPRESS_ADDR); goto unlock_continue; } @@ -865,7 +867,8 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc, if (__is_valid_data_blkaddr(blkaddr)) { f2fs_invalidate_blocks(sbi, blkaddr); f2fs_update_data_blkaddr(&dn, NEW_ADDR); - } + } else if (blkaddr != NULL_ADDR) + dec_valid_block_count(sbi, dn.inode, 1); goto unlock_continue; } diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 0d4da64..f07c9e2 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -589,6 +589,10 @@ void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count) clear_inode_flag(dn->inode, FI_FIRST_BLOCK_WRITTEN); f2fs_invalidate_blocks(sbi, blkaddr); + if (compressed_cluster && + (blkaddr == NEW_ADDR || blkaddr == COMPRESS_ADDR)) + continue; + nr_free++; } -- 2.15.2 _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
