|
From: | Max Reitz |
Subject: | Re: [Qemu-devel] [PATCH 2/3] qcow2: Implement bdrv_amend_options |
Date: | Wed, 28 Aug 2013 14:05:45 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130805 Thunderbird/17.0.8 |
Hi, Am 28.08.2013 13:48, schrieb Kevin Wolf:
Yes, I was referring to other code (which cleans the image right at opening).Am 28.08.2013 um 13:39 hat Max Reitz geschrieben:+ /* clear incompatible features */ + if (s->incompatible_features & QCOW2_INCOMPAT_DIRTY) { + BdrvCheckResult result; + ret = qcow2_check(bs, &result, BDRV_FIX_ERRORS); + if (ret < 0) { + return ret; + }This is unnecessary: The image could be opened, so we know that it was clean when we started. We also know that we haven't crashed yet, so if we flush all in-memory data, we'll have a consistent on-disk state again. qcow2_mark_clean() already calls bdrv_flush(bs), so it does everything that is needed in this respect.So that flag should always be already cleared at this point anyway?The qcow2_mark_clean() call is on the next line (which you removed from the quote), so not at this point but one line later. But yeah, it's done by other code.
No, I just missed the default for that option not being zero. Sorry, my fault.+ } else if (!strcmp(options[i].name, "encryption")) { + if (options[i].value.n != !!s->crypt_method) { + fprintf(stderr, "Changing the encryption flag is not " + "supported.\n"); + return -ENOTSUP; + } + } else if (!strcmp(options[i].name, "cluster_size")) { + if (options[i].value.n && (options[i].value.n != s->cluster_size)) { + fprintf(stderr, "Changing the cluster size is not " + "supported.\n"); + return -ENOTSUP; + } + } else if (!strcmp(options[i].name, "lazy_refcounts")) { + /* TODO: detect whether this flag was indeed explicitly given */ + lazy_refcounts = options[i].value.n;I can see two ways to achieve this: 1. Add a new field 'bool assigned' to QEMUOptionParameter, which would be cleared before parsing an option string and set for each option in set_option_parameter() 2. Get the QemuOpts conversion series in and add a function that tells whether a given option was specified or not. The same TODO should actually apply to encryption and cluster_size as well, shouldn't it?Kind of; however, a cluster_size of 0 seems invalid to me, therefore it is pretty easy to detect that option not being given.Depends on whether you think that 'qemu-img amend -o cluster_size=0' is a valid way of saying that you don't want to change the cluster size. I would prefer to error out.
Max
[Prev in Thread] | Current Thread | [Next in Thread] |