From d379cbc75d55fcebfbb86921c72194bb6cb3ca6e Mon Sep 17 00:00:00 2001 From: lzeng14 Date: Mon, 17 Dec 2012 03:18:16 +0000 Subject: Reclaim work space when the remaining space size is even not enough to contain one header + one record. Signed-off-by: Star Zeng Reviewed-by: Liming Gao git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14005 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'MdeModulePkg/Universal') diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c index bbe5fb6..340e167 100644 --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/UpdateWorkingBlock.c @@ -166,6 +166,7 @@ WorkSpaceRefresh ( { EFI_STATUS Status; UINTN Length; + UINTN RemainingSpaceSize; // // Initialize WorkSpace as FTW_ERASED_BYTE @@ -198,7 +199,15 @@ WorkSpaceRefresh ( FtwDevice->FtwWorkSpaceSize, &FtwDevice->FtwLastWriteHeader ); - if (EFI_ERROR (Status)) { + RemainingSpaceSize = FtwDevice->FtwWorkSpaceSize - ((UINTN) FtwDevice->FtwLastWriteHeader - (UINTN) FtwDevice->FtwWorkSpace); + DEBUG ((EFI_D_INFO, "Ftw: Remaining work space size - %x\n", RemainingSpaceSize)); + // + // If FtwGetLastWriteHeader() returns error, or the remaining space size is even not enough to contain + // one EFI_FAULT_TOLERANT_WRITE_HEADER + one EFI_FAULT_TOLERANT_WRITE_RECORD(It will cause that the header + // pointed by FtwDevice->FtwLastWriteHeader or record pointed by FtwDevice->FtwLastWriteRecord may contain invalid data), + // it needs to reclaim work space. + // + if (EFI_ERROR (Status) || RemainingSpaceSize < sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER) + sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD)) { // // reclaim work space in working block. // -- cgit v1.1