Re: [PATCH] blkdev: flush disk cache on ->fsync

From: Jens Axboe
Date: Mon Oct 12 2009 - 11:07:47 EST


On Mon, Oct 12 2009, Jeff Moyer wrote:
> Christoph Hellwig <hch@xxxxxx> writes:
>
> > Is anyone going to pick up this patch?
> >
> > On Thu, Aug 20, 2009 at 08:24:32PM +0200, Christoph Hellwig wrote:
> >> Currently there is no barrier support in the block device code. That
> >> means we cannot guarantee any sort of data integerity when using the
> >> block device node with dis kwrite caches enabled. Using the raw block
> >> device node is a typical use case for virtualization (and I assume
> >> databases, too). This patch changes block_fsync to issue a cache flush
> >> and thus make fsync on block device nodes actually useful.
> >>
> >> Note that in mainline we would also need to add such code to the
> >> ->aio_write method for O_SYNC handling, but assuming that Jan's patch
> >> series for the O_SYNC rewrite goes in it will also call into ->fsync
> >> for 2.6.32.
> >>
> >>
> >> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> >>
> >>
> >> diff --git a/fs/block_dev.c b/fs/block_dev.c
> >> index 94dfda2..298ad75 100644
> >> --- a/fs/block_dev.c
> >> +++ b/fs/block_dev.c
> >> @@ -398,7 +398,17 @@ static loff_t block_llseek(struct file *file, loff_t offset, int origin)
> >>
> >> static int block_fsync(struct file *filp, struct dentry *dentry, int datasync)
> >> {
> >> - return sync_blockdev(I_BDEV(filp->f_mapping->host));
> >> + struct block_device *bdev = I_BDEV(filp->f_mapping->host);
> >> + int error;
> >> +
> >> + error = sync_blockdev(bdev);
> >> + if (error)
> >> + return error;
> >> +
> >> + error = blkdev_issue_flush(bdev, NULL);
> >> + if (error == -EOPNOTSUPP)
> >> + error = 0;
> >> + return error;
> >> }
> >>
> >> /*
> > ---end quoted text---
>
> Looks ok to me. Jens?

Yep ditto!

>
> Acked-by: Jeff Moyer <jmoyer@xxxxxxxxxx>

--
Jens Axboe

--
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/