Blame SOURCES/kvm-block-Make-bdrv_is_writable-public.patch

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