Commit b857431d authored by Fam Zheng's avatar Fam Zheng Committed by Kevin Wolf
Browse files

file-posix: Include filename in locking error message



Image locking errors happening at device initialization time doesn't say
which file cannot be locked, for instance,

    -device scsi-disk,drive=drive-1: Failed to get shared "write" lock
    Is another process using the image?

could refer to either the overlay image or its backing image.

Hoist the error_append_hint to the caller of raw_check_lock_bytes where
file name is known, and include it in the error hint.

Signed-off-by: default avatarFam Zheng <famz@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent 07f426c3
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -741,8 +741,6 @@ static int raw_check_lock_bytes(int fd, uint64_t perm, uint64_t shared_perm,
                           "Failed to get \"%s\" lock",
                           perm_name);
                g_free(perm_name);
                error_append_hint(errp,
                                  "Is another process using the image?\n");
                return ret;
            }
        }
@@ -758,8 +756,6 @@ static int raw_check_lock_bytes(int fd, uint64_t perm, uint64_t shared_perm,
                           "Failed to get shared \"%s\" lock",
                           perm_name);
                g_free(perm_name);
                error_append_hint(errp,
                                  "Is another process using the image?\n");
                return ret;
            }
        }
@@ -796,6 +792,9 @@ static int raw_handle_perm_lock(BlockDriverState *bs,
            if (!ret) {
                return 0;
            }
            error_append_hint(errp,
                              "Is another process using the image [%s]?\n",
                              bs->filename);
        }
        op = RAW_PL_ABORT;
        /* fall through to unlock bytes. */
@@ -2217,6 +2216,9 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
    /* Step two: Check that nobody else has taken conflicting locks */
    result = raw_check_lock_bytes(fd, perm, shared, errp);
    if (result < 0) {
        error_append_hint(errp,
                          "Is another process using the image [%s]?\n",
                          file_opts->filename);
        goto out_unlock;
    }

+38 −38
Original line number Diff line number Diff line
@@ -12,11 +12,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33554432 backing_file=TEST_DIR/t

== Launching another QEMU, opts: '' ==
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=none,: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Launching another QEMU, opts: 'read-only=on' ==
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=none,read-only=on: Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Launching another QEMU, opts: 'read-only=on,force-share=on' ==

@@ -24,77 +24,77 @@ Is another process using the image?

_qemu_io_wrapper -c read 0 512 TEST_DIR/t.qcow2
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_io_wrapper -r -c read 0 512 TEST_DIR/t.qcow2
can't open device TEST_DIR/t.qcow2: Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_io_wrapper -c open  TEST_DIR/t.qcow2 -c read 0 512
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
no file open, try 'help open'

_qemu_io_wrapper -c open -r  TEST_DIR/t.qcow2 -c read 0 512
can't open device TEST_DIR/t.qcow2: Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
no file open, try 'help open'

_qemu_img_wrapper info TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper check TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper compare TEST_DIR/t.qcow2 TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper map TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper amend -o  TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper commit TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper resize TEST_DIR/t.qcow2 32M
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper rebase TEST_DIR/t.qcow2 -b TEST_DIR/t.qcow2.base
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper snapshot -l TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper convert TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.convert
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper dd if=TEST_DIR/t.qcow2 of=TEST_DIR/t.qcow2.convert bs=512 count=1
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper bench -c 1 TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper bench -w -c 1 TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper create -f qcow2 TEST_DIR/t.qcow2 -b TEST_DIR/t.qcow2.base
qemu-img: TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
file format: IMGFMT

== Running utility commands -U ==
@@ -132,7 +132,7 @@ Try 'qemu-img --help' for more information

_qemu_img_wrapper rebase -U TEST_DIR/t.qcow2 -b TEST_DIR/t.qcow2.base
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper snapshot -l -U TEST_DIR/t.qcow2

@@ -157,7 +157,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=33554432 backing_file=TEST_DIR/t

== Launching another QEMU, opts: '' ==
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=none,: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Launching another QEMU, opts: 'read-only=on' ==

@@ -167,13 +167,13 @@ Is another process using the image?

_qemu_io_wrapper -c read 0 512 TEST_DIR/t.qcow2
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_io_wrapper -r -c read 0 512 TEST_DIR/t.qcow2

_qemu_io_wrapper -c open  TEST_DIR/t.qcow2 -c read 0 512
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
no file open, try 'help open'

_qemu_io_wrapper -c open -r  TEST_DIR/t.qcow2 -c read 0 512
@@ -188,19 +188,19 @@ _qemu_img_wrapper map TEST_DIR/t.qcow2

_qemu_img_wrapper amend -o  TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper commit TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper resize TEST_DIR/t.qcow2 32M
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper rebase TEST_DIR/t.qcow2 -b TEST_DIR/t.qcow2.base
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper snapshot -l TEST_DIR/t.qcow2

@@ -212,11 +212,11 @@ _qemu_img_wrapper bench -c 1 TEST_DIR/t.qcow2

_qemu_img_wrapper bench -w -c 1 TEST_DIR/t.qcow2
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper create -f qcow2 TEST_DIR/t.qcow2 -b TEST_DIR/t.qcow2.base
qemu-img: TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
file format: IMGFMT

== Running utility commands -U ==
@@ -254,7 +254,7 @@ Try 'qemu-img --help' for more information

_qemu_img_wrapper rebase -U TEST_DIR/t.qcow2 -b TEST_DIR/t.qcow2.base
qemu-img: Could not open 'TEST_DIR/t.qcow2': Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

_qemu_img_wrapper snapshot -l -U TEST_DIR/t.qcow2

@@ -372,17 +372,17 @@ Round done

== Two devices with the same image (read-only=off - read-only=off) ==
QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2,read-only=off: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Two devices with the same image (read-only=off - read-only=on) ==
QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2,read-only=on: Failed to get shared "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Two devices with the same image (read-only=off - read-only=on,force-share=on) ==

== Two devices with the same image (read-only=on - read-only=off) ==
QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2,read-only=off: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Two devices with the same image (read-only=on - read-only=on) ==

@@ -403,13 +403,13 @@ Formatting 'TEST_DIR/t.IMGFMT.c', fmt=IMGFMT size=33554432 backing_file=TEST_DIR

== Backing image also as an active device ==
QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Backing image also as an active device (ro) ==

== Symbolic link ==
QEMU_PROG: -drive if=none,file=TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?

== Active commit to intermediate layer should work when base in use ==
{"return": {}}
@@ -420,7 +420,7 @@ Adding drive

_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
Creating overlay with qemu-img when the guest is running should be allowed

_qemu_img_wrapper create -f qcow2 -b TEST_DIR/t.qcow2 TEST_DIR/t.qcow2.overlay
@@ -433,7 +433,7 @@ _qemu_img_wrapper info TEST_DIR/t.qcow2

_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512
can't open device TEST_DIR/t.qcow2: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
Closing the other

_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512
+1 −1
Original line number Diff line number Diff line
@@ -4,5 +4,5 @@ Starting QEMU

Starting a second QEMU using the same image should fail
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0,file.locking=on: Failed to get "write" lock
Is another process using the image?
Is another process using the image [TEST_DIR/t.qcow2]?
*** done