summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/VirtioFsDxe
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2020-12-16 22:11:22 +0100
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2020-12-21 17:16:23 +0000
commit6c33d7b2b1c42ab4df56b4cbecf516c6eb123112 (patch)
treead6e51d196b08408e22b7a83ace575e83dfd93a3 /OvmfPkg/VirtioFsDxe
parent647340b0ce763dd8be196fca6499e3ec50da01bd (diff)
downloadedk2-6c33d7b2b1c42ab4df56b4cbecf516c6eb123112.tar.gz
edk2-6c33d7b2b1c42ab4df56b4cbecf516c6eb123112.tar.bz2
edk2-6c33d7b2b1c42ab4df56b4cbecf516c6eb123112.zip
OvmfPkg/VirtioFsDxe: add helper for determining file size update
Add the VirtioFsGetFuseSizeUpdate() function, for determining whether an EFI_FILE_PROTOCOL.SetInfo() invocation requests a file size update. Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Philippe Mathieu-Daudé <philmd@redhat.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3097 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Message-Id: <20201216211125.19496-46-lersek@redhat.com> Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
Diffstat (limited to 'OvmfPkg/VirtioFsDxe')
-rw-r--r--OvmfPkg/VirtioFsDxe/Helpers.c40
-rw-r--r--OvmfPkg/VirtioFsDxe/VirtioFsDxe.h8
2 files changed, 48 insertions, 0 deletions
diff --git a/OvmfPkg/VirtioFsDxe/Helpers.c b/OvmfPkg/VirtioFsDxe/Helpers.c
index fd1e00693f..d13bd8c6c9 100644
--- a/OvmfPkg/VirtioFsDxe/Helpers.c
+++ b/OvmfPkg/VirtioFsDxe/Helpers.c
@@ -2173,3 +2173,43 @@ VirtioFsFuseDirentPlusToEfiFileInfo (
return EFI_SUCCESS;
}
+
+/**
+ Given an EFI_FILE_INFO object received in an EFI_FILE_PROTOCOL.SetInfo()
+ call, determine whether updating the size of the file is necessary, relative
+ to an EFI_FILE_INFO object describing the current state of the file.
+
+ @param[in] Info The EFI_FILE_INFO describing the current state of the
+ file. The caller is responsible for populating Info on
+ input with VirtioFsFuseAttrToEfiFileInfo(), from the
+ current FUSE attributes of the file. The Info->Size and
+ Info->FileName members are ignored.
+
+ @param[in] NewInfo The EFI_FILE_INFO object received in the
+ EFI_FILE_PROTOCOL.SetInfo() call.
+
+ @param[out] Update Set to TRUE on output if the file size needs to be
+ updated. Set to FALSE otherwise.
+
+ @param[out] Size If Update is set to TRUE, then Size provides the new file
+ size to set. Otherwise, Size is not written to.
+**/
+VOID
+VirtioFsGetFuseSizeUpdate (
+ IN EFI_FILE_INFO *Info,
+ IN EFI_FILE_INFO *NewInfo,
+ OUT BOOLEAN *Update,
+ OUT UINT64 *Size
+ )
+{
+ BOOLEAN IsDirectory;
+
+ IsDirectory = (BOOLEAN)((Info->Attribute & EFI_FILE_DIRECTORY) != 0);
+
+ if (IsDirectory || Info->FileSize == NewInfo->FileSize) {
+ *Update = FALSE;
+ return;
+ }
+ *Update = TRUE;
+ *Size = NewInfo->FileSize;
+}
diff --git a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
index 9e6348f938..0967563029 100644
--- a/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
+++ b/OvmfPkg/VirtioFsDxe/VirtioFsDxe.h
@@ -282,6 +282,14 @@ VirtioFsFuseDirentPlusToEfiFileInfo (
IN OUT EFI_FILE_INFO *FileInfo
);
+VOID
+VirtioFsGetFuseSizeUpdate (
+ IN EFI_FILE_INFO *Info,
+ IN EFI_FILE_INFO *NewInfo,
+ OUT BOOLEAN *Update,
+ OUT UINT64 *Size
+ );
+
//
// Wrapper functions for FUSE commands (primitives).
//