Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
[linux-2.6-microblaze.git] / fs / exfat / fatent.c
index 4e5c5c9..c3c9afe 100644 (file)
@@ -75,7 +75,7 @@ int exfat_ent_set(struct super_block *sb, unsigned int loc,
 
        fat_entry = (__le32 *)&(bh->b_data[off]);
        *fat_entry = cpu_to_le32(content);
-       exfat_update_bh(sb, bh, sb->s_flags & SB_SYNCHRONOUS);
+       exfat_update_bh(bh, sb->s_flags & SB_SYNCHRONOUS);
        exfat_mirror_bh(sb, sec, bh);
        brelse(bh);
        return 0;
@@ -174,7 +174,6 @@ int exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain)
                return -EIO;
        }
 
-       set_bit(EXFAT_SB_DIRTY, &sbi->s_state);
        clu = p_chain->dir;
 
        if (p_chain->flags == ALLOC_NO_FAT_CHAIN) {
@@ -230,21 +229,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 +250,23 @@ 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);
+               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:
@@ -358,8 +324,6 @@ int exfat_alloc_cluster(struct inode *inode, unsigned int num_alloc,
                }
        }
 
-       set_bit(EXFAT_SB_DIRTY, &sbi->s_state);
-
        p_chain->dir = EXFAT_EOF_CLUSTER;
 
        while ((new_clu = exfat_find_free_bitmap(sb, hint_clu)) !=