1 #ifndef __EXTENTIO__ 2 #define __EXTENTIO__ 3 4 #include <linux/rbtree.h> 5 6 /* bits for the extent state */ 7 #define EXTENT_DIRTY 1 8 #define EXTENT_WRITEBACK (1 << 1) 9 #define EXTENT_UPTODATE (1 << 2) 10 #define EXTENT_LOCKED (1 << 3) 11 #define EXTENT_NEW (1 << 4) 12 #define EXTENT_DELALLOC (1 << 5) 13 #define EXTENT_DEFRAG (1 << 6) 14 #define EXTENT_DEFRAG_DONE (1 << 7) 15 #define EXTENT_BUFFER_FILLED (1 << 8) 16 #define EXTENT_ORDERED (1 << 9) 17 #define EXTENT_ORDERED_METADATA (1 << 10) 18 #define EXTENT_BOUNDARY (1 << 11) 19 #define EXTENT_NODATASUM (1 << 12) 20 #define EXTENT_IOBITS (EXTENT_LOCKED | EXTENT_WRITEBACK) 21 22 /* flags for bio submission */ 23 #define EXTENT_BIO_COMPRESSED 1 24 25 /* these are bit numbers for test/set bit */ 26 #define EXTENT_BUFFER_UPTODATE 0 27 #define EXTENT_BUFFER_BLOCKING 1 28 #define EXTENT_BUFFER_DIRTY 2 29 30 /* 31 * page->private values. Every page that is controlled by the extent 32 * map has page->private set to one. 33 */ 34 #define EXTENT_PAGE_PRIVATE 1 35 #define EXTENT_PAGE_PRIVATE_FIRST_PAGE 3 36 37 struct extent_state; 38 39 typedef int (extent_submit_bio_hook_t)(struct inode *inode, int rw, 40 struct bio *bio, int mirror_num, 41 unsigned long bio_flags); 42 struct extent_io_ops { 43 int (*fill_delalloc)(struct inode *inode, struct page *locked_page, 44 u64 start, u64 end, int *page_started, 45 unsigned long *nr_written); 46 int (*writepage_start_hook)(struct page *page, u64 start, u64 end); 47 int (*writepage_io_hook)(struct page *page, u64 start, u64 end); 48 extent_submit_bio_hook_t *submit_bio_hook; 49 int (*merge_bio_hook)(struct page *page, unsigned long offset, 50 size_t size, struct bio *bio, 51 unsigned long bio_flags); 52 int (*readpage_io_hook)(struct page *page, u64 start, u64 end); 53 int (*readpage_io_failed_hook)(struct bio *bio, struct page *page, 54 u64 start, u64 end, 55 struct extent_state *state); 56 int (*writepage_io_failed_hook)(struct bio *bio, struct page *page, 57 u64 start, u64 end, 58 struct extent_state *state); 59 int (*readpage_end_io_hook)(struct page *page, u64 start, u64 end, 60 struct extent_state *state); 61 int (*writepage_end_io_hook)(struct page *page, u64 start, u64 end, 62 struct extent_state *state, int uptodate); 63 int (*set_bit_hook)(struct inode *inode, u64 start, u64 end, 64 unsigned long old, unsigned long bits); 65 int (*clear_bit_hook)(struct inode *inode, u64 start, u64 end, 66 unsigned long old, unsigned long bits); 67 int (*write_cache_pages_lock_hook)(struct page *page); 68 }; 69 70 struct extent_io_tree { 71 struct rb_root state; 72 struct rb_root buffer; 73 struct address_space *mapping; 74 u64 dirty_bytes; 75 spinlock_t lock; 76 spinlock_t buffer_lock; 77 struct extent_io_ops *ops; 78 }; 79 80 struct extent_state { 81 u64 start; 82 u64 end; /* inclusive */ 83 struct rb_node rb_node; 84 struct extent_io_tree *tree; 85 wait_queue_head_t wq; 86 atomic_t refs; 87 unsigned long state; 88 89 /* for use by the FS */ 90 u64 private; 91 92 struct list_head leak_list; 93 }; 94 95 struct extent_buffer { 96 u64 start; 97 unsigned long len; 98 char *map_token; 99 char *kaddr; 100 unsigned long map_start; 101 unsigned long map_len; 102 struct page *first_page; 103 unsigned long bflags; 104 atomic_t refs; 105 struct list_head leak_list; 106 struct rb_node rb_node; 107 108 /* the spinlock is used to protect most operations */ 109 spinlock_t lock; 110 111 /* 112 * when we keep the lock held while blocking, waiters go onto 113 * the wq 114 */ 115 wait_queue_head_t lock_wq; 116 }; 117 118 struct extent_map_tree; 119 120 static inline struct extent_state *extent_state_next(struct extent_state *state) 121 { 122 struct rb_node *node; 123 node = rb_next(&state->rb_node); 124 if (!node) 125 return NULL; 126 return rb_entry(node, struct extent_state, rb_node); 127 } 128 129 typedef struct extent_map *(get_extent_t)(struct inode *inode, 130 struct page *page, 131 size_t page_offset, 132 u64 start, u64 len, 133 int create); 134 135 void extent_io_tree_init(struct extent_io_tree *tree, 136 struct address_space *mapping, gfp_t mask); 137 int try_release_extent_mapping(struct extent_map_tree *map, 138 struct extent_io_tree *tree, struct page *page, 139 gfp_t mask); 140 int try_release_extent_buffer(struct extent_io_tree *tree, struct page *page); 141 int try_release_extent_state(struct extent_map_tree *map, 142 struct extent_io_tree *tree, struct page *page, 143 gfp_t mask); 144 int lock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask); 145 int unlock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask); 146 int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end, 147 gfp_t mask); 148 int extent_read_full_page(struct extent_io_tree *tree, struct page *page, 149 get_extent_t *get_extent); 150 int __init extent_io_init(void); 151 void extent_io_exit(void); 152 153 u64 count_range_bits(struct extent_io_tree *tree, 154 u64 *start, u64 search_end, 155 u64 max_bytes, unsigned long bits); 156 157 int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end, 158 int bits, int filled); 159 int clear_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 160 int bits, gfp_t mask); 161 int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 162 int bits, int wake, int delete, gfp_t mask); 163 int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 164 int bits, gfp_t mask); 165 int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end, 166 gfp_t mask); 167 int set_extent_new(struct extent_io_tree *tree, u64 start, u64 end, 168 gfp_t mask); 169 int set_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end, 170 gfp_t mask); 171 int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end, 172 gfp_t mask); 173 int clear_extent_ordered(struct extent_io_tree *tree, u64 start, u64 end, 174 gfp_t mask); 175 int clear_extent_ordered_metadata(struct extent_io_tree *tree, u64 start, 176 u64 end, gfp_t mask); 177 int set_extent_delalloc(struct extent_io_tree *tree, u64 start, u64 end, 178 gfp_t mask); 179 int set_extent_ordered(struct extent_io_tree *tree, u64 start, u64 end, 180 gfp_t mask); 181 int find_first_extent_bit(struct extent_io_tree *tree, u64 start, 182 u64 *start_ret, u64 *end_ret, int bits); 183 struct extent_state *find_first_extent_bit_state(struct extent_io_tree *tree, 184 u64 start, int bits); 185 int extent_invalidatepage(struct extent_io_tree *tree, 186 struct page *page, unsigned long offset); 187 int extent_write_full_page(struct extent_io_tree *tree, struct page *page, 188 get_extent_t *get_extent, 189 struct writeback_control *wbc); 190 int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode, 191 u64 start, u64 end, get_extent_t *get_extent, 192 int mode); 193 int extent_writepages(struct extent_io_tree *tree, 194 struct address_space *mapping, 195 get_extent_t *get_extent, 196 struct writeback_control *wbc); 197 int extent_readpages(struct extent_io_tree *tree, 198 struct address_space *mapping, 199 struct list_head *pages, unsigned nr_pages, 200 get_extent_t get_extent); 201 int extent_prepare_write(struct extent_io_tree *tree, 202 struct inode *inode, struct page *page, 203 unsigned from, unsigned to, get_extent_t *get_extent); 204 int extent_commit_write(struct extent_io_tree *tree, 205 struct inode *inode, struct page *page, 206 unsigned from, unsigned to); 207 sector_t extent_bmap(struct address_space *mapping, sector_t iblock, 208 get_extent_t *get_extent); 209 int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 210 __u64 start, __u64 len, get_extent_t *get_extent); 211 int set_range_dirty(struct extent_io_tree *tree, u64 start, u64 end); 212 int set_state_private(struct extent_io_tree *tree, u64 start, u64 private); 213 int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private); 214 void set_page_extent_mapped(struct page *page); 215 216 struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, 217 u64 start, unsigned long len, 218 struct page *page0, 219 gfp_t mask); 220 struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree, 221 u64 start, unsigned long len, 222 gfp_t mask); 223 void free_extent_buffer(struct extent_buffer *eb); 224 int read_extent_buffer_pages(struct extent_io_tree *tree, 225 struct extent_buffer *eb, u64 start, int wait, 226 get_extent_t *get_extent, int mirror_num); 227 228 static inline void extent_buffer_get(struct extent_buffer *eb) 229 { 230 atomic_inc(&eb->refs); 231 } 232 233 int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv, 234 unsigned long start, 235 unsigned long len); 236 void read_extent_buffer(struct extent_buffer *eb, void *dst, 237 unsigned long start, 238 unsigned long len); 239 void write_extent_buffer(struct extent_buffer *eb, const void *src, 240 unsigned long start, unsigned long len); 241 void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src, 242 unsigned long dst_offset, unsigned long src_offset, 243 unsigned long len); 244 void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, 245 unsigned long src_offset, unsigned long len); 246 void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, 247 unsigned long src_offset, unsigned long len); 248 void memset_extent_buffer(struct extent_buffer *eb, char c, 249 unsigned long start, unsigned long len); 250 int wait_on_extent_buffer_writeback(struct extent_io_tree *tree, 251 struct extent_buffer *eb); 252 int wait_on_extent_writeback(struct extent_io_tree *tree, u64 start, u64 end); 253 int wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, int bits); 254 int clear_extent_buffer_dirty(struct extent_io_tree *tree, 255 struct extent_buffer *eb); 256 int set_extent_buffer_dirty(struct extent_io_tree *tree, 257 struct extent_buffer *eb); 258 int test_extent_buffer_dirty(struct extent_io_tree *tree, 259 struct extent_buffer *eb); 260 int set_extent_buffer_uptodate(struct extent_io_tree *tree, 261 struct extent_buffer *eb); 262 int clear_extent_buffer_uptodate(struct extent_io_tree *tree, 263 struct extent_buffer *eb); 264 int extent_buffer_uptodate(struct extent_io_tree *tree, 265 struct extent_buffer *eb); 266 int map_extent_buffer(struct extent_buffer *eb, unsigned long offset, 267 unsigned long min_len, char **token, char **map, 268 unsigned long *map_start, 269 unsigned long *map_len, int km); 270 int map_private_extent_buffer(struct extent_buffer *eb, unsigned long offset, 271 unsigned long min_len, char **token, char **map, 272 unsigned long *map_start, 273 unsigned long *map_len, int km); 274 void unmap_extent_buffer(struct extent_buffer *eb, char *token, int km); 275 int release_extent_buffer_tail_pages(struct extent_buffer *eb); 276 int extent_range_uptodate(struct extent_io_tree *tree, 277 u64 start, u64 end); 278 int extent_clear_unlock_delalloc(struct inode *inode, 279 struct extent_io_tree *tree, 280 u64 start, u64 end, struct page *locked_page, 281 int unlock_page, 282 int clear_unlock, 283 int clear_delalloc, int clear_dirty, 284 int set_writeback, 285 int end_writeback); 286 #endif 287