The majority of them were totally backwards.  Change the logic
so that if DELAYED_SYNC *isn't* in the config, we actually flush to disk
before flagging the file system as clean.

That leaves two calls in the DELAYED_SYNC case.  More detailed
analysis is needed to make sure that's what's really needed, or if other
call sites also need a fs_sync() call.  This patch is at least "less wrong"
than the code was, but further changes should be another patch.

Signed-off-by: Valdis Kletnieks <valdis.kletni...@vt.edu>

diff --git a/drivers/staging/exfat/exfat_super.c 
b/drivers/staging/exfat/exfat_super.c
index 5f6caee819a6..2526044569ee 100644
--- a/drivers/staging/exfat/exfat_super.c
+++ b/drivers/staging/exfat/exfat_super.c
@@ -458,7 +458,7 @@ static int ffsUmountVol(struct super_block *sb)
        /* acquire the lock for file system critical section */
        down(&p_fs->v_sem);
 
-       fs_sync(sb, false);
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 
        if (p_fs->vol_type == EXFAT) {
@@ -666,8 +666,8 @@ static int ffsCreateFile(struct inode *inode, char *path, 
u8 mode,
        /* create a new file */
        ret = create_file(inode, &dir, &uni_name, mode, fid);
 
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 
@@ -1039,8 +1039,8 @@ static int ffsWriteFile(struct inode *inode, struct 
file_id_t *fid,
                release_entry_set(es);
        }
 
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 
@@ -1179,8 +1179,8 @@ static int ffsTruncateFile(struct inode *inode, u64 
old_size, u64 new_size)
        if (fid->rwoffset > fid->size)
                fid->rwoffset = fid->size;
 
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 
@@ -1327,8 +1327,8 @@ static int ffsMoveFile(struct inode *old_parent_inode, 
struct file_id_t *fid,
                                                num_entries + 1);
        }
 out:
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 
@@ -1389,8 +1389,8 @@ static int ffsRemoveFile(struct inode *inode, struct 
file_id_t *fid)
        fid->start_clu = CLUSTER_32(~0);
        fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01;
 
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 
@@ -1478,8 +1478,8 @@ static int ffsSetAttr(struct inode *inode, u32 attr)
                release_entry_set(es);
        }
 
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 
@@ -1916,8 +1916,8 @@ static int ffsCreateDir(struct inode *inode, char *path, 
struct file_id_t *fid)
 
        ret = create_dir(inode, &dir, &uni_name, fid);
 
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 
@@ -2177,8 +2177,8 @@ static int ffsRemoveDir(struct inode *inode, struct 
file_id_t *fid)
        fid->start_clu = CLUSTER_32(~0);
        fid->flags = (p_fs->vol_type == EXFAT) ? 0x03 : 0x01;
 
-#ifdef CONFIG_EXFAT_DELAYED_SYNC
-       fs_sync(sb, false);
+#ifndef CONFIG_EXFAT_DELAYED_SYNC
+       fs_sync(sb, true);
        fs_set_vol_flags(sb, VOL_CLEAN);
 #endif
 

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to