iomap.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef LINUX_IOMAP_H
  3. #define LINUX_IOMAP_H 1
  4. #include <linux/types.h>
  5. struct address_space;
  6. struct fiemap_extent_info;
  7. struct inode;
  8. struct iov_iter;
  9. struct kiocb;
  10. struct page;
  11. struct vm_area_struct;
  12. struct vm_fault;
  13. /*
  14. * Types of block ranges for iomap mappings:
  15. */
  16. #define IOMAP_HOLE 0x01 /* no blocks allocated, need allocation */
  17. #define IOMAP_DELALLOC 0x02 /* delayed allocation blocks */
  18. #define IOMAP_MAPPED 0x03 /* blocks allocated at @addr */
  19. #define IOMAP_UNWRITTEN 0x04 /* blocks allocated at @addr in unwritten state */
  20. #define IOMAP_INLINE 0x05 /* data inline in the inode */
  21. /*
  22. * Flags for all iomap mappings:
  23. *
  24. * IOMAP_F_DIRTY indicates the inode has uncommitted metadata needed to access
  25. * written data and requires fdatasync to commit them to persistent storage.
  26. */
  27. #define IOMAP_F_NEW 0x01 /* blocks have been newly allocated */
  28. #define IOMAP_F_DIRTY 0x02 /* uncommitted metadata */
  29. #define IOMAP_F_BUFFER_HEAD 0x04 /* file system requires buffer heads */
  30. /*
  31. * Flags that only need to be reported for IOMAP_REPORT requests:
  32. */
  33. #define IOMAP_F_MERGED 0x10 /* contains multiple blocks/extents */
  34. #define IOMAP_F_SHARED 0x20 /* block shared with another file */
  35. /*
  36. * Flags from 0x1000 up are for file system specific usage:
  37. */
  38. #define IOMAP_F_PRIVATE 0x1000
  39. /*
  40. * Magic value for addr:
  41. */
  42. #define IOMAP_NULL_ADDR -1ULL /* addr is not valid */
  43. struct iomap {
  44. u64 addr; /* disk offset of mapping, bytes */
  45. loff_t offset; /* file offset of mapping, bytes */
  46. u64 length; /* length of mapping, bytes */
  47. u16 type; /* type of mapping */
  48. u16 flags; /* flags for mapping */
  49. struct block_device *bdev; /* block device for I/O */
  50. struct dax_device *dax_dev; /* dax_dev for dax operations */
  51. void *inline_data;
  52. void *private; /* filesystem private */
  53. /*
  54. * Called when finished processing a page in the mapping returned in
  55. * this iomap. At least for now this is only supported in the buffered
  56. * write path.
  57. */
  58. void (*page_done)(struct inode *inode, loff_t pos, unsigned copied,
  59. struct page *page, struct iomap *iomap);
  60. };
  61. /*
  62. * Flags for iomap_begin / iomap_end. No flag implies a read.
  63. */
  64. #define IOMAP_WRITE (1 << 0) /* writing, must allocate blocks */
  65. #define IOMAP_ZERO (1 << 1) /* zeroing operation, may skip holes */
  66. #define IOMAP_REPORT (1 << 2) /* report extent status, e.g. FIEMAP */
  67. #define IOMAP_FAULT (1 << 3) /* mapping for page fault */
  68. #define IOMAP_DIRECT (1 << 4) /* direct I/O */
  69. #define IOMAP_NOWAIT (1 << 5) /* do not block */
  70. struct iomap_ops {
  71. /*
  72. * Return the existing mapping at pos, or reserve space starting at
  73. * pos for up to length, as long as we can do it as a single mapping.
  74. * The actual length is returned in iomap->length.
  75. */
  76. int (*iomap_begin)(struct inode *inode, loff_t pos, loff_t length,
  77. unsigned flags, struct iomap *iomap);
  78. /*
  79. * Commit and/or unreserve space previous allocated using iomap_begin.
  80. * Written indicates the length of the successful write operation which
  81. * needs to be commited, while the rest needs to be unreserved.
  82. * Written might be zero if no data was written.
  83. */
  84. int (*iomap_end)(struct inode *inode, loff_t pos, loff_t length,
  85. ssize_t written, unsigned flags, struct iomap *iomap);
  86. };
  87. ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from,
  88. const struct iomap_ops *ops);
  89. int iomap_readpage(struct page *page, const struct iomap_ops *ops);
  90. int iomap_readpages(struct address_space *mapping, struct list_head *pages,
  91. unsigned nr_pages, const struct iomap_ops *ops);
  92. int iomap_set_page_dirty(struct page *page);
  93. int iomap_file_dirty(struct inode *inode, loff_t pos, loff_t len,
  94. const struct iomap_ops *ops);
  95. int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
  96. bool *did_zero, const struct iomap_ops *ops);
  97. int iomap_truncate_page(struct inode *inode, loff_t pos, bool *did_zero,
  98. const struct iomap_ops *ops);
  99. int iomap_page_mkwrite(struct vm_fault *vmf, const struct iomap_ops *ops);
  100. int iomap_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
  101. loff_t start, loff_t len, const struct iomap_ops *ops);
  102. loff_t iomap_seek_hole(struct inode *inode, loff_t offset,
  103. const struct iomap_ops *ops);
  104. loff_t iomap_seek_data(struct inode *inode, loff_t offset,
  105. const struct iomap_ops *ops);
  106. sector_t iomap_bmap(struct address_space *mapping, sector_t bno,
  107. const struct iomap_ops *ops);
  108. /*
  109. * Flags for direct I/O ->end_io:
  110. */
  111. #define IOMAP_DIO_UNWRITTEN (1 << 0) /* covers unwritten extent(s) */
  112. #define IOMAP_DIO_COW (1 << 1) /* covers COW extent(s) */
  113. typedef int (iomap_dio_end_io_t)(struct kiocb *iocb, ssize_t ret,
  114. unsigned flags);
  115. ssize_t iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
  116. const struct iomap_ops *ops, iomap_dio_end_io_t end_io);
  117. #ifdef CONFIG_SWAP
  118. struct file;
  119. struct swap_info_struct;
  120. int iomap_swapfile_activate(struct swap_info_struct *sis,
  121. struct file *swap_file, sector_t *pagespan,
  122. const struct iomap_ops *ops);
  123. #else
  124. # define iomap_swapfile_activate(sis, swapfile, pagespan, ops) (-EIO)
  125. #endif /* CONFIG_SWAP */
  126. #endif /* LINUX_IOMAP_H */