All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: Alberto Garcia <berto@igalia.com>,
	qemu-block@nongnu.org, John Snow <jsnow@redhat.com>,
	qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v7 31/39] blockdev: Add blockdev-insert-medium
Date: Fri, 23 Oct 2015 16:35:29 +0200	[thread overview]
Message-ID: <562A45B1.60107@redhat.com> (raw)
In-Reply-To: <20151023134219.GE3797@noname.redhat.com>

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

On 23.10.2015 15:42, Kevin Wolf wrote:
> Am 19.10.2015 um 17:53 hat Max Reitz geschrieben:
>> And a helper function for that, which directly takes a pointer to the
>> BDS to be inserted instead of its node-name (which will be used for
>> implementing 'change' using blockdev-insert-medium).
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>  blockdev.c           | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  qapi/block-core.json | 17 +++++++++++++++++
>>  qmp-commands.hx      | 37 +++++++++++++++++++++++++++++++++++
>>  3 files changed, 108 insertions(+)
>>
>> diff --git a/blockdev.c b/blockdev.c
>> index a8601ca..a4c278f 100644
>> --- a/blockdev.c
>> +++ b/blockdev.c
>> @@ -2151,6 +2151,60 @@ void qmp_blockdev_remove_medium(const char *device, Error **errp)
>>      }
>>  }
>>  
>> +static void qmp_blockdev_insert_anon_medium(const char *device,
>> +                                            BlockDriverState *bs, Error **errp)
>> +{
>> +    BlockBackend *blk;
>> +    bool has_device;
>> +
>> +    blk = blk_by_name(device);
>> +    if (!blk) {
>> +        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
>> +                  "Device '%s' not found", device);
>> +        return;
>> +    }
>> +
>> +    /* For BBs without a device, we can exchange the BDS tree at will */
>> +    has_device = blk_get_attached_dev(blk);
>> +
>> +    if (has_device && !blk_dev_has_removable_media(blk)) {
>> +        error_setg(errp, "Device '%s' is not removable", device);
>> +        return;
>> +    }
>> +
>> +    if (has_device && !blk_dev_is_tray_open(blk)) {
>> +        error_setg(errp, "Tray of device '%s' is not open", device);
>> +        return;
>> +    }
>> +
>> +    if (blk_bs(blk)) {
>> +        error_setg(errp, "There already is a medium in device '%s'", device);
>> +        return;
>> +    }
>> +
>> +    blk_insert_bs(blk, bs);
>> +}
>> +
>> +void qmp_blockdev_insert_medium(const char *device, const char *node_name,
>> +                                Error **errp)
>> +{
>> +    BlockDriverState *bs;
>> +
>> +    bs = bdrv_find_node(node_name);
> 
> Shouldn't this use bdrv_lookup_bs() to accept a BB name and be consisent
> with most other commands? Of course, if you actually used a BB name, it
> would fail below, but not with a confusing "not found" message.

Well, and then it fails with "Node 'foo' is already in use by 'foo'",
which doesn't make much more sense either.

Until we support multiple BBs per BDS, using this command with a BB
doesn't make any sense. I may be wrong here or exaggerating, but I feel
like most of the "most other commands" allow that mostly because of
legacy reasons. Second, most of them are block jobs which I feel like
should work behind a BB anyway, and letting them work on a BDS is wrong,
but we just haven't converted them yet.

I don't have a strong preference. I find the error messages equally bad.
But I think I don't want to use bdrv_lookup_bs() since that would look
like pretending that we actually do want to support BB names, whereas in
reality we absolutely don't (not right now at least).

Also, it would confuse me when reading the code: "Why are you accepting
a BB name up there, and then you are rejecting every BDS that has a BB?
That doesn't make sense!"

Improving the error message doesn't seem to good to me either. It would
have to be something like "'%s' is a device, not a node" which I don't
consider much more helpful either (maybe it is, I don't know), and
adding an explanation like "; blockdev-insert-medium only accepts node
names" would feel like a bit too much since we don't do that anywhere
else, do we?

Max

>> +    if (!bs) {
>> +        error_setg(errp, "Node '%s' not found", node_name);
>> +        return;
>> +    }
>> +
>> +    if (bs->blk) {
>> +        error_setg(errp, "Node '%s' is already in use by '%s'", node_name,
>> +                   blk_name(bs->blk));
>> +        return;
>> +    }
>> +
>> +    qmp_blockdev_insert_anon_medium(device, bs, errp);
>> +}
> 
> Kevin
> 



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

  reply	other threads:[~2015-10-23 14:35 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-19 15:53 [Qemu-devel] [PATCH v7 00/39] blockdev: BlockBackend and media Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 01/39] block: Remove host floppy support Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 02/39] block: Set BDRV_O_INCOMING in bdrv_fill_options() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 03/39] blockdev: Allow creation of BDS trees without BB Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 04/39] iotests: Only create BB if necessary Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 05/39] block: Make bdrv_is_inserted() return a bool Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 06/39] block: Add blk_is_available() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 07/39] block: Make bdrv_is_inserted() recursive Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 08/39] block/raw_bsd: Drop raw_is_inserted() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 09/39] block: Invoke change media CB before NULLing drv Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 10/39] hw/block/fdc: Implement tray status Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 11/39] hw/usb-storage: Check whether BB is inserted Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 12/39] block: Fix BB AIOCB AioContext without BDS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 13/39] block: Move guest_block_size into BlockBackend Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 14/39] block: Remove wr_highest_sector from BlockAcctStats Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 15/39] block: Move BlockAcctStats into BlockBackend Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 16/39] block: Move I/O status and error actions into BB Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 17/39] block/throttle-groups: Make incref/decref public Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 18/39] block: Add BlockBackendRootState Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 19/39] block: Make some BB functions fall back to BBRS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 20/39] block: Fail requests to empty BlockBackend Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 21/39] block: Prepare remaining BB functions for NULL BDS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 22/39] block: Add blk_insert_bs() Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 23/39] block: Prepare for NULL BDS Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 24/39] blockdev: Do not create BDS for empty drive Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 25/39] blockdev: Pull out blockdev option extraction Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 26/39] blockdev: Allow more options for BB-less BDS tree Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 27/39] block: Add blk_remove_bs() Max Reitz
2015-10-20  8:33   ` Kevin Wolf
2015-10-21 13:47     ` Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 28/39] blockdev: Add blockdev-open-tray Max Reitz
2015-10-23 13:22   ` Kevin Wolf
2015-10-23 14:22     ` Max Reitz
2015-10-23 13:26   ` Kevin Wolf
2015-10-23 14:26     ` Max Reitz
2015-10-23 14:45       ` Kevin Wolf
2015-10-23 15:25         ` Max Reitz
2015-10-23 15:44           ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 29/39] blockdev: Add blockdev-close-tray Max Reitz
2015-10-23 13:43   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 30/39] blockdev: Add blockdev-remove-medium Max Reitz
2015-10-23 13:45   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 31/39] blockdev: Add blockdev-insert-medium Max Reitz
2015-10-21 11:49   ` Alberto Garcia
2015-10-21 13:47     ` Max Reitz
2015-10-23 13:39       ` Kevin Wolf
2015-10-23 14:04         ` Max Reitz
2015-10-23 13:42   ` Kevin Wolf
2015-10-23 14:35     ` Max Reitz [this message]
2015-10-23 14:52       ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 32/39] blockdev: Implement eject with basic operations Max Reitz
2015-10-23 13:54   ` Kevin Wolf
2015-10-23 14:42     ` Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 33/39] blockdev: Implement change " Max Reitz
2015-10-23 14:11   ` Kevin Wolf
2015-10-23 14:43     ` Max Reitz
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 34/39] block: Inquire tray state before tray-moved events Max Reitz
2015-10-23 14:16   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 35/39] qmp: Introduce blockdev-change-medium Max Reitz
2015-10-23 14:25   ` Kevin Wolf
2015-10-23 15:08     ` Max Reitz
2015-10-26 12:14   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 36/39] hmp: Use blockdev-change-medium for change command Max Reitz
2015-10-26 12:13   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 37/39] blockdev: read-only-mode for blockdev-change-medium Max Reitz
2015-10-26 12:13   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 38/39] hmp: Add read-only-mode option to change command Max Reitz
2015-10-26 12:12   ` Kevin Wolf
2015-10-19 15:53 ` [Qemu-devel] [PATCH v7 39/39] iotests: Add test for change-related QMP commands Max Reitz
2015-10-26 13:46   ` Kevin Wolf
2015-10-20 11:10 ` [Qemu-devel] [PATCH v7 00/39] blockdev: BlockBackend and media 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=562A45B1.60107@redhat.com \
    --to=mreitz@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berto@igalia.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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.