On Fri, Mar 27, 2009 at 10:13:33AM -0400, Theodore Tso wrote:
On Fri, Mar 27, 2009 at 08:57:23AM +0100, Jens Axboe wrote:
Here's a simple patch that does that. Not even tested, it compiles. NoteThat's going to be a mess. Ext3 implements an fsync() by requesting a
that file systems that currently do blkdev_issue_flush() in their
->sync() should then get it removed.
journal commit, and then waiting for the commit to have taken place.
The commit happens in another thread, kjournald. Knowing when it's OK
not to do a blkdev_issue_flush() because the commit was triggered by
an fsync() is going to be really messy. Could we at least have a flag
in struct super which says, "We'll handle the flush correctly, please
don't try to do it for us?"
Doing it in vfs_fsync also is completely wrong layering. If people want
it for simple filesystems add it to file_fsync instead of messing up
the generic helper. Removing well meaning but ill behaved policy from
the generic path has been costing me far too much time lately.
And please add a tuneable for the flush. Preferable a generic one at
the block device layer instead of the current mess where every
filesystem has a slightly different option for barrier usage.