Blame SOURCES/0051-exfat-optimize-exfat_zeroed_cluster.patch

Kmods SIG 9e3ffb
From 4dc7d35e09ba78aa0a3bcaa9fad1c19952e018a7 Mon Sep 17 00:00:00 2001
Kmods SIG 9e3ffb
From: Tetsuhiro Kohada <kohada.t2@gmail.com>
Kmods SIG 9e3ffb
Date: Wed, 24 Jun 2020 11:30:40 +0900
Kmods SIG 9e3ffb
Subject: [Backport 4dc7d35e09ba] exfat: optimize exfat_zeroed_cluster()
Kmods SIG 9e3ffb
Kmods SIG 9e3ffb
Replace part of exfat_zeroed_cluster() with exfat_update_bhs().
Kmods SIG 9e3ffb
And remove exfat_sync_bhs().
Kmods SIG 9e3ffb
Kmods SIG 9e3ffb
Signed-off-by: Tetsuhiro Kohada <kohada.t2@gmail.com>
Kmods SIG 9e3ffb
Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
Kmods SIG 9e3ffb
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Kmods SIG 9e3ffb
---
Kmods SIG 9e3ffb
 src/fatent.c | 53 +++++++++--------------------------------------
Kmods SIG 9e3ffb
 1 file changed, 10 insertions(+), 43 deletions(-)
Kmods SIG 9e3ffb
Kmods SIG 9e3ffb
diff --git a/src/fatent.c b/src/fatent.c
Kmods SIG 9e3ffb
index 82ee8246c080f38bc2cc0f8074c72aebbff03fd8..c3c9afee7418f1871a65757d79f8d4a13fe650c2 100644
Kmods SIG 9e3ffb
--- a/src/fatent.c
Kmods SIG 9e3ffb
+++ b/src/fatent.c
Kmods SIG 9e3ffb
@@ -229,21 +229,6 @@ int exfat_find_last_cluster(struct super_block *sb, struct exfat_chain *p_chain,
Kmods SIG 9e3ffb
 	return 0;
Kmods SIG 9e3ffb
 }
Kmods SIG 9e3ffb
 
Kmods SIG 9e3ffb
-static inline int exfat_sync_bhs(struct buffer_head **bhs, int nr_bhs)
Kmods SIG 9e3ffb
-{
Kmods SIG 9e3ffb
-	int i, err = 0;
Kmods SIG 9e3ffb
-
Kmods SIG 9e3ffb
-	for (i = 0; i < nr_bhs; i++)
Kmods SIG 9e3ffb
-		write_dirty_buffer(bhs[i], 0);
Kmods SIG 9e3ffb
-
Kmods SIG 9e3ffb
-	for (i = 0; i < nr_bhs; i++) {
Kmods SIG 9e3ffb
-		wait_on_buffer(bhs[i]);
Kmods SIG 9e3ffb
-		if (!err && !buffer_uptodate(bhs[i]))
Kmods SIG 9e3ffb
-			err = -EIO;
Kmods SIG 9e3ffb
-	}
Kmods SIG 9e3ffb
-	return err;
Kmods SIG 9e3ffb
-}
Kmods SIG 9e3ffb
-
Kmods SIG 9e3ffb
 int exfat_zeroed_cluster(struct inode *dir, unsigned int clu)
Kmods SIG 9e3ffb
 {
Kmods SIG 9e3ffb
 	struct super_block *sb = dir->i_sb;
Kmods SIG 9e3ffb
@@ -265,41 +250,23 @@ int exfat_zeroed_cluster(struct inode *dir, unsigned int clu)
Kmods SIG 9e3ffb
 	}
Kmods SIG 9e3ffb
 
Kmods SIG 9e3ffb
 	/* Zeroing the unused blocks on this cluster */
Kmods SIG 9e3ffb
-	n = 0;
Kmods SIG 9e3ffb
 	while (blknr < last_blknr) {
Kmods SIG 9e3ffb
-		bhs[n] = sb_getblk(sb, blknr);
Kmods SIG 9e3ffb
-		if (!bhs[n]) {
Kmods SIG 9e3ffb
-			err = -ENOMEM;
Kmods SIG 9e3ffb
-			goto release_bhs;
Kmods SIG 9e3ffb
-		}
Kmods SIG 9e3ffb
-		memset(bhs[n]->b_data, 0, sb->s_blocksize);
Kmods SIG 9e3ffb
-		exfat_update_bh(bhs[n], 0);
Kmods SIG 9e3ffb
-
Kmods SIG 9e3ffb
-		n++;
Kmods SIG 9e3ffb
-		blknr++;
Kmods SIG 9e3ffb
-
Kmods SIG 9e3ffb
-		if (n == nr_bhs) {
Kmods SIG 9e3ffb
-			if (IS_DIRSYNC(dir)) {
Kmods SIG 9e3ffb
-				err = exfat_sync_bhs(bhs, n);
Kmods SIG 9e3ffb
-				if (err)
Kmods SIG 9e3ffb
-					goto release_bhs;
Kmods SIG 9e3ffb
+		for (n = 0; n < nr_bhs && blknr < last_blknr; n++, blknr++) {
Kmods SIG 9e3ffb
+			bhs[n] = sb_getblk(sb, blknr);
Kmods SIG 9e3ffb
+			if (!bhs[n]) {
Kmods SIG 9e3ffb
+				err = -ENOMEM;
Kmods SIG 9e3ffb
+				goto release_bhs;
Kmods SIG 9e3ffb
 			}
Kmods SIG 9e3ffb
-
Kmods SIG 9e3ffb
-			for (i = 0; i < n; i++)
Kmods SIG 9e3ffb
-				brelse(bhs[i]);
Kmods SIG 9e3ffb
-			n = 0;
Kmods SIG 9e3ffb
+			memset(bhs[n]->b_data, 0, sb->s_blocksize);
Kmods SIG 9e3ffb
 		}
Kmods SIG 9e3ffb
-	}
Kmods SIG 9e3ffb
 
Kmods SIG 9e3ffb
-	if (IS_DIRSYNC(dir)) {
Kmods SIG 9e3ffb
-		err = exfat_sync_bhs(bhs, n);
Kmods SIG 9e3ffb
+		err = exfat_update_bhs(bhs, n, IS_DIRSYNC(dir));
Kmods SIG 9e3ffb
 		if (err)
Kmods SIG 9e3ffb
 			goto release_bhs;
Kmods SIG 9e3ffb
-	}
Kmods SIG 9e3ffb
-
Kmods SIG 9e3ffb
-	for (i = 0; i < n; i++)
Kmods SIG 9e3ffb
-		brelse(bhs[i]);
Kmods SIG 9e3ffb
 
Kmods SIG 9e3ffb
+		for (i = 0; i < n; i++)
Kmods SIG 9e3ffb
+			brelse(bhs[i]);
Kmods SIG 9e3ffb
+	}
Kmods SIG 9e3ffb
 	return 0;
Kmods SIG 9e3ffb
 
Kmods SIG 9e3ffb
 release_bhs:
Kmods SIG 9e3ffb
-- 
Kmods SIG 9e3ffb
2.31.1
Kmods SIG 9e3ffb