diff options
author | Hao Wu <hao.a.wu@intel.com> | 2015-12-23 01:36:07 +0000 |
---|---|---|
committer | hwu1225 <hwu1225@Edk2> | 2015-12-23 01:36:07 +0000 |
commit | 69fa9171637019d22d834825f4a81f4b9da7c815 (patch) | |
tree | db06a6982def3549eb67d477e255bb26d9dfbf4e /MdePkg | |
parent | a14f95dc9eb8490cf2e3eb4f0645008383e7f4c3 (diff) | |
download | edk2-platforms-69fa9171637019d22d834825f4a81f4b9da7c815.tar.xz |
MdePkg UefiScsiLib: Close event when SCSI command fails
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().
(Sync patch r19448 from main trunk.)
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/branches/UDK2015@19469 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdePkg')
-rw-r--r-- | MdePkg/Library/UefiScsiLib/UefiScsiLib.c | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/MdePkg/Library/UefiScsiLib/UefiScsiLib.c b/MdePkg/Library/UefiScsiLib/UefiScsiLib.c index d8babcee40..0a08e4468e 100644 --- a/MdePkg/Library/UefiScsiLib/UefiScsiLib.c +++ b/MdePkg/Library/UefiScsiLib/UefiScsiLib.c @@ -1494,7 +1494,17 @@ ScsiRead10CommandEx ( goto ErrorExit;
}
- return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);
+ Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);
+ if (EFI_ERROR(Status)) {
+ //
+ // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()
+ // returns with error, close the event here.
+ //
+ gBS->CloseEvent (SelfEvent);
+ goto ErrorExit;
+ } else {
+ return EFI_SUCCESS;
+ }
ErrorExit:
if (Context != NULL) {
@@ -1668,7 +1678,17 @@ ScsiWrite10CommandEx ( goto ErrorExit;
}
- return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);
+ Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);
+ if (EFI_ERROR(Status)) {
+ //
+ // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()
+ // returns with error, close the event here.
+ //
+ gBS->CloseEvent (SelfEvent);
+ goto ErrorExit;
+ } else {
+ return EFI_SUCCESS;
+ }
ErrorExit:
if (Context != NULL) {
@@ -1842,7 +1862,17 @@ ScsiRead16CommandEx ( goto ErrorExit;
}
- return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);
+ Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);
+ if (EFI_ERROR(Status)) {
+ //
+ // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()
+ // returns with error, close the event here.
+ //
+ gBS->CloseEvent (SelfEvent);
+ goto ErrorExit;
+ } else {
+ return EFI_SUCCESS;
+ }
ErrorExit:
if (Context != NULL) {
@@ -2016,7 +2046,17 @@ ScsiWrite16CommandEx ( goto ErrorExit;
}
- return ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, Event);
+ Status = ScsiIo->ExecuteScsiCommand (ScsiIo, CommandPacket, SelfEvent);
+ if (EFI_ERROR(Status)) {
+ //
+ // Since ScsiLibNotify() will not be signaled if ExecuteScsiCommand()
+ // returns with error, close the event here.
+ //
+ gBS->CloseEvent (SelfEvent);
+ goto ErrorExit;
+ } else {
+ return EFI_SUCCESS;
+ }
ErrorExit:
if (Context != NULL) {
|