linux/fs/btrfs/extent_io.h
<<
>>
Prefs
   1#ifndef __EXTENTIO__
   2#define __EXTENTIO__
   3
   4#include <linux/rbtree.h>
   5#include "ulist.h"
   6
   7/* bits for the extent state */
   8#define EXTENT_DIRTY            (1U << 0)
   9#define EXTENT_WRITEBACK        (1U << 1)
  10#define EXTENT_UPTODATE         (1U << 2)
  11#define EXTENT_LOCKED           (1U << 3)
  12#define EXTENT_NEW              (1U << 4)
  13#define EXTENT_DELALLOC         (1U << 5)
  14#define EXTENT_DEFRAG           (1U << 6)
  15#define EXTENT_BOUNDARY         (1U << 9)
  16#define EXTENT_NODATASUM        (1U << 10)
  17#define EXTENT_DO_ACCOUNTING    (1U << 11)
  18#define EXTENT_FIRST_DELALLOC   (1U << 12)
  19#define EXTENT_NEED_WAIT        (1U << 13)
  20#define EXTENT_DAMAGED          (1U << 14)
  21#define EXTENT_NORESERVE        (1U << 15)
  22#define EXTENT_QGROUP_RESERVED  (1U << 16)
  23#define EXTENT_CLEAR_DATA_RESV  (1U << 17)
  24#define EXTENT_IOBITS           (EXTENT_LOCKED | EXTENT_WRITEBACK)
  25#define EXTENT_CTLBITS          (EXTENT_DO_ACCOUNTING | EXTENT_FIRST_DELALLOC)
  26
  27/*
  28 * flags for bio submission. The high bits indicate the compression
  29 * type for this bio
  30 */
  31#define EXTENT_BIO_COMPRESSED 1
  32#define EXTENT_BIO_TREE_LOG 2
  33#define EXTENT_BIO_FLAG_SHIFT 16
  34
  35/* these are bit numbers for test/set bit */
  36#define EXTENT_BUFFER_UPTODATE 0
  37#define EXTENT_BUFFER_DIRTY 2
  38#define EXTENT_BUFFER_CORRUPT 3
  39#define EXTENT_BUFFER_READAHEAD 4       /* this got triggered by readahead */
  40#define EXTENT_BUFFER_TREE_REF 5
  41#define EXTENT_BUFFER_STALE 6
  42#define EXTENT_BUFFER_WRITEBACK 7
  43#define EXTENT_BUFFER_READ_ERR 8        /* read IO error */
  44#define EXTENT_BUFFER_DUMMY 9
  45#define EXTENT_BUFFER_IN_TREE 10
  46#define EXTENT_BUFFER_WRITE_ERR 11    /* write IO error */
  47
  48/* these are flags for extent_clear_unlock_delalloc */
  49#define PAGE_UNLOCK             (1 << 0)
  50#define PAGE_CLEAR_DIRTY        (1 << 1)
  51#define PAGE_SET_WRITEBACK      (1 << 2)
  52#define PAGE_END_WRITEBACK      (1 << 3)
  53#define PAGE_SET_PRIVATE2       (1 << 4)
  54#define PAGE_SET_ERROR          (1 << 5)
  55
  56/*
  57 * page->private values.  Every page that is controlled by the extent
  58 * map has page->private set to one.
  59 */
  60#define EXTENT_PAGE_PRIVATE 1
  61
  62/*
  63 * The extent buffer bitmap operations are done with byte granularity instead of
  64 * word granularity for two reasons:
  65 * 1. The bitmaps must be little-endian on disk.
  66 * 2. Bitmap items are not guaranteed to be aligned to a word and therefore a
  67 *    single word in a bitmap may straddle two pages in the extent buffer.
  68 */
  69#define BIT_BYTE(nr) ((nr) / BITS_PER_BYTE)
  70#define BYTE_MASK ((1 << BITS_PER_BYTE) - 1)
  71#define BITMAP_FIRST_BYTE_MASK(start) \
  72        ((BYTE_MASK << ((start) & (BITS_PER_BYTE - 1))) & BYTE_MASK)
  73#define BITMAP_LAST_BYTE_MASK(nbits) \
  74        (BYTE_MASK >> (-(nbits) & (BITS_PER_BYTE - 1)))
  75
  76static inline int le_test_bit(int nr, const u8 *addr)
  77{
  78        return 1U & (addr[BIT_BYTE(nr)] >> (nr & (BITS_PER_BYTE-1)));
  79}
  80
  81extern void le_bitmap_set(u8 *map, unsigned int start, int len);
  82extern void le_bitmap_clear(u8 *map, unsigned int start, int len);
  83
  84struct extent_state;
  85struct btrfs_root;
  86struct btrfs_io_bio;
  87struct io_failure_record;
  88
  89typedef int (extent_submit_bio_hook_t)(struct inode *inode, struct bio *bio,
  90                                       int mirror_num, unsigned long bio_flags,
  91                                       u64 bio_offset);
  92struct extent_io_ops {
  93        int (*fill_delalloc)(struct inode *inode, struct page *locked_page,
  94                             u64 start, u64 end, int *page_started,
  95                             unsigned long *nr_written);
  96        int (*writepage_start_hook)(struct page *page, u64 start, u64 end);
  97        extent_submit_bio_hook_t *submit_bio_hook;
  98        int (*merge_bio_hook)(struct page *page, unsigned long offset,
  99                              size_t size, struct bio *bio,
 100                              unsigned long bio_flags);
 101        int (*readpage_io_failed_hook)(struct page *page, int failed_mirror);
 102        int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset,
 103                                    struct page *page, u64 start, u64 end,
 104                                    int mirror);
 105        int (*writepage_end_io_hook)(struct page *page, u64 start, u64 end,
 106                                      struct extent_state *state, int uptodate);
 107        void (*set_bit_hook)(struct inode *inode, struct extent_state *state,
 108                             unsigned *bits);
 109        void (*clear_bit_hook)(struct inode *inode, struct extent_state *state,
 110                               unsigned *bits);
 111        void (*merge_extent_hook)(struct inode *inode,
 112                                  struct extent_state *new,
 113                                  struct extent_state *other);
 114        void (*split_extent_hook)(struct inode *inode,
 115                                  struct extent_state *orig, u64 split);
 116};
 117
 118struct extent_io_tree {
 119        struct rb_root state;
 120        struct address_space *mapping;
 121        u64 dirty_bytes;
 122        int track_uptodate;
 123        spinlock_t lock;
 124        const struct extent_io_ops *ops;
 125};
 126
 127struct extent_state {
 128        u64 start;
 129        u64 end; /* inclusive */
 130        struct rb_node rb_node;
 131
 132        /* ADD NEW ELEMENTS AFTER THIS */
 133        wait_queue_head_t wq;
 134        atomic_t refs;
 135        unsigned state;
 136
 137        struct io_failure_record *failrec;
 138
 139#ifdef CONFIG_BTRFS_DEBUG
 140        struct list_head leak_list;
 141#endif
 142};
 143
 144#define INLINE_EXTENT_BUFFER_PAGES 16
 145#define MAX_INLINE_EXTENT_BUFFER_SIZE (INLINE_EXTENT_BUFFER_PAGES * PAGE_SIZE)
 146struct extent_buffer {
 147        u64 start;
 148        unsigned long len;
 149        unsigned long bflags;
 150        struct btrfs_fs_info *fs_info;
 151        spinlock_t refs_lock;
 152        atomic_t refs;
 153        atomic_t io_pages;
 154        int read_mirror;
 155        struct rcu_head rcu_head;
 156        pid_t lock_owner;
 157
 158        /* count of read lock holders on the extent buffer */
 159        atomic_t write_locks;
 160        atomic_t read_locks;
 161        atomic_t blocking_writers;
 162        atomic_t blocking_readers;
 163        atomic_t spinning_readers;
 164        atomic_t spinning_writers;
 165        short lock_nested;
 166        /* >= 0 if eb belongs to a log tree, -1 otherwise */
 167        short log_index;
 168
 169        /* protects write locks */
 170        rwlock_t lock;
 171
 172        /* readers use lock_wq while they wait for the write
 173         * lock holders to unlock
 174         */
 175        wait_queue_head_t write_lock_wq;
 176
 177        /* writers use read_lock_wq while they wait for readers
 178         * to unlock
 179         */
 180        wait_queue_head_t read_lock_wq;
 181        struct page *pages[INLINE_EXTENT_BUFFER_PAGES];
 182#ifdef CONFIG_BTRFS_DEBUG
 183        struct list_head leak_list;
 184#endif
 185};
 186
 187/*
 188 * Structure to record how many bytes and which ranges are set/cleared
 189 */
 190struct extent_changeset {
 191        /* How many bytes are set/cleared in this operation */
 192        u64 bytes_changed;
 193
 194        /* Changed ranges */
 195        struct ulist *range_changed;
 196};
 197
 198static inline void extent_set_compress_type(unsigned long *bio_flags,
 199                                            int compress_type)
 200{
 201        *bio_flags |= compress_type << EXTENT_BIO_FLAG_SHIFT;
 202}
 203
 204static inline int extent_compress_type(unsigned long bio_flags)
 205{
 206        return bio_flags >> EXTENT_BIO_FLAG_SHIFT;
 207}
 208
 209struct extent_map_tree;
 210
 211typedef struct extent_map *(get_extent_t)(struct inode *inode,
 212                                          struct page *page,
 213                                          size_t pg_offset,
 214                                          u64 start, u64 len,
 215                                          int create);
 216
 217void extent_io_tree_init(struct extent_io_tree *tree,
 218                         struct address_space *mapping);
 219int try_release_extent_mapping(struct extent_map_tree *map,
 220                               struct extent_io_tree *tree, struct page *page,
 221                               gfp_t mask);
 222int try_release_extent_buffer(struct page *page);
 223int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
 224                     struct extent_state **cached);
 225
 226static inline int lock_extent(struct extent_io_tree *tree, u64 start, u64 end)
 227{
 228        return lock_extent_bits(tree, start, end, NULL);
 229}
 230
 231int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end);
 232int extent_read_full_page(struct extent_io_tree *tree, struct page *page,
 233                          get_extent_t *get_extent, int mirror_num);
 234int __init extent_io_init(void);
 235void extent_io_exit(void);
 236
 237u64 count_range_bits(struct extent_io_tree *tree,
 238                     u64 *start, u64 search_end,
 239                     u64 max_bytes, unsigned bits, int contig);
 240
 241void free_extent_state(struct extent_state *state);
 242int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
 243                   unsigned bits, int filled,
 244                   struct extent_state *cached_state);
 245int clear_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
 246                unsigned bits, struct extent_changeset *changeset);
 247int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
 248                     unsigned bits, int wake, int delete,
 249                     struct extent_state **cached, gfp_t mask);
 250
 251static inline int unlock_extent(struct extent_io_tree *tree, u64 start, u64 end)
 252{
 253        return clear_extent_bit(tree, start, end, EXTENT_LOCKED, 1, 0, NULL,
 254                                GFP_NOFS);
 255}
 256
 257static inline int unlock_extent_cached(struct extent_io_tree *tree, u64 start,
 258                u64 end, struct extent_state **cached, gfp_t mask)
 259{
 260        return clear_extent_bit(tree, start, end, EXTENT_LOCKED, 1, 0, cached,
 261                                mask);
 262}
 263
 264static inline int clear_extent_bits(struct extent_io_tree *tree, u64 start,
 265                u64 end, unsigned bits)
 266{
 267        int wake = 0;
 268
 269        if (bits & EXTENT_LOCKED)
 270                wake = 1;
 271
 272        return clear_extent_bit(tree, start, end, bits, wake, 0, NULL,
 273                        GFP_NOFS);
 274}
 275
 276int set_record_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
 277                           unsigned bits, struct extent_changeset *changeset);
 278int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
 279                   unsigned bits, u64 *failed_start,
 280                   struct extent_state **cached_state, gfp_t mask);
 281
 282static inline int set_extent_bits(struct extent_io_tree *tree, u64 start,
 283                u64 end, unsigned bits)
 284{
 285        return set_extent_bit(tree, start, end, bits, NULL, NULL, GFP_NOFS);
 286}
 287
 288static inline int clear_extent_uptodate(struct extent_io_tree *tree, u64 start,
 289                u64 end, struct extent_state **cached_state, gfp_t mask)
 290{
 291        return clear_extent_bit(tree, start, end, EXTENT_UPTODATE, 0, 0,
 292                                cached_state, mask);
 293}
 294
 295static inline int set_extent_dirty(struct extent_io_tree *tree, u64 start,
 296                u64 end, gfp_t mask)
 297{
 298        return set_extent_bit(tree, start, end, EXTENT_DIRTY, NULL,
 299                              NULL, mask);
 300}
 301
 302static inline int clear_extent_dirty(struct extent_io_tree *tree, u64 start,
 303                u64 end)
 304{
 305        return clear_extent_bit(tree, start, end,
 306                                EXTENT_DIRTY | EXTENT_DELALLOC |
 307                                EXTENT_DO_ACCOUNTING, 0, 0, NULL, GFP_NOFS);
 308}
 309
 310int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
 311                       unsigned bits, unsigned clear_bits,
 312                       struct extent_state **cached_state);
 313
 314static inline int set_extent_delalloc(struct extent_io_tree *tree, u64 start,
 315                u64 end, struct extent_state **cached_state)
 316{
 317        return set_extent_bit(tree, start, end,
 318                              EXTENT_DELALLOC | EXTENT_UPTODATE,
 319                              NULL, cached_state, GFP_NOFS);
 320}
 321
 322static inline int set_extent_defrag(struct extent_io_tree *tree, u64 start,
 323                u64 end, struct extent_state **cached_state)
 324{
 325        return set_extent_bit(tree, start, end,
 326                              EXTENT_DELALLOC | EXTENT_UPTODATE | EXTENT_DEFRAG,
 327                              NULL, cached_state, GFP_NOFS);
 328}
 329
 330static inline int set_extent_new(struct extent_io_tree *tree, u64 start,
 331                u64 end)
 332{
 333        return set_extent_bit(tree, start, end, EXTENT_NEW, NULL, NULL,
 334                        GFP_NOFS);
 335}
 336
 337static inline int set_extent_uptodate(struct extent_io_tree *tree, u64 start,
 338                u64 end, struct extent_state **cached_state, gfp_t mask)
 339{
 340        return set_extent_bit(tree, start, end, EXTENT_UPTODATE, NULL,
 341                              cached_state, mask);
 342}
 343
 344int find_first_extent_bit(struct extent_io_tree *tree, u64 start,
 345                          u64 *start_ret, u64 *end_ret, unsigned bits,
 346                          struct extent_state **cached_state);
 347int extent_invalidatepage(struct extent_io_tree *tree,
 348                          struct page *page, unsigned long offset);
 349int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
 350                          get_extent_t *get_extent,
 351                          struct writeback_control *wbc);
 352int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
 353                              u64 start, u64 end, get_extent_t *get_extent,
 354                              int mode);
 355int extent_writepages(struct extent_io_tree *tree,
 356                      struct address_space *mapping,
 357                      get_extent_t *get_extent,
 358                      struct writeback_control *wbc);
 359int btree_write_cache_pages(struct address_space *mapping,
 360                            struct writeback_control *wbc);
 361int extent_readpages(struct extent_io_tree *tree,
 362                     struct address_space *mapping,
 363                     struct list_head *pages, unsigned nr_pages,
 364                     get_extent_t get_extent);
 365int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 366                __u64 start, __u64 len, get_extent_t *get_extent);
 367void set_page_extent_mapped(struct page *page);
 368
 369struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
 370                                          u64 start);
 371struct extent_buffer *__alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
 372                                                  u64 start, unsigned long len);
 373struct extent_buffer *alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
 374                                                u64 start);
 375struct extent_buffer *btrfs_clone_extent_buffer(struct extent_buffer *src);
 376struct extent_buffer *find_extent_buffer(struct btrfs_fs_info *fs_info,
 377                                         u64 start);
 378void free_extent_buffer(struct extent_buffer *eb);
 379void free_extent_buffer_stale(struct extent_buffer *eb);
 380#define WAIT_NONE       0
 381#define WAIT_COMPLETE   1
 382#define WAIT_PAGE_LOCK  2
 383int read_extent_buffer_pages(struct extent_io_tree *tree,
 384                             struct extent_buffer *eb, int wait,
 385                             get_extent_t *get_extent, int mirror_num);
 386void wait_on_extent_buffer_writeback(struct extent_buffer *eb);
 387
 388static inline unsigned long num_extent_pages(u64 start, u64 len)
 389{
 390        return ((start + len + PAGE_SIZE - 1) >> PAGE_SHIFT) -
 391                (start >> PAGE_SHIFT);
 392}
 393
 394static inline void extent_buffer_get(struct extent_buffer *eb)
 395{
 396        atomic_inc(&eb->refs);
 397}
 398
 399int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv,
 400                          unsigned long start,
 401                          unsigned long len);
 402void read_extent_buffer(struct extent_buffer *eb, void *dst,
 403                        unsigned long start,
 404                        unsigned long len);
 405int read_extent_buffer_to_user(struct extent_buffer *eb, void __user *dst,
 406                               unsigned long start,
 407                               unsigned long len);
 408void write_extent_buffer_fsid(struct extent_buffer *eb, const void *src);
 409void write_extent_buffer_chunk_tree_uuid(struct extent_buffer *eb,
 410                const void *src);
 411void write_extent_buffer(struct extent_buffer *eb, const void *src,
 412                         unsigned long start, unsigned long len);
 413void copy_extent_buffer_full(struct extent_buffer *dst,
 414                             struct extent_buffer *src);
 415void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src,
 416                        unsigned long dst_offset, unsigned long src_offset,
 417                        unsigned long len);
 418void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
 419                           unsigned long src_offset, unsigned long len);
 420void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
 421                           unsigned long src_offset, unsigned long len);
 422void memzero_extent_buffer(struct extent_buffer *eb, unsigned long start,
 423                           unsigned long len);
 424int extent_buffer_test_bit(struct extent_buffer *eb, unsigned long start,
 425                           unsigned long pos);
 426void extent_buffer_bitmap_set(struct extent_buffer *eb, unsigned long start,
 427                              unsigned long pos, unsigned long len);
 428void extent_buffer_bitmap_clear(struct extent_buffer *eb, unsigned long start,
 429                                unsigned long pos, unsigned long len);
 430void clear_extent_buffer_dirty(struct extent_buffer *eb);
 431int set_extent_buffer_dirty(struct extent_buffer *eb);
 432void set_extent_buffer_uptodate(struct extent_buffer *eb);
 433void clear_extent_buffer_uptodate(struct extent_buffer *eb);
 434int extent_buffer_uptodate(struct extent_buffer *eb);
 435int extent_buffer_under_io(struct extent_buffer *eb);
 436int map_private_extent_buffer(struct extent_buffer *eb, unsigned long offset,
 437                      unsigned long min_len, char **map,
 438                      unsigned long *map_start,
 439                      unsigned long *map_len);
 440void extent_range_clear_dirty_for_io(struct inode *inode, u64 start, u64 end);
 441void extent_range_redirty_for_io(struct inode *inode, u64 start, u64 end);
 442void extent_clear_unlock_delalloc(struct inode *inode, u64 start, u64 end,
 443                                 u64 delalloc_end, struct page *locked_page,
 444                                 unsigned bits_to_clear,
 445                                 unsigned long page_ops);
 446struct bio *
 447btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs,
 448                gfp_t gfp_flags);
 449struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs);
 450struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask);
 451
 452struct btrfs_fs_info;
 453
 454int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical,
 455                      struct page *page, unsigned int pg_offset,
 456                      int mirror_num);
 457int clean_io_failure(struct inode *inode, u64 start, struct page *page,
 458                     unsigned int pg_offset);
 459void end_extent_writepage(struct page *page, int err, u64 start, u64 end);
 460int repair_eb_io_failure(struct btrfs_fs_info *fs_info,
 461                         struct extent_buffer *eb, int mirror_num);
 462
 463/*
 464 * When IO fails, either with EIO or csum verification fails, we
 465 * try other mirrors that might have a good copy of the data.  This
 466 * io_failure_record is used to record state as we go through all the
 467 * mirrors.  If another mirror has good data, the page is set up to date
 468 * and things continue.  If a good mirror can't be found, the original
 469 * bio end_io callback is called to indicate things have failed.
 470 */
 471struct io_failure_record {
 472        struct page *page;
 473        u64 start;
 474        u64 len;
 475        u64 logical;
 476        unsigned long bio_flags;
 477        int this_mirror;
 478        int failed_mirror;
 479        int in_validation;
 480};
 481
 482void btrfs_free_io_failure_record(struct inode *inode, u64 start, u64 end);
 483int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end,
 484                                struct io_failure_record **failrec_ret);
 485int btrfs_check_repairable(struct inode *inode, struct bio *failed_bio,
 486                           struct io_failure_record *failrec, int fail_mirror);
 487struct bio *btrfs_create_repair_bio(struct inode *inode, struct bio *failed_bio,
 488                                    struct io_failure_record *failrec,
 489                                    struct page *page, int pg_offset, int icsum,
 490                                    bio_end_io_t *endio_func, void *data);
 491int free_io_failure(struct inode *inode, struct io_failure_record *rec);
 492#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
 493noinline u64 find_lock_delalloc_range(struct inode *inode,
 494                                      struct extent_io_tree *tree,
 495                                      struct page *locked_page, u64 *start,
 496                                      u64 *end, u64 max_bytes);
 497#endif
 498struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
 499                                               u64 start);
 500#endif
 501