1
2#ifndef LINUX_IOMAP_H
3#define LINUX_IOMAP_H 1
4
5#include <linux/types.h>
6
7struct fiemap_extent_info;
8struct inode;
9struct iov_iter;
10struct kiocb;
11struct vm_area_struct;
12struct vm_fault;
13
14
15
16
17#define IOMAP_HOLE 0x01
18#define IOMAP_DELALLOC 0x02
19#define IOMAP_MAPPED 0x03
20#define IOMAP_UNWRITTEN 0x04
21
22
23
24
25#define IOMAP_F_NEW 0x01
26
27
28
29
30#define IOMAP_F_MERGED 0x10
31#define IOMAP_F_SHARED 0x20
32
33
34
35
36#define IOMAP_NULL_BLOCK -1LL
37
38struct iomap {
39 sector_t blkno;
40 loff_t offset;
41 u64 length;
42 u16 type;
43 u16 flags;
44 struct block_device *bdev;
45 struct dax_device *dax_dev;
46};
47
48
49
50
51#define IOMAP_WRITE (1 << 0)
52#define IOMAP_ZERO (1 << 1)
53#define IOMAP_REPORT (1 << 2)
54#define IOMAP_FAULT (1 << 3)
55#define IOMAP_DIRECT (1 << 4)
56#define IOMAP_NOWAIT (1 << 5)
57
58struct iomap_ops {
59
60
61
62
63
64 int (*iomap_begin)(struct inode *inode, loff_t pos, loff_t length,
65 unsigned flags, struct iomap *iomap);
66
67
68
69
70
71
72
73 int (*iomap_end)(struct inode *inode, loff_t pos, loff_t length,
74 ssize_t written, unsigned flags, struct iomap *iomap);
75};
76
77ssize_t iomap_file_buffered_write(struct kiocb *iocb, struct iov_iter *from,
78 const struct iomap_ops *ops);
79int iomap_file_dirty(struct inode *inode, loff_t pos, loff_t len,
80 const struct iomap_ops *ops);
81int iomap_zero_range(struct inode *inode, loff_t pos, loff_t len,
82 bool *did_zero, const struct iomap_ops *ops);
83int iomap_truncate_page(struct inode *inode, loff_t pos, bool *did_zero,
84 const struct iomap_ops *ops);
85int iomap_page_mkwrite(struct vm_fault *vmf, const struct iomap_ops *ops);
86int iomap_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
87 loff_t start, loff_t len, const struct iomap_ops *ops);
88loff_t iomap_seek_hole(struct inode *inode, loff_t offset,
89 const struct iomap_ops *ops);
90loff_t iomap_seek_data(struct inode *inode, loff_t offset,
91 const struct iomap_ops *ops);
92
93
94
95
96#define IOMAP_DIO_UNWRITTEN (1 << 0)
97#define IOMAP_DIO_COW (1 << 1)
98typedef int (iomap_dio_end_io_t)(struct kiocb *iocb, ssize_t ret,
99 unsigned flags);
100ssize_t iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
101 const struct iomap_ops *ops, iomap_dio_end_io_t end_io);
102
103#endif
104