|
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 |
|