[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] 'qemu-nbd' explicit flush

From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] 'qemu-nbd' explicit flush
Date: Wed, 22 May 2013 11:47:00 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Tue, May 21, 2013 at 08:01:10PM +0000, Mark Trumpold wrote:
>     Linux kernel 3.3.1 with Qemu patch to enable kernel flushing:
>         http://thread.gmane.org/gmane.linux.drivers.nbd.general/1108

Did you check that the kernel is sending NBD_FLUSH commands?  You can
use tcpdump and then check the captured network traffic.

> Usage example:
>     'qemu-nbd --cache=writeback -c /dev/nbd0 /images/my-qcow.img'
>     'mount /dev/nbd0 /my-mount-point'
> Everything does flush correctly when I first unmount and then disconnect the 
> device; however, in my case I am not able to unmount things before 
> snapshotting.
> I tried several approaches externally to flush the device.  For example:
>     'mount -o remount,ro /dev/nbd0'
>     'blockdev --flushbufs /dev/nbd0'

Did you try plain old sync(1)?

> I have been looking at the Qemu source code and in user space 'nbd.c' in 
> routine 'nbd_trip' I see the case 'NBD_CMD_FLUSH' which looks to be called 
> from the NBD socket interface.  Here I see 'bdrv_co_flush(exp->bs)' which 
> looks promising; however, I don't know how to setup the 'bs' pointer for the 
> call.

bs is the block device which was exported using:

exp = nbd_export_new(bs, dev_offset, fd_size, nbdflags, nbd_export_closed);

in qemu-nbd.c:main().

> Ideally, I would like to add a command line parm to 'qemu-nbd.c' to 
> explicitely do the flush, but so far no luck.

Doing that is a little tricky, I think there are two options:

1. Add a signal handler (like SIGHUP or SIGUSR1) to qemu-nbd which
   flushes all exports.

2. Instantiate a block/nbd.c client that connects to the running
   qemu-nbd server (make sure format=raw).  Then call bdrv_flush() on
   the NBD client.  You must use the qemu-nbd --shared=2 option.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]