~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/iomap.h

Version: ~ [ linux-5.18-rc6 ] ~ [ linux-5.17.6 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.38 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.114 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.192 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.241 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.277 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.312 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef LINUX_IOMAP_H
  2 #define LINUX_IOMAP_H 1
  3 
  4 #include <linux/types.h>
  5 
  6 struct fiemap_extent_info;
  7 struct inode;
  8 struct iov_iter;
  9 struct kiocb;
 10 struct vm_area_struct;
 11 struct vm_fault;
 12 
 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 @blkno */
 19 #define IOMAP_UNWRITTEN 0x04    /* blocks allocated @blkno in unwritten state */
 20 
 21 /*
 22  * Flags for all iomap mappings:
 23  */
 24 #define IOMAP_F_NEW     0x01    /* blocks have been newly allocated */
 25 
 26 /*
 27  * Flags that only need to be reported for IOMAP_REPORT requests:
 28  */
 29 #define IOMAP_F_MERGED  0x10    /* contains multiple blocks/extents */
 30 #define IOMAP_F_SHARED  0x20    /* block shared with another file */
 31 
 32 /*
 33  * Magic value for blkno:
 34  */
 35 #define IOMAP_NULL_BLOCK -1LL   /* blkno is not valid */
 36 
 37 struct iomap {
 38         sector_t                blkno;  /* 1st sector of mapping, 512b units */
 39         loff_t                  offset; /* file offset of mapping, bytes */
 40         u64                     length; /* length of mapping, bytes */
 41         u16                     type;   /* type of mapping */
 42         u16                     flags;  /* flags for mapping */
 43         struct block_device     *bdev;  /* block device for I/O */
 44         struct dax_device       *dax_dev; /* dax_dev for dax operations */
 45 };
 46 
 47 /*
 48  * Flags for iomap_begin / iomap_end.  No flag implies a read.
 49  */
 50 #define IOMAP_WRITE             (1 << 0) /* writing, must allocate blocks */
 51 #define IOMAP_ZERO              (1 << 1) /* zeroing operation, may skip holes */
 52 #define IOMAP_REPORT            (1 << 2) /* report extent status, e.g. FIEMAP */
 53 #define IOMAP_FAULT             (1 << 3) /* mapping for page fault */
 54 #define IOMAP_DIRECT            (1 << 4) /* direct I/O */
 55 #define IOMAP_NOWAIT            (1 << 5) /* Don't wait for writeback */
 56 
 57 struct iomap_ops {
 58         /*
 59          * Return the existing mapping at pos, or reserve space starting at
 60          * pos for up to length, as long as we can do it as a single mapping.
 61          * The actual length is returned in iomap->length.
 62          */
 63         int (*iomap_begin)(struct inode *inode, loff_t pos, loff_t length,
 64                         unsigned flags, struct iomap *iomap);
 65 
 66         /*
 67          * Commit and/or unreserve space previous allocated using iomap_begin.
 68          * Written indicates the length of the successful write operation which
 69          * needs to be commited, while the rest needs to be unreserved.
 70          * Written might be zero if no data was written.
 71          */
 72         int (*iomap_end)(struct inode *inode, loff_t pos, loff_t length,
 73                         ssize_t written, unsigned flags, struct iomap *iomap);
 74 };
 75 
 76 ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from,
 77                 const struct iomap_ops *ops);
 78 int iomap_file_dirty(struct inode *inode, loff_t pos, loff_t len,
 79                 const struct iomap_ops *ops);
 80 int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
 81                 bool *did_zero, const struct iomap_ops *ops);
 82 int iomap_truncate_page(struct inode *inode, loff_t pos, bool *did_zero,
 83                 const struct iomap_ops *ops);
 84 int iomap_page_mkwrite(struct vm_fault *vmf, const struct iomap_ops *ops);
 85 int iomap_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 86                 loff_t start, loff_t len, const struct iomap_ops *ops);
 87 loff_t iomap_seek_hole(struct inode *inode, loff_t offset,
 88                 const struct iomap_ops *ops);
 89 loff_t iomap_seek_data(struct inode *inode, loff_t offset,
 90                 const struct iomap_ops *ops);
 91 
 92 /*
 93  * Flags for direct I/O ->end_io:
 94  */
 95 #define IOMAP_DIO_UNWRITTEN     (1 << 0)        /* covers unwritten extent(s) */
 96 #define IOMAP_DIO_COW           (1 << 1)        /* covers COW extent(s) */
 97 typedef int (iomap_dio_end_io_t)(struct kiocb *iocb, ssize_t ret,
 98                 unsigned flags);
 99 ssize_t iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
100                 const struct iomap_ops *ops, iomap_dio_end_io_t end_io);
101 
102 #endif /* LINUX_IOMAP_H */
103 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp