On Sat, Dec 26, 2009 at 11:00:59AM -0500, jim owens wrote:
Actually, Linux's sync does more than just schedule the writes; it has
for quite some time:
static void sync_filesystems(int wait)
{
...
}
SYSCALL_DEFINE0(sync)
{
wakeup_flusher_threads(0);
sync_filesystems(0);
sync_filesystems(1);
if (unlikely(laptop_mode))
laptop_sync_completion();
return 0;
}
At least for ext3 and ext4, we will even do a device barrier operation
as a restult of a call to sb->s_op->sync_fs() --- which is called by
__sync_filesystem, which is called in turn by sync_filesystems().
This isn't done for all file systems, though, as near as I can tell.
(Ext2 at least doesn't.)
But for quite some time, under Linux the sync(2) system call will wait
for the blocks to be flushed out to HBA, although we currently don't
wait for the blocks to have been committed to the platters (at least
not for all file systems).
Applications shouldn't depend on this, of course, since POSIX and
other legacy Unix systems don't guarantee this. But in terms of
knowing what Linux does, the man page is a bit out of date.
Best regards,
- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html