qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] block: assert that permission commit sets same permissio


From: Vladimir Sementsov-Ogievskiy
Subject: Re: [PATCH 2/2] block: assert that permission commit sets same permissions
Date: Sat, 31 Oct 2020 16:23:44 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0

31.10.2020 15:35, Vladimir Sementsov-Ogievskiy wrote:
On permission update commit we must set same permissions as on _check_.
Let's add assertions. Next step may be to drop permission parameters
from _set_.

Note that prior to previous commit, fixing bdrv_drop_intermediate(),
new assertion in bdrv_child_set_perm() crashes on iotests 30 and 40.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
  block.c | 11 +++++++++--
  1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/block.c b/block.c
index bd9f4e534b..0f4da59a6c 100644
--- a/block.c
+++ b/block.c
@@ -2105,9 +2105,10 @@ static void bdrv_abort_perm_update(BlockDriverState *bs)
      }
  }
-static void bdrv_set_perm(BlockDriverState *bs, uint64_t cumulative_perms,
-                          uint64_t cumulative_shared_perms)
+static void bdrv_set_perm(BlockDriverState *bs, uint64_t _cumulative_perms,
+                          uint64_t _cumulative_shared_perms)
  {
+    uint64_t cumulative_perms, cumulative_shared_perms;
      BlockDriver *drv = bs->drv;
      BdrvChild *c;
@@ -2115,6 +2116,10 @@ static void bdrv_set_perm(BlockDriverState *bs, uint64_t cumulative_perms,
          return;
      }
+ bdrv_get_cumulative_perm(bs, &cumulative_perms, &cumulative_shared_perms);
+    assert(_cumulative_perms == cumulative_perms);
+    assert(_cumulative_shared_perms == cumulative_shared_perms);
+
      /* Update this node */
      if (drv->bdrv_set_perm) {
          drv->bdrv_set_perm(bs, cumulative_perms, cumulative_shared_perms);
@@ -2301,6 +2306,8 @@ static void bdrv_child_set_perm(BdrvChild *c, uint64_t 
perm, uint64_t shared)
c->has_backup_perm = false; + assert(c->perm == perm);
+    assert(c->shared_perm == shared);
      c->perm = perm;
      c->shared_perm = shared;

squash:

@@ -2308,8 +2308,6 @@ static void bdrv_child_set_perm(BdrvChild *c, uint64_t 
perm, uint64_t shared)
assert(c->perm == perm);
     assert(c->shared_perm == shared);
-    c->perm = perm;
-    c->shared_perm = shared;
bdrv_get_cumulative_perm(c->bs, &cumulative_perms,
                              &cumulative_shared_perms);



--
Best regards,
Vladimir



reply via email to

[Prev in Thread] Current Thread [Next in Thread]