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