]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Reclaim work space when the remaining space size is even not enough to contain one...
authorlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 17 Dec 2012 03:18:16 +0000 (03:18 +0000)
committerlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 17 Dec 2012 03:18:16 +0000 (03:18 +0000)
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14005 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c

index bbe5fb63b57947f31cfbf602a595de10f8f32e8e..340e167ac9df6a00170b2e335d1cda2f365dab25 100644 (file)
@@ -166,6 +166,7 @@ WorkSpaceRefresh (
 {\r
   EFI_STATUS                      Status;\r
   UINTN                           Length;\r
+  UINTN                           RemainingSpaceSize;\r
 \r
   //\r
   // Initialize WorkSpace as FTW_ERASED_BYTE\r
@@ -198,7 +199,15 @@ WorkSpaceRefresh (
             FtwDevice->FtwWorkSpaceSize,\r
             &FtwDevice->FtwLastWriteHeader\r
             );\r
-  if (EFI_ERROR (Status)) {\r
+  RemainingSpaceSize = FtwDevice->FtwWorkSpaceSize - ((UINTN) FtwDevice->FtwLastWriteHeader - (UINTN) FtwDevice->FtwWorkSpace);\r
+  DEBUG ((EFI_D_INFO, "Ftw: Remaining work space size - %x\n", RemainingSpaceSize));\r
+  //\r
+  // If FtwGetLastWriteHeader() returns error, or the remaining space size is even not enough to contain\r
+  // one EFI_FAULT_TOLERANT_WRITE_HEADER + one EFI_FAULT_TOLERANT_WRITE_RECORD(It will cause that the header\r
+  // pointed by FtwDevice->FtwLastWriteHeader or record pointed by FtwDevice->FtwLastWriteRecord may contain invalid data),\r
+  // it needs to reclaim work space.\r
+  //\r
+  if (EFI_ERROR (Status) || RemainingSpaceSize < sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER) + sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD)) {\r
     //\r
     // reclaim work space in working block.\r
     //\r