OvmfPkg/VirtioFsDxe: add EFI_FILE_INFO cache fields to VIRTIO_FS_FILE
For reading through a directory stream with tolerable performance, we'll have to call FUSE_READDIRPLUS each time with such a buffer that can deliver a good number of variable size records (VIRTIO_FS_FUSE_DIRENTPLUS_RESPONSE elements). Every time we'll do that, we'll turn the whole bunch into an array of EFI_FILE_INFOs immediately. EFI_FILE_PROTOCOL.Read() invocations (on directories) will be served from this EFI_FILE_INFO cache. Add the fields for the EFI_FILE_INFO cache to VIRTIO_FS_FILE: - initialize them in Open() and OpenVolume(), - release the cache in Close() and Delete(), - also release the cache when the directory is rewound, in SetPosition(). 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-36-lersek@redhat.com> Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
This commit is contained in:
committed by
mergify[bot]
parent
7a7752095c
commit
b845de89d0
@@ -482,6 +482,10 @@ VirtioFsSimpleFileOpen (
|
||||
NewVirtioFsFile->FilePosition = 0;
|
||||
NewVirtioFsFile->NodeId = NewNodeId;
|
||||
NewVirtioFsFile->FuseHandle = NewFuseHandle;
|
||||
NewVirtioFsFile->FileInfoArray = NULL;
|
||||
NewVirtioFsFile->SingleFileInfoSize = 0;
|
||||
NewVirtioFsFile->NumFileInfo = 0;
|
||||
NewVirtioFsFile->NextFileInfo = 0;
|
||||
|
||||
//
|
||||
// One more file is now open for the filesystem.
|
||||
|
Reference in New Issue
Block a user