]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
f2fs: compress: clean up parameter of __f2fs_cluster_blocks()
authorChao Yu <yuchao0@huawei.com>
Wed, 12 May 2021 09:52:57 +0000 (17:52 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2024 11:32:17 +0000 (13:32 +0200)
[ Upstream commit 91f0fb6903ed30370135381f10c02a10c7872cdc ]

Previously, in order to reuse __f2fs_cluster_blocks(),
f2fs_is_compressed_cluster() assigned a compress_ctx type variable,
which is used to pass few parameters (cc.inode, cc.cluster_size,
cc.cluster_idx), it's wasteful to allocate such large space in stack.

Let's clean up parameters of __f2fs_cluster_blocks() to avoid that.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Stable-dep-of: 7c5dffb3d90c ("f2fs: compress: fix to relocate check condition in f2fs_{release,reserve}_compress_blocks()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/f2fs/compress.c

index 6c870b741cfe50e24b328cc937cd3c2643456cf8..04b6de1a5874454950a181740eb0908713cb3f21 100644 (file)
@@ -866,14 +866,17 @@ static bool __cluster_may_compress(struct compress_ctx *cc)
        return true;
 }
 
-static int __f2fs_cluster_blocks(struct compress_ctx *cc, bool compr)
+static int __f2fs_cluster_blocks(struct inode *inode,
+                               unsigned int cluster_idx, bool compr)
 {
        struct dnode_of_data dn;
+       unsigned int cluster_size = F2FS_I(inode)->i_cluster_size;
+       unsigned int start_idx = cluster_idx <<
+                               F2FS_I(inode)->i_log_cluster_size;
        int ret;
 
-       set_new_dnode(&dn, cc->inode, NULL, NULL, 0);
-       ret = f2fs_get_dnode_of_data(&dn, start_idx_of_cluster(cc),
-                                                       LOOKUP_NODE);
+       set_new_dnode(&dn, inode, NULL, NULL, 0);
+       ret = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
        if (ret) {
                if (ret == -ENOENT)
                        ret = 0;
@@ -884,7 +887,7 @@ static int __f2fs_cluster_blocks(struct compress_ctx *cc, bool compr)
                int i;
 
                ret = 1;
-               for (i = 1; i < cc->cluster_size; i++) {
+               for (i = 1; i < cluster_size; i++) {
                        block_t blkaddr;
 
                        blkaddr = data_blkaddr(dn.inode,
@@ -906,25 +909,15 @@ fail:
 /* return # of compressed blocks in compressed cluster */
 static int f2fs_compressed_blocks(struct compress_ctx *cc)
 {
-       return __f2fs_cluster_blocks(cc, true);
+       return __f2fs_cluster_blocks(cc->inode, cc->cluster_idx, true);
 }
 
 /* return # of valid blocks in compressed cluster */
-static int f2fs_cluster_blocks(struct compress_ctx *cc)
-{
-       return __f2fs_cluster_blocks(cc, false);
-}
-
 int f2fs_is_compressed_cluster(struct inode *inode, pgoff_t index)
 {
-       struct compress_ctx cc = {
-               .inode = inode,
-               .log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
-               .cluster_size = F2FS_I(inode)->i_cluster_size,
-               .cluster_idx = index >> F2FS_I(inode)->i_log_cluster_size,
-       };
-
-       return f2fs_cluster_blocks(&cc);
+       return __f2fs_cluster_blocks(inode,
+               index >> F2FS_I(inode)->i_log_cluster_size,
+               false);
 }
 
 static bool cluster_may_compress(struct compress_ctx *cc)
@@ -975,7 +968,7 @@ static int prepare_compress_overwrite(struct compress_ctx *cc,
        bool prealloc;
 
 retry:
-       ret = f2fs_cluster_blocks(cc);
+       ret = f2fs_is_compressed_cluster(cc->inode, start_idx);
        if (ret <= 0)
                return ret;