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