exfat_set_volume_dirty(sb);
        err = exfat_add_entry(dir, dentry->d_name.name, &cdir, TYPE_FILE,
                &info);
-       exfat_clear_volume_dirty(sb);
        if (err)
                goto unlock;
 
 
        /* This doesn't modify ei */
        ei->dir.dir = DIR_DELETED;
-       exfat_clear_volume_dirty(sb);
 
        inode_inc_iversion(dir);
        dir->i_mtime = dir->i_atime = current_time(dir);
        exfat_set_volume_dirty(sb);
        err = exfat_add_entry(dir, dentry->d_name.name, &cdir, TYPE_DIR,
                &info);
-       exfat_clear_volume_dirty(sb);
        if (err)
                goto unlock;
 
                goto unlock;
        }
        ei->dir.dir = DIR_DELETED;
-       exfat_clear_volume_dirty(sb);
 
        inode_inc_iversion(dir);
        dir->i_mtime = dir->i_atime = current_time(dir);
                 */
                new_ei->dir.dir = DIR_DELETED;
        }
-       exfat_clear_volume_dirty(sb);
 out:
        return ret;
 }
 
 {
        struct exfat_sb_info *sbi = EXFAT_SB(sb);
        struct boot_sector *p_boot = (struct boot_sector *)sbi->boot_bh->b_data;
-       bool sync;
 
        /* retain persistent-flags */
        new_flags |= sbi->vol_flags_persistent;
 
        p_boot->vol_flags = cpu_to_le16(new_flags);
 
-       if ((new_flags & VOLUME_DIRTY) && !buffer_dirty(sbi->boot_bh))
-               sync = true;
-       else
-               sync = false;
-
        set_buffer_uptodate(sbi->boot_bh);
        mark_buffer_dirty(sbi->boot_bh);
 
-       if (sync)
-               sync_dirty_buffer(sbi->boot_bh);
+       __sync_dirty_buffer(sbi->boot_bh, REQ_SYNC | REQ_FUA | REQ_PREFLUSH);
+
        return 0;
 }