summaryrefslogtreecommitdiff
path: root/fs/f2fs/compress.c
diff options
context:
space:
mode:
authorFengnan Chang <changfengnan@vivo.com>2022-07-31 06:33:45 +0300
committerJaegeuk Kim <jaegeuk@kernel.org>2022-08-05 14:20:28 +0300
commit4f8219f8aa175d5a46703631abaae745592efe29 (patch)
tree29c53f8ea64c88a174c2f438138fbe6e92686c8b /fs/f2fs/compress.c
parente53f8643474a32ddfcfd04e5b22613fdd2a92a52 (diff)
downloadlinux-4f8219f8aa175d5a46703631abaae745592efe29.tar.xz
f2fs: intorduce f2fs_all_cluster_page_ready
When write total cluster, all pages is uptodate, there is not need to call f2fs_prepare_compress_overwrite, intorduce f2fs_all_cluster_page_ready to avoid this. Signed-off-by: Fengnan Chang <changfengnan@vivo.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/compress.c')
-rw-r--r--fs/f2fs/compress.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 086e6f74ce32..75886b493ec3 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -841,20 +841,27 @@ bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index)
return is_page_in_cluster(cc, index);
}
-bool f2fs_all_cluster_page_loaded(struct compress_ctx *cc, struct pagevec *pvec,
- int index, int nr_pages)
+bool f2fs_all_cluster_page_ready(struct compress_ctx *cc, struct pagevec *pvec,
+ int index, int nr_pages, bool uptodate)
{
- unsigned long pgidx;
- int i;
+ unsigned long pgidx = pvec->pages[index]->index;
+ int i = uptodate ? 0 : 1;
- if (nr_pages - index < cc->cluster_size)
+ /*
+ * when uptodate set to true, try to check all pages in cluster is
+ * uptodate or not.
+ */
+ if (uptodate && (pgidx % cc->cluster_size))
return false;
- pgidx = pvec->pages[index]->index;
+ if (nr_pages - index < cc->cluster_size)
+ return false;
- for (i = 1; i < cc->cluster_size; i++) {
+ for (; i < cc->cluster_size; i++) {
if (pvec->pages[index + i]->index != pgidx + i)
return false;
+ if (uptodate && !PageUptodate(pvec->pages[index + i]))
+ return false;
}
return true;