SimpleFsFlush.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /** @file
  2. EFI_FILE_PROTOCOL.Flush() member function for the Virtio Filesystem driver.
  3. Copyright (C) 2020, Red Hat, Inc.
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "VirtioFsDxe.h"
  7. EFI_STATUS
  8. EFIAPI
  9. VirtioFsSimpleFileFlush (
  10. IN EFI_FILE_PROTOCOL *This
  11. )
  12. {
  13. VIRTIO_FS_FILE *VirtioFsFile;
  14. VIRTIO_FS *VirtioFs;
  15. EFI_STATUS Status;
  16. VirtioFsFile = VIRTIO_FS_FILE_FROM_SIMPLE_FILE (This);
  17. VirtioFs = VirtioFsFile->OwnerFs;
  18. if (!VirtioFsFile->IsOpenForWriting) {
  19. return EFI_ACCESS_DENIED;
  20. }
  21. //
  22. // FUSE_FLUSH is for regular files only.
  23. //
  24. if (!VirtioFsFile->IsDirectory) {
  25. Status = VirtioFsFuseFlush (
  26. VirtioFs,
  27. VirtioFsFile->NodeId,
  28. VirtioFsFile->FuseHandle
  29. );
  30. if (EFI_ERROR (Status)) {
  31. return Status;
  32. }
  33. }
  34. Status = VirtioFsFuseFsyncFileOrDir (
  35. VirtioFs,
  36. VirtioFsFile->NodeId,
  37. VirtioFsFile->FuseHandle,
  38. VirtioFsFile->IsDirectory
  39. );
  40. return Status;
  41. }