From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58322) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGxvc-0007id-O5 for qemu-devel@nongnu.org; Thu, 29 Jan 2015 17:51:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YGxvY-0005Wl-FP for qemu-devel@nongnu.org; Thu, 29 Jan 2015 17:51:12 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56046) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGxvY-0005WZ-6U for qemu-devel@nongnu.org; Thu, 29 Jan 2015 17:51:08 -0500 Message-ID: <54CAB955.4030007@redhat.com> Date: Thu, 29 Jan 2015 17:51:01 -0500 From: Max Reitz MIME-Version: 1.0 References: <1422470338-20465-1-git-send-email-den@openvz.org> <1422470338-20465-8-git-send-email-den@openvz.org> In-Reply-To: <1422470338-20465-8-git-send-email-den@openvz.org> Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 7/7] block/raw-posix: set max_write_zeroes to INT_MAX for regular files List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Denis V. Lunev" Cc: Kevin Wolf , Fam Zheng , Peter Lieven , qemu-devel@nongnu.org, Stefan Hajnoczi On 2015-01-28 at 13:38, Denis V. Lunev wrote: > fallocate() works fine and could handle properly with arbitrary size > requests. There is no sense to reduce the amount of space to fallocate. > The bigger is the size, the better is the performance as the amount of > journal updates is reduced. > > The patch changes behavior for both generic filesystem and XFS codepaths, > which are different in handle_aiocb_write_zeroes. The implementation > of falocate and xfsctl(XFS_IOC_ZERO_RANGE) for XFS are exactly the same *fallocate With that fixed: Reviewed-by: Max Reitz > thus the change is fine for both ways. > > Signed-off-by: Denis V. Lunev > CC: Max Reitz > CC: Kevin Wolf > CC: Stefan Hajnoczi > CC: Peter Lieven > CC: Fam Zheng > --- > block/raw-posix.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/block/raw-posix.c b/block/raw-posix.c > index 3db911a..ec38fee 100644 > --- a/block/raw-posix.c > +++ b/block/raw-posix.c > @@ -293,6 +293,20 @@ static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp) > } > } > > +static void raw_probe_max_write_zeroes(BlockDriverState *bs) > +{ > + BDRVRawState *s = bs->opaque; > + struct stat st; > + > + if (fstat(s->fd, &st) < 0) { > + return; /* no problem, keep default value */ > + } > + if (!S_ISREG(st.st_mode) || !s->discard_zeroes) { > + return; > + } > + bs->bl.max_write_zeroes = INT_MAX; > +} > + > static void raw_parse_flags(int bdrv_flags, int *open_flags) > { > assert(open_flags != NULL); > @@ -600,6 +614,7 @@ static int raw_reopen_prepare(BDRVReopenState *state, > /* Fail already reopen_prepare() if we can't get a working O_DIRECT > * alignment with the new fd. */ > if (raw_s->fd != -1) { > + raw_probe_max_write_zeroes(state->bs); > raw_probe_alignment(state->bs, raw_s->fd, &local_err); > if (local_err) { > qemu_close(raw_s->fd); > @@ -653,6 +668,8 @@ static void raw_refresh_limits(BlockDriverState *bs, Error **errp) > > raw_probe_alignment(bs, s->fd, errp); > bs->bl.opt_mem_alignment = s->buf_align; > + > + raw_probe_max_write_zeroes(bs); > } > > static ssize_t handle_aiocb_ioctl(RawPosixAIOData *aiocb)