All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC v2 1/3] blockdev: Add function to search for orphaned drives
Date: Fri, 19 Sep 2014 11:50:43 -0400	[thread overview]
Message-ID: <541C50D3.9030109@redhat.com> (raw)
In-Reply-To: <87zjdwqajp.fsf@blackfin.pond.sub.org>



On 09/19/2014 04:28 AM, Markus Armbruster wrote:
> John Snow <jsnow@redhat.com> writes:
>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>>   blockdev.c                | 19 +++++++++++++++++++
>>   include/sysemu/blockdev.h |  1 +
>>   vl.c                      |  5 +++++
>>   3 files changed, 25 insertions(+)
>>
>> diff --git a/blockdev.c b/blockdev.c
>> index b361fbb..5e7c93a 100644
>> --- a/blockdev.c
>> +++ b/blockdev.c
>> @@ -166,6 +166,25 @@ DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
>>       return NULL;
>>   }
>>
>> +DriveInfo *drive_check_orphaned(void)
>> +{
>> +    DriveInfo *dinfo;
>> +    DriveInfo *ret = NULL;
>> +
>> +    QTAILQ_FOREACH(dinfo, &drives, next) {
>> +        /* If dev is NULL, it has no device attached.
>> +         * If drv is non-NULL, it has a file attached.
>> +         * If both conditions are true, it is possibly an oversight. */
>
> Suggest to spell out dinfo->bdrv->dev and dinfo->bdrv->drv.
>
> "File attached" is imprecise.  BDS member drv is non-null betwen
> bdrv_open() and bdrv_close().  A BDS with null drv means "empty", in the
> sense of "no medium".
>
>
>> +        if ((dinfo->bdrv->dev == NULL) && (dinfo->bdrv->drv != NULL)) {
>> +            fprintf(stderr, "Orphaned drive: id=%s,if=%s,file=%s\n",
>> +                    dinfo->id, if_name[dinfo->type], dinfo->bdrv->filename);
>> +            ret = dinfo;
>> +        }
>> +    }
>
> Please prefix "Warning:" to make the nature of this message more
> explicit.
>
> "Orphaned drive" might not be obvious to all users, but it's concise,
> and no worse than the "has no peer" we use for NICs.
>
> You warn when a non-empty drive is not used by a device model.
>
> This warns when you create one with -drive if=none for future use in the
> monitor.  I guess that's fine.
>
> It doesn't warn for empty drives.  I doubt "empty" should make a
> difference.

I didn't want it to warn about things like the SD drive and the floppy 
drive, created by default, but you're right. Your suggestion below fixes 
this problem.

> I think the condition to check is "has the board failed to pick up a
> drive that is meant to be picked up by the board":
>
>      dinfo->type != IF_NONE && !dinfo->bdrv->dev
>
> I guess this can warn about default drives, because we blindly add them
> whether the boards wants them or not.  Stupidest solution that could
> possibly work: add a flag to DriveInfo to suppress the warning for them.

Hm. Actually, the default drives are added by their specific interfaces. 
IF_IDE, IF_FLOPPY and IF_SD. This is a good improvement.
(Well, cdrom is actually added via block_default_type which is usually 
unset, and happens to coincide with IF_IDE.)

> Better solution: don't add them unless the board wants them.  I tried
> that before, but my solution[*] went nowhere.  If you're interested in
> trying again, let me know, and I'll explain.
>
>> +
>> +    return ret;
>> +}
>> +
>>   DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
>>   {
>>       return drive_get(type,
>> diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h
>> index 23a5d10..25d52d2 100644
>> --- a/include/sysemu/blockdev.h
>> +++ b/include/sysemu/blockdev.h
>> @@ -46,6 +46,7 @@ struct DriveInfo {
>>   };
>>
>>   DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
>> +DriveInfo *drive_check_orphaned(void);
>>   DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
>>   int drive_get_max_bus(BlockInterfaceType type);
>>   DriveInfo *drive_get_next(BlockInterfaceType type);
>> diff --git a/vl.c b/vl.c
>> index 5db0d08..e095bcd 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -4457,6 +4457,11 @@ int main(int argc, char **argv, char **envp)
>>       if (qemu_opts_foreach(qemu_find_opts("device"), device_init_func, NULL, 1) != 0)
>>           exit(1);
>>
>> +    /* anybody left over? */
>> +    if (drive_check_orphaned()) {
>> +        fprintf(stderr, "Warning: found drives without a backing device.\n");
>> +    }
>> +
>>       net_check_clients();
>>
>>       ds = init_displaystate();
>
>
> [*] https://lists.nongnu.org/archive/html/qemu-devel/2012-08/msg02993.html
>

  reply	other threads:[~2014-09-19 15:51 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-18 17:59 [Qemu-devel] [RFC v2 0/3] Q35/AHCI -cdrom/-hda desugaring John Snow
2014-09-18 17:59 ` [Qemu-devel] [RFC v2 1/3] blockdev: Add function to search for orphaned drives John Snow
2014-09-19  8:28   ` Markus Armbruster
2014-09-19 15:50     ` John Snow [this message]
2014-09-18 17:59 ` [Qemu-devel] [RFC v2 2/3] Add units-per-idebus property John Snow
2014-09-19  9:39   ` Markus Armbruster
2014-09-21  9:34     ` Marcel Apfelbaum
2014-09-22  7:51       ` Markus Armbruster
2014-09-18 17:59 ` [Qemu-devel] [RFC v2 3/3] ahci: implement -cdrom and -hd[a-d] John Snow
2014-09-19  9:49   ` Markus Armbruster
2014-09-19  9:53 ` [Qemu-devel] [RFC v2 0/3] Q35/AHCI -cdrom/-hda desugaring Markus Armbruster
2014-09-22 23:17   ` John Snow
2014-09-23  7:36     ` Markus Armbruster

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=541C50D3.9030109@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --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.