Index: /trunk/src/VBox/Devices/Storage/DevATA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 470)
+++ /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 471)
@@ -1352,5 +1352,5 @@
 
 
-static void ataDiskFull(PPDMDEVINS pDevIns)
+static void ataWarningDiskFull(PPDMDEVINS pDevIns)
 {
     int rc;
@@ -1363,4 +1363,15 @@
 
 
+static void ataWarningISCSI(PPDMDEVINS pDevIns)
+{
+    int rc;
+    LogRel(("PIIX3 ATA: iSCSI target unavailable\n"));
+    rc = VMSetRuntimeError(PDMDevHlpGetVM(pDevIns),
+                           false, "DevATA_ISCSIDOWN",
+                           N_("The iSCSI target has stopped responding. VM execution is suspended. You can resume when it is available again"));
+    AssertRC(rc);
+}
+
+
 static bool ataReadSectorsSS(ATADevState *s)
 {
@@ -1385,5 +1396,12 @@
         if (rc == VERR_DISK_FULL)
         {
-            ataDiskFull(ATADEVSTATE_2_DEVINS(s));
+            ataWarningDiskFull(ATADEVSTATE_2_DEVINS(s));
+            return true;
+        }
+        if (rc == VERR_BROKEN_PIPE || rc == VERR_NET_CONNECTION_REFUSED)
+        {
+            /* iSCSI connection abort (first error) or failure to reestablish
+             * connection (second error). Pause VM. On resume we'll retry. */
+            ataWarningISCSI(ATADEVSTATE_2_DEVINS(s));
             return true;
         }
@@ -1420,5 +1438,12 @@
         if (rc == VERR_DISK_FULL)
         {
-            ataDiskFull(ATADEVSTATE_2_DEVINS(s));
+            ataWarningDiskFull(ATADEVSTATE_2_DEVINS(s));
+            return true;
+        }
+        if (rc == VERR_BROKEN_PIPE || rc == VERR_NET_CONNECTION_REFUSED)
+        {
+            /* iSCSI connection abort (first error) or failure to reestablish
+             * connection (second error). Pause VM. On resume we'll retry. */
+            ataWarningISCSI(ATADEVSTATE_2_DEVINS(s));
             return true;
         }
