qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] nvme: Support image creation


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH] nvme: Support image creation
Date: Wed, 13 Jun 2018 10:06:21 +0200
User-agent: Mutt/1.9.1 (2017-09-22)

Am 13.06.2018 um 09:46 hat Fam Zheng geschrieben:
> Similar to the host_device's implementation, we check the requested
> length against the namespace size.
> 
> Truncation is necessary to make qcow2 creation work.
> 
> Signed-off-by: Fam Zheng <address@hidden>

> +static int coroutine_fn nvme_co_create_opts(const char *filename, QemuOpts 
> *opts,
> +                                            Error **errp)
> +{
> +    int ret = 0;
> +    BlockDriverState *bs = NULL;
> +    int64_t size;
> +
> +    if (strncmp(filename, "nvme://", strlen("nvme://"))) {
> +        error_setg(errp, "Invalid filename (must start with \"nvme://\")");
> +        ret = -EINVAL;
> +        goto out;
> +    }
> +
> +    bs = bdrv_open(filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_PROTOCOL, 
> errp);
> +    if (!bs) {
> +        ret = -EINVAL;
> +        goto out;
> +    }
> +
> +    size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
> +
> +    if (size < 0 || bdrv_getlength(bs) < size) {
> +        error_setg(errp, "Invalid image size");
> +        ret = -EINVAL;
> +    }
> +
> +out:
> +    bdrv_unref(bs);
> +    /* Hold breath for a little while before letting image format creation 
> run.
> +     * The problem is when testing with Intel P3700, the controller doesn't
> +     * like the immediate open after close, as a result, nvme_init() will 
> fail.
> +     * This works around that.
> +     **/
> +    g_usleep(2000000);

This suggests that nbd_init() is buggy.

If we need to sleep here (for two whole seconds?!), I'm sure there are
other cases that would have to sleep as well. So even if we can't find a
solution other than sleeping - which feels horribly wrong - the sleep
should probably be in nvme_init() rather than here.

What kind of error are you running into without the sleep?

Kevin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]