All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>, qemu-block@nongnu.org
Cc: jcody@redhat.com, famz@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC PATCH 25/41] blockjob: Add permissions to block_job_add_bdrv()
Date: Mon, 20 Feb 2017 14:38:39 +0100	[thread overview]
Message-ID: <dbc67cad-cfe7-3bb0-dc67-35bb0d674a9c@redhat.com> (raw)
In-Reply-To: <1487006583-24350-26-git-send-email-kwolf@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 5725 bytes --]

On 13.02.2017 18:22, Kevin Wolf wrote:
> Block jobs don't actually do I/O through the the reference they create
> with block_job_add_bdrv(), but they might want to use the permisssion
> system to express what the block job does to intermediate nodes. This
> adds permissions to block_job_add_bdrv() to provide the means to request
> permissions.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  block/backup.c           |  3 ++-
>  block/commit.c           |  7 +++++--
>  block/mirror.c           |  7 +++++--
>  block/stream.c           |  3 ++-
>  blockjob.c               | 27 +++++++++++++++++++++------
>  include/block/blockjob.h |  4 +++-
>  6 files changed, 38 insertions(+), 13 deletions(-)
> 
> diff --git a/block/backup.c b/block/backup.c
> index 12ab25c..22171f4 100644
> --- a/block/backup.c
> +++ b/block/backup.c
> @@ -657,7 +657,8 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
>          job->cluster_size = MAX(BACKUP_CLUSTER_SIZE_DEFAULT, bdi.cluster_size);
>      }
>  
> -    block_job_add_bdrv(&job->common, target);
> +    /* FIXME Use real permissions */
> +    block_job_add_bdrv(&job->common, target, 0, BLK_PERM_ALL, &error_abort);
>      job->common.len = len;
>      block_job_txn_add_job(txn, &job->common);
>  
> diff --git a/block/commit.c b/block/commit.c
> index 60d29a9..68fa2a4 100644
> --- a/block/commit.c
> +++ b/block/commit.c
> @@ -267,13 +267,16 @@ void commit_start(const char *job_id, BlockDriverState *bs,
>       * disappear from the chain after this operation. */
>      assert(bdrv_chain_contains(top, base));
>      for (iter = top; iter != backing_bs(base); iter = backing_bs(iter)) {
> -        block_job_add_bdrv(&s->common, iter);
> +        /* FIXME Use real permissions */
> +        block_job_add_bdrv(&s->common, iter, 0, BLK_PERM_ALL, &error_abort);
>      }
>      /* overlay_bs must be blocked because it needs to be modified to
>       * update the backing image string, but if it's the root node then
>       * don't block it again */
>      if (bs != overlay_bs) {
> -        block_job_add_bdrv(&s->common, overlay_bs);
> +        /* FIXME Use real permissions */
> +        block_job_add_bdrv(&s->common, overlay_bs, 0, BLK_PERM_ALL,
> +                           &error_abort);
>      }
>  
>      /* FIXME Use real permissions */
> diff --git a/block/mirror.c b/block/mirror.c
> index 22680d7..9532b18 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -1020,13 +1020,16 @@ static void mirror_start_job(const char *job_id, BlockDriverState *bs,
>          return;
>      }
>  
> -    block_job_add_bdrv(&s->common, target);
> +    /* FIXME Use real permissions */
> +    block_job_add_bdrv(&s->common, target, 0, BLK_PERM_ALL, &error_abort);
> +
>      /* In commit_active_start() all intermediate nodes disappear, so
>       * any jobs in them must be blocked */
>      if (bdrv_chain_contains(bs, target)) {
>          BlockDriverState *iter;
>          for (iter = backing_bs(bs); iter != target; iter = backing_bs(iter)) {
> -            block_job_add_bdrv(&s->common, iter);
> +            /* FIXME Use real permissions */
> +            block_job_add_bdrv(&s->common, iter, 0, BLK_PERM_ALL, &error_abort);
>          }
>      }
>  
> diff --git a/block/stream.c b/block/stream.c
> index 7f49279..47f0ffb 100644
> --- a/block/stream.c
> +++ b/block/stream.c
> @@ -248,7 +248,8 @@ void stream_start(const char *job_id, BlockDriverState *bs,
>      /* Block all intermediate nodes between bs and base, because they
>       * will disappear from the chain after this operation */
>      for (iter = backing_bs(bs); iter && iter != base; iter = backing_bs(iter)) {
> -        block_job_add_bdrv(&s->common, iter);
> +        /* FIXME Use real permissions */
> +        block_job_add_bdrv(&s->common, iter, 0, BLK_PERM_ALL, &error_abort);
>      }
>  
>      s->base = base;
> diff --git a/blockjob.c b/blockjob.c
> index 27833c7..0bcc099 100644
> --- a/blockjob.c
> +++ b/blockjob.c
> @@ -55,6 +55,10 @@ struct BlockJobTxn {
>  
>  static QLIST_HEAD(, BlockJob) block_jobs = QLIST_HEAD_INITIALIZER(block_jobs);
>  
> +static const BdrvChildRole child_job = {
> +    .stay_at_node   = true,

(1) Not a big fan of such alignment without further users.

(2) No problem though because I'd like to ask for get_link_name() and/or
get_name() here.

It should be easy to generate a nice description when using the BlockJob
as BdrvChild.opaque.

> +};
> +
>  BlockJob *block_job_next(BlockJob *job)
>  {
>      if (!job) {
> @@ -115,11 +119,22 @@ static void block_job_detach_aio_context(void *opaque)
>      block_job_unref(job);
>  }
>  
> -void block_job_add_bdrv(BlockJob *job, BlockDriverState *bs)
> +int block_job_add_bdrv(BlockJob *job, BlockDriverState *bs,
> +                       uint64_t perm, uint64_t shared_perm, Error **errp)
>  {
> -    job->nodes = g_slist_prepend(job->nodes, bs);
> +    BdrvChild *c;
> +
> +    c = bdrv_root_attach_child(bs, "job", &child_job, perm, shared_perm,

"job" doesn't make much sense as the child's name, it's rather a generic
name for the parent.

"job-child" or something caller-provided would be better. (I'd vote for
caller-provided. We don't have that many callers.)

Max

> +                               NULL, errp);
> +    if (c == NULL) {
> +        return -EPERM;
> +    }
> +
> +    job->nodes = g_slist_prepend(job->nodes, c);
>      bdrv_ref(bs);
>      bdrv_op_block_all(bs, job->blocker);
> +
> +    return 0;
>  }
>  
>  void *block_job_create(const char *job_id, const BlockJobDriver *driver,

[...]



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

  reply	other threads:[~2017-02-20 13:38 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-13 17:22 [Qemu-devel] [RFC PATCH 00/41] New op blocker system Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 01/41] block: Attach bs->file only during .bdrv_open() Kevin Wolf
2017-02-15 14:34   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 02/41] block: Add op blocker permission constants Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 03/41] block: Add Error argument to bdrv_attach_child() Kevin Wolf
2017-02-15 14:48   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 04/41] block: Let callers request permissions when attaching a child node Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 05/41] tests: Use opened block node for block job tests Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 06/41] block: Involve block drivers in permission granting Kevin Wolf
2017-02-14  5:51   ` Fam Zheng
2017-02-14 10:36     ` Kevin Wolf
2017-02-14 11:23       ` Fam Zheng
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 07/41] block: Default .bdrv_child_perm() for filter drivers Kevin Wolf
2017-02-15 17:00   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 08/41] block: Request child permissions in " Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 09/41] block: Default .bdrv_child_perm() for format drivers Kevin Wolf
2017-02-14  6:01   ` Fam Zheng
2017-02-14 10:37     ` Kevin Wolf
2017-02-14 11:13       ` Fam Zheng
2017-02-15 17:11   ` Max Reitz
2017-02-15 17:29     ` Kevin Wolf
2017-02-15 17:33       ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 10/41] block: Request child permissions in " Kevin Wolf
2017-02-15 17:26   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 11/41] vvfat: Implement .bdrv_child_perm() Kevin Wolf
2017-02-15 17:30   ` Max Reitz
2017-02-15 17:42     ` Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 12/41] block: Require .bdrv_child_perm() with child nodes Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 13/41] block: Request real permissions in bdrv_attach_child() Kevin Wolf
2017-02-15 19:23   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 14/41] block: Add permissions to BlockBackend Kevin Wolf
2017-02-15 19:26   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 15/41] block: Add permissions to blk_new() Kevin Wolf
2017-02-20 10:29   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 16/41] block: Add error parameter to blk_insert_bs() Kevin Wolf
2017-02-14  6:58   ` Fam Zheng
2017-02-20 11:04   ` Max Reitz
2017-02-20 11:22     ` Kevin Wolf
2017-02-20 11:22       ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 17/41] block: Request real permissions in blk_new_open() Kevin Wolf
2017-02-20 11:16   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 18/41] block: Allow error return in BlockDevOps.change_media_cb() Kevin Wolf
2017-02-20 11:31   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 19/41] hw/block: Request permissions Kevin Wolf
2017-02-20 12:25   ` Max Reitz
2017-02-20 13:02     ` Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 20/41] hw/block: Introduce share-rw qdev property Kevin Wolf
2017-02-20 12:28   ` Max Reitz
2017-02-20 13:05     ` Kevin Wolf
2017-02-20 13:17       ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 21/41] blockjob: Add permissions to block_job_create() Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 22/41] block: Add BdrvChildRole.get_link_name() Kevin Wolf
2017-02-20 12:54   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 23/41] block: Include details on permission errors in message Kevin Wolf
2017-02-20 13:16   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 24/41] block: Add BdrvChildRole.stay_at_node Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 25/41] blockjob: Add permissions to block_job_add_bdrv() Kevin Wolf
2017-02-20 13:38   ` Max Reitz [this message]
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 26/41] block: Factor out bdrv_open_driver() Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 27/41] block: Add bdrv_new_open_driver() Kevin Wolf
2017-02-20 14:20   ` Max Reitz
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 28/41] commit: Use real permissions in commit block job Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 29/41] commit: Use real permissions for HMP 'commit' Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 30/41] backup: Use real permissions in backup block job Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 31/41] block: Fix pending requests check in bdrv_append() Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 32/41] block: BdrvChildRole.attach/detach() callbacks Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 33/41] block: Allow backing file links in change_parent_backing_link() Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 34/41] mirror: Use real permissions in mirror/active commit block job Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 35/41] stream: Use real permissions in streaming " Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 36/41] hmp: Request permissions in qemu-io Kevin Wolf
2017-02-13 17:22 ` [Qemu-devel] [RFC PATCH 37/41] migration/block: Use real permissions Kevin Wolf
2017-02-13 17:23 ` [Qemu-devel] [RFC PATCH 38/41] nbd/server: Use real permissions for NBD exports Kevin Wolf
2017-02-13 17:23 ` [Qemu-devel] [RFC PATCH 39/41] tests: Remove FIXME comments Kevin Wolf
2017-02-13 17:23 ` [Qemu-devel] [RFC PATCH 40/41] block: Pass BdrvChild to bdrv_aligned_preadv/pwritev Kevin Wolf
2017-02-13 17:23 ` [Qemu-devel] [RFC PATCH 41/41] block: Assertions for write permissions Kevin Wolf
2017-02-13 18:44 ` [Qemu-devel] [RFC PATCH 00/41] New op blocker system no-reply

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=dbc67cad-cfe7-3bb0-dc67-35bb0d674a9c@redhat.com \
    --to=mreitz@redhat.com \
    --cc=famz@redhat.com \
    --cc=jcody@redhat.com \
    --cc=kwolf@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.