uptodate.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * uptodate.h
  4. *
  5. * Cluster uptodate tracking
  6. *
  7. * Copyright (C) 2002, 2004, 2005 Oracle. All rights reserved.
  8. */
  9. #ifndef OCFS2_UPTODATE_H
  10. #define OCFS2_UPTODATE_H
  11. /*
  12. * The caching code relies on locking provided by the user of
  13. * struct ocfs2_caching_info. These operations connect that up.
  14. */
  15. struct ocfs2_caching_operations {
  16. /*
  17. * A u64 representing the owning structure. Usually this
  18. * is the block number (i_blkno or whatnot). This is used so
  19. * that caching log messages can identify the owning structure.
  20. */
  21. u64 (*co_owner)(struct ocfs2_caching_info *ci);
  22. /* The superblock is needed during I/O. */
  23. struct super_block *(*co_get_super)(struct ocfs2_caching_info *ci);
  24. /*
  25. * Lock and unlock the caching data. These will not sleep, and
  26. * should probably be spinlocks.
  27. */
  28. void (*co_cache_lock)(struct ocfs2_caching_info *ci);
  29. void (*co_cache_unlock)(struct ocfs2_caching_info *ci);
  30. /*
  31. * Lock and unlock for disk I/O. These will sleep, and should
  32. * be mutexes.
  33. */
  34. void (*co_io_lock)(struct ocfs2_caching_info *ci);
  35. void (*co_io_unlock)(struct ocfs2_caching_info *ci);
  36. };
  37. int __init init_ocfs2_uptodate_cache(void);
  38. void exit_ocfs2_uptodate_cache(void);
  39. void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci,
  40. const struct ocfs2_caching_operations *ops);
  41. void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci);
  42. void ocfs2_metadata_cache_exit(struct ocfs2_caching_info *ci);
  43. u64 ocfs2_metadata_cache_owner(struct ocfs2_caching_info *ci);
  44. void ocfs2_metadata_cache_io_lock(struct ocfs2_caching_info *ci);
  45. void ocfs2_metadata_cache_io_unlock(struct ocfs2_caching_info *ci);
  46. int ocfs2_buffer_uptodate(struct ocfs2_caching_info *ci,
  47. struct buffer_head *bh);
  48. void ocfs2_set_buffer_uptodate(struct ocfs2_caching_info *ci,
  49. struct buffer_head *bh);
  50. void ocfs2_set_new_buffer_uptodate(struct ocfs2_caching_info *ci,
  51. struct buffer_head *bh);
  52. void ocfs2_remove_from_cache(struct ocfs2_caching_info *ci,
  53. struct buffer_head *bh);
  54. void ocfs2_remove_xattr_clusters_from_cache(struct ocfs2_caching_info *ci,
  55. sector_t block,
  56. u32 c_len);
  57. int ocfs2_buffer_read_ahead(struct ocfs2_caching_info *ci,
  58. struct buffer_head *bh);
  59. #endif /* OCFS2_UPTODATE_H */