Re: ext2 + -osync: not as easy as it seems

From: Theodore Tso
Date: Wed Jan 14 2009 - 09:13:49 EST


On Wed, Jan 14, 2009 at 03:05:32PM +0100, Jan Kara wrote:
> On Wed 14-01-09 08:21:46, Theodore Tso wrote:
> >
> > If we optimize out the journal commit when there are no blocks
> > attached to the transaction, we could change the patch to only force a
> > flush if inode->i_state did not have I_DIRTY before the call to
> > sync_inode(). Does that sound sane?
> Yes. And also add a flush in case of fdatasync().

Um, we have that already; the sync_inode() followed by
blkdev_issue_flush() is the path taken by fdatasync(), I do believe.

> Well, I thought that a barrier, as an abstraction, only guarantees that
> any IO which happened before the barrier hits the iron before any IO which
> has been submitted after a barrier. This is actually enough for a
> journalling to work correctly but it's not enough for fsync() guarantees.
> But I might be wrong...

Ah, yes, that's what you're getting at. True, but for better or for
worse, we have no other interface other than blkdev_issue_flush().
This will guarantee that the data has made it to the disk controller,
but it won't necessarily guarantee that it will have made it onto the
disk platter, as I understand things; but I don't think we have any
other interfaces available to us at this point.

- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/