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

[qemu-xen staging] block/file-posix: Fix return value translation for AIO discards



commit ebf660beb171d40af179f84a967b710199f81511
Author:     Ari Sundholm <ari@xxxxxxxxxx>
AuthorDate: Tue Oct 19 14:09:55 2021 +0300
Commit:     Michael Roth <michael.roth@xxxxxxx>
CommitDate: Tue Dec 14 14:12:50 2021 -0600

    block/file-posix: Fix return value translation for AIO discards
    
    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.
    
    Fixes: 0dfc7af2b28 ("block/file-posix: Optimize for macOS")
    Cc: qemu-stable@xxxxxxxxxx
    Signed-off-by: Ari Sundholm <ari@xxxxxxxxxx>
    Signed-off-by: Emil Karlson <jkarlson@xxxxxxxxxx>
    Reviewed-by: Akihiko Odaki <akihiko.odaki@xxxxxxxxx>
    Reviewed-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
    Message-Id: <20211019110954.4170931-1-ari@xxxxxxxxxx>
    Signed-off-by: Kevin Wolf <kwolf@xxxxxxxxxx>
    (cherry picked from commit 13a028336f2c05e7ff47dfdaf30dfac7f4883e80)
    Signed-off-by: Michael Roth <michael.roth@xxxxxxx>
---
 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 1567edb3d5..dd295cfc6d 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;
--
generated by git-patchbot for /home/xen/git/qemu-xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.