qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RFC Patch 4/7]Qemu: Framework for reopening image file


From: Supriya Kannery
Subject: Re: [Qemu-devel] [RFC Patch 4/7]Qemu: Framework for reopening image files safely
Date: Tue, 14 Feb 2012 19:04:27 +0530
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.20) Gecko/20110817 Fedora/3.1.12-1.fc14 Thunderbird/3.1.12

On 02/07/2012 03:38 PM, Stefan Hajnoczi wrote:
On Wed, Feb 01, 2012 at 08:36:58AM +0530, Supriya Kannery wrote:
Struct BDRVReopenState along with three reopen related functions
introduced for handling reopening of images safely. This can be
extended by each of the block drivers to reopen respective
image files.


+int bdrv_reopen_prepare(BlockDriverState *bs, BDRVReopenState **prs, int flags)
+{
+     BlockDriver *drv = bs->drv;
+
+     return drv->bdrv_reopen_prepare(bs, prs, flags);

Indentation should be 4 spaces.  I suggest configuring your editor so
this is always correct and done automatically.


ok

-    ret = bdrv_open(bs, bs->filename, bdrv_flags, drv);
-    if (ret<  0) {
-        /* Reopen failed. Try to open with original flags */
-        qerror_report(QERR_REOPEN_FILE_FAILED, bs->filename);
-        ret = bdrv_open(bs, bs->filename, open_flags, drv);
+    /* Use driver specific reopen() if available */
+    if (drv->bdrv_reopen_prepare) {
+        ret = bdrv_reopen_prepare(bs,&reopen_state, bdrv_flags);
+         if (ret<  0) {

Indentation

+            bdrv_reopen_abort(bs, reopen_state);
+            qerror_report(QERR_REOPEN_FILE_FAILED, bs->filename);
+            return ret;
+        }
+
+        bdrv_reopen_commit(bs, reopen_state);
+        bs->open_flags = bdrv_flags;

Is bs->open_flags not assigned inside bdrv_reopen_*()?


No, Since it is generic for all the drivers, placed it here.

+
+    } else {
+       open_flags = bs->open_flags;
+       bdrv_close(bs);
+
+       ret = bdrv_open(bs, bs->filename, bdrv_flags, drv);
          if (ret<  0) {
-            /* Reopen failed with orig and modified flags */
-            abort();
+            /* Reopen failed. Try to open with original flags */
+            qerror_report(QERR_REOPEN_FILE_FAILED, bs->filename);
+            ret = bdrv_open(bs, bs->filename, open_flags, drv);
+            if (ret<  0) {
+                /* Reopen failed with orig and modified flags */
+                bs->drv = NULL;

This should be a post-condition of bdrv_open().  If you have found a
case where bs->drv != NULL after bdrv_open() fails, then please fix that
code path instead of assigning NULL here.


ok, will check on this

-thanks for reviewing, Supriya




reply via email to

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