[Top][All Lists]

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

Re: [Qemu-devel] [PATCH 19/27] block/parallels: implement incorrect clos

From: Denis V. Lunev
Subject: Re: [Qemu-devel] [PATCH 19/27] block/parallels: implement incorrect close detection
Date: Tue, 10 Mar 2015 17:44:19 +0300
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.4.0

On 10/03/15 17:38, Roman Kagan wrote:
On Tue, Mar 10, 2015 at 11:51:13AM +0300, Denis V. Lunev wrote:
The software driver must set inuse field in Parallels header to
0x746F6E59 when the image is opened in read-write mode. The presence of
this magic in the header on open forces image consistency check.

There is an unfortunate trick here. We can not check for inuse in
parallels_check as this will happen too late. It is possible to do
that for simple check, but during the fix this would always report
an error as the image was opened in BDRV_O_RDWR mode. Thus we save
the flag in BDRVParallelsState for this.

On the other hand, nothing should be done to clear inuse in
parallels_check. Generic close will do the job right.

Signed-off-by: Denis V. Lunev <address@hidden>
CC: Roman Kagan <address@hidden>
CC: Kevin Wolf <address@hidden>
CC: Stefan Hajnoczi <address@hidden>
  block/parallels.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 50 insertions(+)
@@ -462,6 +487,25 @@ static int parallels_open(BlockDriverState *bs, QDict 
*options, int flags,
      s->bat_bitmap = (uint32_t *)(s->header + 1);
+ if (le32_to_cpu(ph.inuse) == HEADER_INUSE_MAGIC) {
+        /* Image was not closed correctly. The check is mandatory */
+        s->header_unclean = true;
+        if ((flags & BDRV_O_RDWR) && !(flags & BDRV_O_CHECK)) {
+            error_setg(errp, "parallels: Image was not closed correctly; "
+                       "cannot be opened read/write");
+            ret = -EACCES;

Otherwise looks ok.

error code is the same as one in qcow2

reply via email to

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