Commit c8969ede authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

nbd: fixes to read-only handling



We do not need BLKROSET if the kernel supports setting flags.
Also, always do BLKROSET even for a read-write export, otherwise
the read-only state remains "sticky" after the invocation of
"qemu-nbd -r".

Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 4057725f
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -596,8 +596,9 @@ int nbd_init(int fd, int csock, uint32_t flags, off_t size, size_t blocksize)
        return -serrno;
    }

    if (flags & NBD_FLAG_READ_ONLY) {
        int read_only = 1;
    if (ioctl(fd, NBD_SET_FLAGS, flags) < 0) {
        if (errno == ENOTTY) {
            int read_only = (flags & NBD_FLAG_READ_ONLY) != 0;
            TRACE("Setting readonly attribute");

            if (ioctl(fd, BLKROSET, (unsigned long) &read_only) < 0) {
@@ -605,14 +606,12 @@ int nbd_init(int fd, int csock, uint32_t flags, off_t size, size_t blocksize)
                LOG("Failed setting read-only attribute");
                return -serrno;
            }
    }

    if (ioctl(fd, NBD_SET_FLAGS, flags) < 0
        && errno != ENOTTY) {
        } else {
            int serrno = errno;
            LOG("Failed setting flags");
            return -serrno;
        }
    }

    TRACE("Negotiation ended");