On 21.02.2017 15:58, Kevin Wolf wrote:
> Now that all block drivers with children tell us what permissions they
> need from each of their children, bdrv_attach_child() can use this
> information and make the right requirements while trying to attach new
> children.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/block.c b/block.c
> index 1c5f211..054e6f0 100644
> --- a/block.c
> +++ b/block.c
> @@ -1659,10 +1659,14 @@ BdrvChild *bdrv_attach_child(BlockDriverState *parent_bs,
> Error **errp)
> {
> BdrvChild *child;
> + uint64_t perm, shared_perm;
> +
> + assert(parent_bs->drv);
> + parent_bs->drv->bdrv_child_perm(parent_bs, NULL, child_role,
> + 0, BLK_PERM_ALL, &perm, &shared_perm);
Another Second Thought™: Why do we request no permissions for the new
child here? Seems weird to me. Shouldn't the caller specify the
necessary permissions and what can be shared?
Max
>
> - /* FIXME Use real permissions */
> child = bdrv_root_attach_child(child_bs, child_name, child_role,
> - 0, BLK_PERM_ALL, parent_bs, errp);
> + perm, shared_perm, parent_bs, errp);
> if (child == NULL) {
> return NULL;
> }
>