Index: /trunk/src/VBox/Devices/Storage/ISCSIHDDCore.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/ISCSIHDDCore.cpp	(revision 31242)
+++ /trunk/src/VBox/Devices/Storage/ISCSIHDDCore.cpp	(revision 31243)
@@ -3785,8 +3785,20 @@
     }
 
-    /* Implement this operation via reopening the image. */
-    iscsiFreeImage(pImage, false);
-    rc = iscsiOpenImage(pImage, uOpenFlags);
-
+    /* Implement this operation via reopening the image if we actually need
+     * to do something. A read/write -> readonly transition doesn't need a
+     * reopen. In the other direction we don't have the necessary information
+     * as the "disk is readonly" flag is thrown away. Can be optimized too,
+     * but it's not worth the effort at the moment. */
+    if (   !(uOpenFlags & VD_OPEN_FLAGS_READONLY)
+        && (pImage->uOpenFlags & VD_OPEN_FLAGS_READONLY))
+    {
+        iscsiFreeImage(pImage, false);
+        rc = iscsiOpenImage(pImage, uOpenFlags);
+    }
+    else
+    {
+        pImage->uOpenFlags = uOpenFlags;
+        rc = VINF_SUCCESS;
+    }
 out:
     LogFlowFunc(("returns %Rrc\n", rc));
