qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Fam Zheng <famz@redhat.com>
To: qemu-devel@nongnu.org
Cc: eblake@redhat.com, Kevin Wolf <kwolf@redhat.com>,
	Max Reitz <mreitz@redhat.com>,
	qemu-block@nongnu.org
Subject: [Qemu-devel] [PATCH v16 03/22] block: Respect "force-share" in perm propagating
Date: Tue,  2 May 2017 16:18:13 +0800	[thread overview]
Message-ID: <20170502081832.9546-4-famz@redhat.com> (raw)
In-Reply-To: <20170502081832.9546-1-famz@redhat.com>

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 block.c | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

diff --git a/block.c b/block.c
index 3e77fa4..e33f221 100644
--- a/block.c
+++ b/block.c
@@ -1467,6 +1467,22 @@ static int bdrv_child_check_perm(BdrvChild *c, uint64_t perm, uint64_t shared,
 static void bdrv_child_abort_perm_update(BdrvChild *c);
 static void bdrv_child_set_perm(BdrvChild *c, uint64_t perm, uint64_t shared);
 
+static void bdrv_child_perm(BlockDriverState *bs, BlockDriverState *child_bs,
+                            BdrvChild *c,
+                            const BdrvChildRole *role,
+                            uint64_t parent_perm, uint64_t parent_shared,
+                            uint64_t *nperm, uint64_t *nshared)
+{
+    if (bs->drv && bs->drv->bdrv_child_perm) {
+        bs->drv->bdrv_child_perm(bs, c, role,
+                                 parent_perm, parent_shared,
+                                 nperm, nshared);
+    }
+    if (child_bs && child_bs->force_share) {
+        *nshared = BLK_PERM_ALL;
+    }
+}
+
 /*
  * Check whether permissions on this node can be changed in a way that
  * @cumulative_perms and @cumulative_shared_perms are the new cumulative
@@ -1511,9 +1527,9 @@ static int bdrv_check_perm(BlockDriverState *bs, uint64_t cumulative_perms,
     /* Check all children */
     QLIST_FOREACH(c, &bs->children, next) {
         uint64_t cur_perm, cur_shared;
-        drv->bdrv_child_perm(bs, c, c->role,
-                             cumulative_perms, cumulative_shared_perms,
-                             &cur_perm, &cur_shared);
+        bdrv_child_perm(bs, c->bs, c, c->role,
+                        cumulative_perms, cumulative_shared_perms,
+                        &cur_perm, &cur_shared);
         ret = bdrv_child_check_perm(c, cur_perm, cur_shared, ignore_children,
                                     errp);
         if (ret < 0) {
@@ -1573,9 +1589,9 @@ static void bdrv_set_perm(BlockDriverState *bs, uint64_t cumulative_perms,
     /* Update all children */
     QLIST_FOREACH(c, &bs->children, next) {
         uint64_t cur_perm, cur_shared;
-        drv->bdrv_child_perm(bs, c, c->role,
-                             cumulative_perms, cumulative_shared_perms,
-                             &cur_perm, &cur_shared);
+        bdrv_child_perm(bs, c->bs, c, c->role,
+                        cumulative_perms, cumulative_shared_perms,
+                        &cur_perm, &cur_shared);
         bdrv_child_set_perm(c, cur_perm, cur_shared);
     }
 }
@@ -1910,8 +1926,8 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
 
     assert(parent_bs->drv);
     assert(bdrv_get_aio_context(parent_bs) == bdrv_get_aio_context(child_bs));
-    parent_bs->drv->bdrv_child_perm(parent_bs, NULL, child_role,
-                                    perm, shared_perm, &perm, &shared_perm);
+    bdrv_child_perm(parent_bs, child_bs, NULL, child_role,
+                    perm, shared_perm, &perm, &shared_perm);
 
     child = bdrv_root_attach_child(child_bs, child_name, child_role,
                                    perm, shared_perm, parent_bs, errp);
-- 
2.9.3

  parent reply	other threads:[~2017-05-02  8:18 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-02  8:18 [Qemu-devel] [PATCH v16 00/22] block: Image locking series Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 01/22] block: Make bdrv_perm_names public Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 02/22] block: Add, parse and store "force-share" option Fam Zheng
2017-05-02  8:18 ` Fam Zheng [this message]
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 04/22] qemu-img: Add --force-share option to subcommands Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 05/22] qemu-img: Update documentation for -U Fam Zheng
2017-05-02 14:04   ` Kevin Wolf
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 06/22] qemu-io: Add --force-share option Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 07/22] iotests: 030: Prepare for image locking Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 08/22] iotests: 046: " Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 09/22] iotests: 055: Don't attach the target image already for drive-backup Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 10/22] iotests: 085: Avoid image locking conflict Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 11/22] iotests: 087: Don't attach test image twice Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 12/22] iotests: 091: Quit QEMU before checking image Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 13/22] iotests: 172: Use separate images for multiple devices Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 14/22] tests: Use null-co:// instead of /dev/null as the dummy image Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 15/22] file-posix: Add 'locking' option Fam Zheng
2017-05-02 14:15   ` Kevin Wolf
2017-05-02 15:49     ` Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 16/22] tests: Disable image lock in test-replication Fam Zheng
2017-05-04  9:10   ` 谢昌龙
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 17/22] block: Reuse bs as backing hd for drive-backup sync=none Fam Zheng
2017-05-02 14:21   ` Kevin Wolf
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 18/22] osdep: Add qemu_lock_fd and qemu_unlock_fd Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 19/22] osdep: Fall back to posix lock when OFD lock is unavailable Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 20/22] file-posix: Add image locking to perm operations Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 21/22] qemu-iotests: Add test case 153 for image locking Fam Zheng
2017-05-02 14:59   ` Kevin Wolf
2017-05-02 15:49     ` Fam Zheng
2017-05-02  8:18 ` [Qemu-devel] [PATCH v16 22/22] tests: Add POSIX image locking test case 182 Fam Zheng
2017-05-02 14:06 ` [Qemu-devel] [PATCH v16 00/22] block: Image locking series Kevin Wolf
2017-05-02 15:04 ` Kevin Wolf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170502081832.9546-4-famz@redhat.com \
    --to=famz@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).