Message ID | 1566913973-15490-1-git-send-email-andrey.shinkevich@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] block: workaround for unaligned byte range in fallocate() | expand |
On 8/27/19 8:52 AM, Andrey Shinkevich wrote: > Revert the commit 118f99442d 'block/io.c: fix for the allocation failure' > and use better error handling for file systems that do not support > fallocate() for an unaligned byte range. Allow falling back to pwrite > in case fallocate() returns EINVAL. > > Suggested-by: Kevin Wolf <kwolf@redhat.com> > Suggested-by: Eric Blake <eblake@redhat.com> > Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > block/file-posix.c | 7 +++++++ > block/io.c | 2 +- > 2 files changed, 8 insertions(+), 1 deletion(-) Queuing this in my NBD tree (as I performed testing on top of it when working on NBD fast-zero).
On 27/08/2019 16:55, Eric Blake wrote: > On 8/27/19 8:52 AM, Andrey Shinkevich wrote: >> Revert the commit 118f99442d 'block/io.c: fix for the allocation failure' >> and use better error handling for file systems that do not support >> fallocate() for an unaligned byte range. Allow falling back to pwrite >> in case fallocate() returns EINVAL. >> >> Suggested-by: Kevin Wolf <kwolf@redhat.com> >> Suggested-by: Eric Blake <eblake@redhat.com> >> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> >> Reviewed-by: Eric Blake <eblake@redhat.com> >> --- >> block/file-posix.c | 7 +++++++ >> block/io.c | 2 +- >> 2 files changed, 8 insertions(+), 1 deletion(-) > > Queuing this in my NBD tree (as I performed testing on top of it when > working on NBD fast-zero). > Eric, I'm sorry about missing your message in the previous email thread - just few minute difference. Please add Reviewed-by: Denis V. Lunev <den@openvz.org> because I used the stale commit ID from bash history and that line didn't go to the v2 patch ((( Thank you. Andrey
On 27/08/2019 16:55, Eric Blake wrote: > On 8/27/19 8:52 AM, Andrey Shinkevich wrote: >> Revert the commit 118f99442d 'block/io.c: fix for the allocation failure' >> and use better error handling for file systems that do not support >> fallocate() for an unaligned byte range. Allow falling back to pwrite >> in case fallocate() returns EINVAL. >> >> Suggested-by: Kevin Wolf <kwolf@redhat.com> >> Suggested-by: Eric Blake <eblake@redhat.com> >> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> >> Reviewed-by: Eric Blake <eblake@redhat.com> >> --- >> block/file-posix.c | 7 +++++++ >> block/io.c | 2 +- >> 2 files changed, 8 insertions(+), 1 deletion(-) > > Queuing this in my NBD tree (as I performed testing on top of it when > working on NBD fast-zero). > Also, maybe the thread message ID would be good to mention as well: <1554474244-553661-1-git-send-email-andrey.shinkevich@virtuozzo.com> Andrey
On 8/27/19 9:04 AM, Andrey Shinkevich wrote: > > > On 27/08/2019 16:55, Eric Blake wrote: >> On 8/27/19 8:52 AM, Andrey Shinkevich wrote: >>> Revert the commit 118f99442d 'block/io.c: fix for the allocation failure' >>> and use better error handling for file systems that do not support >>> fallocate() for an unaligned byte range. Allow falling back to pwrite >>> in case fallocate() returns EINVAL. >>> >>> Suggested-by: Kevin Wolf <kwolf@redhat.com> >>> Suggested-by: Eric Blake <eblake@redhat.com> >>> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> >>> Reviewed-by: Eric Blake <eblake@redhat.com> >>> --- >>> block/file-posix.c | 7 +++++++ >>> block/io.c | 2 +- >>> 2 files changed, 8 insertions(+), 1 deletion(-) >> >> Queuing this in my NBD tree (as I performed testing on top of it when >> working on NBD fast-zero). >> > Eric, > I'm sorry about missing your message in the previous email thread - just > few minute difference. Please add > Reviewed-by: Denis V. Lunev <den@openvz.org> > because I used the stale commit ID from bash history and that line > didn't go to the v2 patch ((( No problem - crossed emails is nothing new. I'll add the R-b.
On 27/08/2019 17:30, Eric Blake wrote: > On 8/27/19 9:04 AM, Andrey Shinkevich wrote: >> >> >> On 27/08/2019 16:55, Eric Blake wrote: >>> On 8/27/19 8:52 AM, Andrey Shinkevich wrote: >>>> Revert the commit 118f99442d 'block/io.c: fix for the allocation failure' >>>> and use better error handling for file systems that do not support >>>> fallocate() for an unaligned byte range. Allow falling back to pwrite >>>> in case fallocate() returns EINVAL. >>>> >>>> Suggested-by: Kevin Wolf <kwolf@redhat.com> >>>> Suggested-by: Eric Blake <eblake@redhat.com> >>>> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> >>>> Reviewed-by: Eric Blake <eblake@redhat.com> >>>> --- >>>> block/file-posix.c | 7 +++++++ >>>> block/io.c | 2 +- >>>> 2 files changed, 8 insertions(+), 1 deletion(-) >>> >>> Queuing this in my NBD tree (as I performed testing on top of it when >>> working on NBD fast-zero). >>> >> Eric, >> I'm sorry about missing your message in the previous email thread - just >> few minute difference. Please add >> Reviewed-by: Denis V. Lunev <den@openvz.org> >> because I used the stale commit ID from bash history and that line >> didn't go to the v2 patch ((( > > No problem - crossed emails is nothing new. I'll add the R-b. > > Thanks a lot Eric. Andrey
diff --git a/block/file-posix.c b/block/file-posix.c index fbeb006..b00259f 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -1588,6 +1588,13 @@ static int handle_aiocb_write_zeroes(void *opaque) if (s->has_write_zeroes) { int ret = do_fallocate(s->fd, FALLOC_FL_ZERO_RANGE, aiocb->aio_offset, aiocb->aio_nbytes); + if (ret == -EINVAL) { + /* + * Allow falling back to pwrite for file systems that + * do not support fallocate() for an unaligned byte range. + */ + return -ENOTSUP; + } if (ret == 0 || ret != -ENOTSUP) { return ret; } diff --git a/block/io.c b/block/io.c index 56bbf19..58f08cd 100644 --- a/block/io.c +++ b/block/io.c @@ -1558,7 +1558,7 @@ static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs, assert(!bs->supported_zero_flags); } - if (ret < 0 && !(flags & BDRV_REQ_NO_FALLBACK)) { + if (ret == -ENOTSUP && !(flags & BDRV_REQ_NO_FALLBACK)) { /* Fall back to bounce buffer if write zeroes is unsupported */ BdrvRequestFlags write_flags = flags & ~BDRV_REQ_ZERO_WRITE;