On 1/18/21 1:34 PM, Kevin Wolf wrote: > Currently, blk_is_read_only() tells whether a given BlockBackend can > only be used in read-only mode because its root node is read-only. Some > callers actually try to answer a slightly different question: Is the > BlockBackend configured to be writable, by taking write permissions on > the root node? > > This can differ, for example, for CD-ROM devices which don't take write > permissions, but may be backed by a writable image file. scsi-cd allows > write requests to the drive if blk_is_read_only() returns false. > However, the write request will immediately run into an assertion > failure because the write permission is missing. > > This patch introduces separate functions for both questions. > blk_supports_write_perm() answers the question whether the block > node/image file can support writable devices, whereas blk_is_writable() > tells whether the BlockBackend is currently configured to be writable. > > All calls of blk_is_read_only() are converted to one of the two new > functions. > > Fixes: https://bugs.launchpad.net/bugs/1906693 > Cc: qemu-sta...@nongnu.org > Signed-off-by: Kevin Wolf <kw...@redhat.com> > --- > include/sysemu/block-backend.h | 3 ++- > block/block-backend.c | 19 ++++++++++++++++--- > hw/block/dataplane/xen-block.c | 2 +- > hw/block/fdc.c | 9 +++++---- > hw/block/m25p80.c | 6 +++--- > hw/block/nand.c | 2 +- > hw/block/nvme-ns.c | 7 ++++--- > hw/block/onenand.c | 2 +- > hw/block/pflash_cfi01.c | 2 +- > hw/block/pflash_cfi02.c | 2 +- > hw/block/swim.c | 6 +++--- > hw/block/virtio-blk.c | 6 +++--- > hw/block/xen-block.c | 2 +- > hw/ide/core.c | 2 +- > hw/misc/sifive_u_otp.c | 2 +- > hw/ppc/pnv_pnor.c | 2 +- > hw/scsi/scsi-disk.c | 10 +++++----- > hw/scsi/scsi-generic.c | 4 ++-- > hw/sd/sd.c | 6 +++--- > hw/usb/dev-storage.c | 4 ++-- > 20 files changed, 57 insertions(+), 41 deletions(-)
Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com>