[PATCH 2/2] f2fs: compress: don't {,de}compress non-full cluster

From: Chao Yu
Date: Wed Jul 12 2023 - 11:37:13 EST


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@xxxxxxxxxx>
---
fs/f2fs/file.c | 20 ++++++++------------
1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 79cb6a41f128..74f79e7c8c02 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -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)) {
--
2.40.1