+Stefan On 10/18/21 20:07, Ari Sundholm wrote: > AIO discards regressed as a result of the following commit: > 0dfc7af2 block/file-posix: Optimize for macOS > > When trying to run blkdiscard within a Linux guest, the request would > fail, with some errors in dmesg: > > ---- [ snip ] ---- > [ 4.010070] sd 2:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_OK > driverbyte=DRIVER_SENSE > [ 4.011061] sd 2:0:0:0: [sda] tag#0 Sense Key : Aborted Command > [current] > [ 4.011061] sd 2:0:0:0: [sda] tag#0 Add. Sense: I/O process > terminated > [ 4.011061] sd 2:0:0:0: [sda] tag#0 CDB: Unmap/Read sub-channel 42 > 00 00 00 00 00 00 00 18 00 > [ 4.011061] blk_update_request: I/O error, dev sda, sector 0 > ---- [ snip ] ---- > > This turns out to be a result of a flaw in changes to the error value > translation logic in handle_aiocb_discard(). The default return value > may be left untranslated in some configurations, and the wrong variable > is used in one translation. > > Fix both issues.
Worth including: Cc: qemu-sta...@nongnu.org Fixes: 0dfc7af2b28 ("block/file-posix: Optimize for macOS") > Signed-off-by: Ari Sundholm <a...@tuxera.com> > Signed-off-by: Emil Karlson <jkarl...@tuxera.com> > --- > block/file-posix.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/block/file-posix.c b/block/file-posix.c > index 53be0bdc1b..6def2a4cba 100644 > --- a/block/file-posix.c > +++ b/block/file-posix.c > @@ -1807,7 +1807,7 @@ static int handle_aiocb_copy_range(void *opaque) > static int handle_aiocb_discard(void *opaque) > { > RawPosixAIOData *aiocb = opaque; > - int ret = -EOPNOTSUPP; > + int ret = -ENOTSUP; > BDRVRawState *s = aiocb->bs->opaque; > > if (!s->has_discard) { > @@ -1829,7 +1829,7 @@ static int handle_aiocb_discard(void *opaque) > #ifdef CONFIG_FALLOCATE_PUNCH_HOLE > ret = do_fallocate(s->fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, > aiocb->aio_offset, aiocb->aio_nbytes); > - ret = translate_err(-errno); > + ret = translate_err(ret); > #elif defined(__APPLE__) && (__MACH__) > fpunchhole_t fpunchhole; > fpunchhole.fp_flags = 0; >