]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg UefiScsiLib: Close event when SCSI command fails
authorHao Wu <hao.a.wu@intel.com>
Tue, 22 Dec 2015 13:55:59 +0000 (13:55 +0000)
committerhwu1225 <hwu1225@Edk2>
Tue, 22 Dec 2015 13:55:59 +0000 (13:55 +0000)
The ScsiExecuteSCSICommand() function in ScsiBusDxe driver will not signal
the event passed from UefiScsiLib when error occurs.

In this case, UefiScsiLib should close the event passing to
ScsiExecuteSCSICommand().

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19448 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/UefiScsiLib/UefiScsiLib.c

index d8babcee406a6232a3ee6e10c3119c51d047591d..0a08e4468ed0002489bf8a8c36732dd0bb4ad6d3 100644 (file)
@@ -1494,7 +1494,17 @@ ScsiRead10CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r
@@ -1668,7 +1678,17 @@ ScsiWrite10CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r
@@ -1842,7 +1862,17 @@ ScsiRead16CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r
@@ -2016,7 +2046,17 @@ ScsiWrite16CommandEx (
     goto ErrorExit;\r
   }\r
 \r
-  return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);\r
+  Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);\r
+  if (EFI_ERROR(Status)) {\r
+    //\r
+    // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()\r
+    // returns with error, close the event here.\r
+    //\r
+    gBS->CloseEvent (SelfEvent);\r
+    goto ErrorExit;\r
+  } else {\r
+    return EFI_SUCCESS;\r
+  }\r
 \r
 ErrorExit:\r
   if (Context != NULL) {\r