Replace part of exfat_zeroed_cluster() with exfat_update_bhs().
And remove exfat_sync_bhs().

Signed-off-by: Tetsuhiro Kohada <kohada...@gmail.com>
---
 fs/exfat/fatent.c | 54 ++++++++++-------------------------------------
 1 file changed, 11 insertions(+), 43 deletions(-)

diff --git a/fs/exfat/fatent.c b/fs/exfat/fatent.c
index 267e5e09eb13..5d11bc2f1b68 100644
--- a/fs/exfat/fatent.c
+++ b/fs/exfat/fatent.c
@@ -230,21 +230,6 @@ int exfat_find_last_cluster(struct super_block *sb, struct 
exfat_chain *p_chain,
        return 0;
 }
 
-static inline int exfat_sync_bhs(struct buffer_head **bhs, int nr_bhs)
-{
-       int i, err = 0;
-
-       for (i = 0; i < nr_bhs; i++)
-               write_dirty_buffer(bhs[i], 0);
-
-       for (i = 0; i < nr_bhs; i++) {
-               wait_on_buffer(bhs[i]);
-               if (!err && !buffer_uptodate(bhs[i]))
-                       err = -EIO;
-       }
-       return err;
-}
-
 int exfat_zeroed_cluster(struct inode *dir, unsigned int clu)
 {
        struct super_block *sb = dir->i_sb;
@@ -266,41 +251,24 @@ int exfat_zeroed_cluster(struct inode *dir, unsigned int 
clu)
        }
 
        /* Zeroing the unused blocks on this cluster */
-       n = 0;
        while (blknr < last_blknr) {
-               bhs[n] = sb_getblk(sb, blknr);
-               if (!bhs[n]) {
-                       err = -ENOMEM;
-                       goto release_bhs;
-               }
-               memset(bhs[n]->b_data, 0, sb->s_blocksize);
-               exfat_update_bh(sb, bhs[n], 0);
-
-               n++;
-               blknr++;
-
-               if (n == nr_bhs) {
-                       if (IS_DIRSYNC(dir)) {
-                               err = exfat_sync_bhs(bhs, n);
-                               if (err)
-                                       goto release_bhs;
+               for (n = 0; n < nr_bhs && blknr < last_blknr; n++, blknr++) {
+                       bhs[n] = sb_getblk(sb, blknr);
+                       if (!bhs[n]) {
+                               err = -ENOMEM;
+                               goto release_bhs;
                        }
-
-                       for (i = 0; i < n; i++)
-                               brelse(bhs[i]);
-                       n = 0;
+                       memset(bhs[n]->b_data, 0, sb->s_blocksize);
                }
-       }
 
-       if (IS_DIRSYNC(dir)) {
-               err = exfat_sync_bhs(bhs, n);
+               set_bit(EXFAT_SB_DIRTY, &sbi->s_state);
+               err = exfat_update_bhs(bhs, n, IS_DIRSYNC(dir));
                if (err)
                        goto release_bhs;
-       }
-
-       for (i = 0; i < n; i++)
-               brelse(bhs[i]);
 
+               for (i = 0; i < n; i++)
+                       brelse(bhs[i]);
+       }
        return 0;
 
 release_bhs:
-- 
2.25.1

Reply via email to