tempfile.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Copyright (c) 2021-2024 Oracle. All Rights Reserved.
  4. * Author: Darrick J. Wong <djwong@kernel.org>
  5. */
  6. #ifndef __XFS_SCRUB_TEMPFILE_H__
  7. #define __XFS_SCRUB_TEMPFILE_H__
  8. #ifdef CONFIG_XFS_ONLINE_REPAIR
  9. int xrep_tempfile_create(struct xfs_scrub *sc, uint16_t mode);
  10. void xrep_tempfile_rele(struct xfs_scrub *sc);
  11. bool xrep_tempfile_iolock_nowait(struct xfs_scrub *sc);
  12. int xrep_tempfile_iolock_polled(struct xfs_scrub *sc);
  13. void xrep_tempfile_iounlock(struct xfs_scrub *sc);
  14. void xrep_tempfile_ilock(struct xfs_scrub *sc);
  15. bool xrep_tempfile_ilock_nowait(struct xfs_scrub *sc);
  16. void xrep_tempfile_iunlock(struct xfs_scrub *sc);
  17. void xrep_tempfile_iunlock_both(struct xfs_scrub *sc);
  18. void xrep_tempfile_ilock_both(struct xfs_scrub *sc);
  19. int xrep_tempfile_prealloc(struct xfs_scrub *sc, xfs_fileoff_t off,
  20. xfs_filblks_t len);
  21. enum xfs_blft;
  22. typedef int (*xrep_tempfile_copyin_fn)(struct xfs_scrub *sc,
  23. struct xfs_buf *bp, void *data);
  24. int xrep_tempfile_copyin(struct xfs_scrub *sc, xfs_fileoff_t off,
  25. xfs_filblks_t len, xrep_tempfile_copyin_fn fn, void *data);
  26. int xrep_tempfile_set_isize(struct xfs_scrub *sc, unsigned long long isize);
  27. int xrep_tempfile_roll_trans(struct xfs_scrub *sc);
  28. void xrep_tempfile_copyout_local(struct xfs_scrub *sc, int whichfork);
  29. bool xrep_is_tempfile(const struct xfs_inode *ip);
  30. #else
  31. static inline void xrep_tempfile_iolock_both(struct xfs_scrub *sc)
  32. {
  33. xchk_ilock(sc, XFS_IOLOCK_EXCL);
  34. }
  35. # define xrep_is_tempfile(ip) (false)
  36. # define xrep_tempfile_rele(sc)
  37. #endif /* CONFIG_XFS_ONLINE_REPAIR */
  38. #endif /* __XFS_SCRUB_TEMPFILE_H__ */