yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
ae23c9
From 2bcabbe52038d80315596e3606bf3afb80e1ce80 Mon Sep 17 00:00:00 2001
ae23c9
From: Max Reitz <mreitz@redhat.com>
ae23c9
Date: Mon, 18 Jun 2018 18:00:53 +0200
ae23c9
Subject: [PATCH 056/268] block: Make bdrv_is_writable() public
ae23c9
ae23c9
RH-Author: Max Reitz <mreitz@redhat.com>
ae23c9
Message-id: <20180618180055.22739-2-mreitz@redhat.com>
ae23c9
Patchwork-id: 80792
ae23c9
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 1/3] block: Make bdrv_is_writable() public
ae23c9
Bugzilla: 1588039
ae23c9
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
ae23c9
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
ae23c9
RH-Acked-by: John Snow <jsnow@redhat.com>
ae23c9
ae23c9
This is a useful function for the whole block layer, so make it public.
ae23c9
At the same time, users outside of block.c probably do not need to make
ae23c9
use of the reopen functionality, so rename the current function to
ae23c9
bdrv_is_writable_after_reopen() create a new bdrv_is_writable() function
ae23c9
that just passes NULL to it for the reopen queue.
ae23c9
ae23c9
Cc: qemu-stable@nongnu.org
ae23c9
Signed-off-by: Max Reitz <mreitz@redhat.com>
ae23c9
Message-id: 20180606193702.7113-2-mreitz@redhat.com
ae23c9
Reviewed-by: John Snow <jsnow@redhat.com>
ae23c9
Reviewed-by: Jeff Cody <jcody@redhat.com>
ae23c9
Signed-off-by: Max Reitz <mreitz@redhat.com>
ae23c9
(cherry picked from commit cc022140972f8b6ac3973c12ccf9dd6b1d2fd200)
ae23c9
Signed-off-by: Max Reitz <mreitz@redhat.com>
ae23c9
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
ae23c9
---
ae23c9
 block.c               | 17 ++++++++++++++---
ae23c9
 include/block/block.h |  1 +
ae23c9
 2 files changed, 15 insertions(+), 3 deletions(-)
ae23c9
ae23c9
diff --git a/block.c b/block.c
ae23c9
index 3c3e8fd..982d54e 100644
ae23c9
--- a/block.c
ae23c9
+++ b/block.c
ae23c9
@@ -1621,13 +1621,24 @@ static int bdrv_reopen_get_flags(BlockReopenQueue *q, BlockDriverState *bs)
ae23c9
 
ae23c9
 /* Returns whether the image file can be written to after the reopen queue @q
ae23c9
  * has been successfully applied, or right now if @q is NULL. */
ae23c9
-static bool bdrv_is_writable(BlockDriverState *bs, BlockReopenQueue *q)
ae23c9
+static bool bdrv_is_writable_after_reopen(BlockDriverState *bs,
ae23c9
+                                          BlockReopenQueue *q)
ae23c9
 {
ae23c9
     int flags = bdrv_reopen_get_flags(q, bs);
ae23c9
 
ae23c9
     return (flags & (BDRV_O_RDWR | BDRV_O_INACTIVE)) == BDRV_O_RDWR;
ae23c9
 }
ae23c9
 
ae23c9
+/*
ae23c9
+ * Return whether the BDS can be written to.  This is not necessarily
ae23c9
+ * the same as !bdrv_is_read_only(bs), as inactivated images may not
ae23c9
+ * be written to but do not count as read-only images.
ae23c9
+ */
ae23c9
+bool bdrv_is_writable(BlockDriverState *bs)
ae23c9
+{
ae23c9
+    return bdrv_is_writable_after_reopen(bs, NULL);
ae23c9
+}
ae23c9
+
ae23c9
 static void bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_bs,
ae23c9
                             BdrvChild *c, const BdrvChildRole *role,
ae23c9
                             BlockReopenQueue *reopen_queue,
ae23c9
@@ -1665,7 +1676,7 @@ static int bdrv_check_perm(BlockDriverState *bs, BlockReopenQueue *q,
ae23c9
 
ae23c9
     /* Write permissions never work with read-only images */
ae23c9
     if ((cumulative_perms & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) &&
ae23c9
-        !bdrv_is_writable(bs, q))
ae23c9
+        !bdrv_is_writable_after_reopen(bs, q))
ae23c9
     {
ae23c9
         error_setg(errp, "Block node is read-only");
ae23c9
         return -EPERM;
ae23c9
@@ -1957,7 +1968,7 @@ void bdrv_format_default_perms(BlockDriverState *bs, BdrvChild *c,
ae23c9
                                   &perm, &shared);
ae23c9
 
ae23c9
         /* Format drivers may touch metadata even if the guest doesn't write */
ae23c9
-        if (bdrv_is_writable(bs, reopen_queue)) {
ae23c9
+        if (bdrv_is_writable_after_reopen(bs, reopen_queue)) {
ae23c9
             perm |= BLK_PERM_WRITE | BLK_PERM_RESIZE;
ae23c9
         }
ae23c9
 
ae23c9
diff --git a/include/block/block.h b/include/block/block.h
ae23c9
index 3894edd..06cd772 100644
ae23c9
--- a/include/block/block.h
ae23c9
+++ b/include/block/block.h
ae23c9
@@ -407,6 +407,7 @@ bool bdrv_is_read_only(BlockDriverState *bs);
ae23c9
 int bdrv_can_set_read_only(BlockDriverState *bs, bool read_only,
ae23c9
                            bool ignore_allow_rdw, Error **errp);
ae23c9
 int bdrv_set_read_only(BlockDriverState *bs, bool read_only, Error **errp);
ae23c9
+bool bdrv_is_writable(BlockDriverState *bs);
ae23c9
 bool bdrv_is_sg(BlockDriverState *bs);
ae23c9
 bool bdrv_is_inserted(BlockDriverState *bs);
ae23c9
 void bdrv_lock_medium(BlockDriverState *bs, bool locked);
ae23c9
-- 
ae23c9
1.8.3.1
ae23c9