[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 36/36] block: refactor bdrv_node_check_perm()
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH v2 36/36] block: refactor bdrv_node_check_perm() |
Date: |
Fri, 27 Nov 2020 17:45:22 +0300 |
Now, bdrv_node_check_perm() is called only with fresh cumulative
permissions, so its actually "refresh_perm".
Move permission calculation to the function. Also, drop unreachable
error message.
Add also Virtuozzo copyright, as big work is done at this point.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
block.c | 38 +++++++++-----------------------------
1 file changed, 9 insertions(+), 29 deletions(-)
diff --git a/block.c b/block.c
index 20b1cf59f7..576b145cbf 100644
--- a/block.c
+++ b/block.c
@@ -2,6 +2,7 @@
* QEMU System Emulator block driver
*
* Copyright (c) 2003 Fabrice Bellard
+ * Copyright (c) 2020 Virtuozzo International GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
deal
@@ -2204,23 +2205,15 @@ static void bdrv_replace_child(BdrvChild *child,
BlockDriverState *new_bs,
/* old_bs reference is transparently moved from @child to @s */
}
-/*
- * Check whether permissions on this node can be changed in a way that
- * @cumulative_perms and @cumulative_shared_perms are the new cumulative
- * permissions of all its parents. This involves checking whether all necessary
- * permission changes to child nodes can be performed.
- *
- * A call to this function must always be followed by a call to bdrv_set_perm()
- * or bdrv_abort_perm_update().
- */
-static int bdrv_node_check_perm(BlockDriverState *bs, BlockReopenQueue *q,
- uint64_t cumulative_perms,
- uint64_t cumulative_shared_perms,
- GSList **tran, Error **errp)
+static int bdrv_node_refresh_perm(BlockDriverState *bs, BlockReopenQueue *q,
+ GSList **tran, Error **errp)
{
BlockDriver *drv = bs->drv;
BdrvChild *c;
int ret;
+ uint64_t cumulative_perms, cumulative_shared_perms;
+
+ bdrv_get_cumulative_perm(bs, &cumulative_perms, &cumulative_shared_perms);
/* Write permissions never work with read-only images */
if ((cumulative_perms & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) &&
@@ -2229,15 +2222,8 @@ static int bdrv_node_check_perm(BlockDriverState *bs,
BlockReopenQueue *q,
if (!bdrv_is_writable_after_reopen(bs, NULL)) {
error_setg(errp, "Block node is read-only");
} else {
- uint64_t current_perms, current_shared;
- bdrv_get_cumulative_perm(bs, ¤t_perms, ¤t_shared);
- if (current_perms & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) {
- error_setg(errp, "Cannot make block node read-only, there is "
- "a writer on it");
- } else {
- error_setg(errp, "Cannot make block node read-only and create "
- "a writer on it");
- }
+ error_setg(errp, "Cannot make block node read-only, there is "
+ "a writer on it");
}
return -EPERM;
@@ -2293,7 +2279,6 @@ static int bdrv_list_refresh_perms(GSList *list,
BlockReopenQueue *q,
GSList **tran, Error **errp)
{
int ret;
- uint64_t cumulative_perms, cumulative_shared_perms;
BlockDriverState *bs;
for ( ; list; list = list->next) {
@@ -2303,12 +2288,7 @@ static int bdrv_list_refresh_perms(GSList *list,
BlockReopenQueue *q,
return -EINVAL;
}
- bdrv_get_cumulative_perm(bs, &cumulative_perms,
- &cumulative_shared_perms);
-
- ret = bdrv_node_check_perm(bs, q, cumulative_perms,
- cumulative_shared_perms,
- tran, errp);
+ ret = bdrv_node_refresh_perm(bs, q, tran, errp);
if (ret < 0) {
return ret;
}
--
2.21.3
- [PATCH v2 27/36] block: drop ignore_children for permission update functions, (continued)
- [PATCH v2 27/36] block: drop ignore_children for permission update functions, Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 29/36] blockdev: qmp_x_blockdev_reopen: acquire all contexts, Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 33/36] block: inline bdrv_replace_child(), Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 30/36] block: bdrv_reopen_multiple: refresh permissions on updated graph, Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 32/36] block: inline bdrv_check_perm_common(), Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 31/36] block: drop unused permission update functions, Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 04/36] block: bdrv_append(): return status, Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 05/36] block: add bdrv_parent_try_set_aio_context, Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 35/36] block: rename bdrv_replace_child_safe() to bdrv_replace_child(), Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 34/36] block: refactor bdrv_child_set_perm_safe() transaction action, Vladimir Sementsov-Ogievskiy, 2020/11/27
- [PATCH v2 36/36] block: refactor bdrv_node_check_perm(),
Vladimir Sementsov-Ogievskiy <=