kernel - Fix sync() system call
authorMatthew Dillon <dillon@apollo.backplane.com>
Thu, 13 Dec 2012 07:19:43 +0000 (23:19 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Thu, 13 Dec 2012 07:19:43 +0000 (23:19 -0800)
* The sync() system call was syncing the filesystems MNT_NOWAIT | MNT_LAZY.
  We need the MNT_NOWAIT to avoid an endless sync on a busy filesystem, but
  MNT_LAZY is another issue entirely.

* Remove the MNT_LAZY from the sync() system call, it can cause whole
  files to not be synced.  It is meant only to be used by the automatic
  kernel 30-second sync (which eventually gets everything flushed out).

sys/kern/vfs_syscalls.c

index 95712cd..dc144d2 100644 (file)
@@ -894,7 +894,7 @@ sync_callback(struct mount *mp, void *data __unused)
                asyncflag = mp->mnt_flag & MNT_ASYNC;
                mp->mnt_flag &= ~MNT_ASYNC;
                vfs_msync(mp, MNT_NOWAIT);
-               VFS_SYNC(mp, MNT_NOWAIT | MNT_LAZY);
+               VFS_SYNC(mp, MNT_NOWAIT);
                mp->mnt_flag |= asyncflag;
        }
        return(0);