From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=60698 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PTXb9-0005cs-D8 for qemu-devel@nongnu.org; Fri, 17 Dec 2010 05:31:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PTXb7-0006rD-J9 for qemu-devel@nongnu.org; Fri, 17 Dec 2010 05:31:39 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49316) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PTXb7-0006r7-AQ for qemu-devel@nongnu.org; Fri, 17 Dec 2010 05:31:37 -0500 Message-ID: <4D0B3C4D.6060907@redhat.com> Date: Fri, 17 Dec 2010 11:32:45 +0100 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 3/3] raw-posix: add discard support References: <20101210150038.GA30990@lst.de> <20101216183614.GA17260@lst.de> <20101216183656.GC17521@lst.de> In-Reply-To: <20101216183656.GC17521@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Christoph Hellwig Cc: qemu-devel@nongnu.org Am 16.12.2010 19:36, schrieb Christoph Hellwig: > Add support to discard blocks in a raw image residing on an XFS filesystem > by calling the XFS_IOC_UNRESVSP64 ioctl to punch holes. Support for other > hole punching mechanisms can be added when they become available. > > Signed-off-by: Christoph Hellwig > > Index: qemu/block/raw-posix.c > =================================================================== > --- qemu.orig/block/raw-posix.c 2010-12-15 10:05:37.000000000 +0100 > +++ qemu/block/raw-posix.c 2010-12-16 17:40:47.617253460 +0100 > @@ -69,6 +69,10 @@ > #include > #endif > > +#ifdef CONFIG_XFS > +#include > +#endif > + > //#define DEBUG_FLOPPY > > //#define DEBUG_BLOCK > @@ -120,6 +124,9 @@ typedef struct BDRVRawState { > #endif > uint8_t *aligned_buf; > unsigned aligned_buf_size; > +#ifdef CONFIG_XFS > + bool is_xfs : 1; > +#endif > } BDRVRawState; > > static int fd_open(BlockDriverState *bs); > @@ -196,6 +203,12 @@ static int raw_open_common(BlockDriverSt > #endif > } > > +#ifdef CONFIG_XFS > + if (platform_test_xfs_fd(s->fd)) { > + s->is_xfs = 1; > + } > +#endif > + > return 0; > > out_free_buf: > @@ -740,6 +753,36 @@ static int raw_flush(BlockDriverState *b > return qemu_fdatasync(s->fd); > } > > +#ifdef CONFIG_XFS > +static int xfs_discard(BDRVRawState *s, int64_t sector_num, int nb_sectors) > +{ > + struct xfs_flock64 fl; > + > + memset(&fl, 0, sizeof(fl)); > + fl.l_whence = SEEK_SET; > + fl.l_start = sector_num << 9; > + fl.l_len = (int64_t)nb_sectors << 9; > + > + if (xfsctl(NULL, s->fd, XFS_IOC_UNRESVSP64, &fl) < 0) { > + printf("cannot punch hole (%s)\n", strerror(errno)); Debugging leftover? Block drivers shouldn't print anything to stdout. > + return -errno; > + } > + > + return 0; > +} > +#endif > + > +static int raw_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors) > +{ > +#ifdef CONFIG_XFS > + BDRVRawState *s = bs->opaque; > + > + if (s->is_xfs) > + return xfs_discard(s, sector_num, nb_sectors); Missing braces. I have already applied patch 1 and 2 to the block branch, so sending a v5 for this one is enough. Kevin