f2fs: compress: don't {,de}compress non-full cluster
authorChao Yu <chao@kernel.org>
Tue, 11 Jul 2023 20:08:06 +0000 (04:08 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 14 Aug 2023 20:41:08 +0000 (13:41 -0700)
f2fs won't compress non-full cluster in tail of file, let's skip
dirtying and rewrite such cluster during f2fs_ioc_{,de}compress_file.

Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/file.c

index 79cb6a4..74f79e7 100644 (file)
@@ -4092,10 +4092,8 @@ static int f2fs_ioc_decompress_file(struct file *filp)
        last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
 
        count = last_idx - page_idx;
-       while (count) {
-               int len = min(cluster_size, count);
-
-               ret = redirty_blocks(inode, page_idx, len);
+       while (count && count >= cluster_size) {
+               ret = redirty_blocks(inode, page_idx, cluster_size);
                if (ret < 0)
                        break;
 
@@ -4105,8 +4103,8 @@ static int f2fs_ioc_decompress_file(struct file *filp)
                                break;
                }
 
-               count -= len;
-               page_idx += len;
+               count -= cluster_size;
+               page_idx += cluster_size;
 
                cond_resched();
                if (fatal_signal_pending(current)) {
@@ -4172,10 +4170,8 @@ static int f2fs_ioc_compress_file(struct file *filp)
        last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
 
        count = last_idx - page_idx;
-       while (count) {
-               int len = min(cluster_size, count);
-
-               ret = redirty_blocks(inode, page_idx, len);
+       while (count && count >= cluster_size) {
+               ret = redirty_blocks(inode, page_idx, cluster_size);
                if (ret < 0)
                        break;
 
@@ -4185,8 +4181,8 @@ static int f2fs_ioc_compress_file(struct file *filp)
                                break;
                }
 
-               count -= len;
-               page_idx += len;
+               count -= cluster_size;
+               page_idx += cluster_size;
 
                cond_resched();
                if (fatal_signal_pending(current)) {