LCOV - code coverage report
Current view: top level - fs/btrfs - extent_map.h (source / functions) Hit Total Coverage
Test: btrfstest.info Lines: 3 3 100.0 %
Date: 2014-11-28 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef __EXTENTMAP__
       2             : #define __EXTENTMAP__
       3             : 
       4             : #include <linux/rbtree.h>
       5             : 
       6             : #define EXTENT_MAP_LAST_BYTE ((u64)-4)
       7             : #define EXTENT_MAP_HOLE ((u64)-3)
       8             : #define EXTENT_MAP_INLINE ((u64)-2)
       9             : #define EXTENT_MAP_DELALLOC ((u64)-1)
      10             : 
      11             : /* bits for the flags field */
      12             : #define EXTENT_FLAG_PINNED 0 /* this entry not yet on disk, don't free it */
      13             : #define EXTENT_FLAG_COMPRESSED 1
      14             : #define EXTENT_FLAG_VACANCY 2 /* no file extent item found */
      15             : #define EXTENT_FLAG_PREALLOC 3 /* pre-allocated extent */
      16             : #define EXTENT_FLAG_LOGGING 4 /* Logging this extent */
      17             : #define EXTENT_FLAG_FILLING 5 /* Filling in a preallocated extent */
      18             : #define EXTENT_FLAG_FS_MAPPING 6 /* filesystem extent mapping type */
      19             : 
      20             : struct extent_map {
      21             :         struct rb_node rb_node;
      22             : 
      23             :         /* all of these are in bytes */
      24             :         u64 start;
      25             :         u64 len;
      26             :         u64 mod_start;
      27             :         u64 mod_len;
      28             :         u64 orig_start;
      29             :         u64 orig_block_len;
      30             :         u64 ram_bytes;
      31             :         u64 block_start;
      32             :         u64 block_len;
      33             :         u64 generation;
      34             :         unsigned long flags;
      35             :         struct block_device *bdev;
      36             :         atomic_t refs;
      37             :         unsigned int compress_type;
      38             :         struct list_head list;
      39             : };
      40             : 
      41             : struct extent_map_tree {
      42             :         struct rb_root map;
      43             :         struct list_head modified_extents;
      44             :         rwlock_t lock;
      45             : };
      46             : 
      47             : static inline int extent_map_in_tree(const struct extent_map *em)
      48             : {
      49      868539 :         return !RB_EMPTY_NODE(&em->rb_node);
      50             : }
      51             : 
      52             : static inline u64 extent_map_end(struct extent_map *em)
      53             : {
      54    18679995 :         if (em->start + em->len < em->start)
      55             :                 return (u64)-1;
      56             :         return em->start + em->len;
      57             : }
      58             : 
      59             : static inline u64 extent_map_block_end(struct extent_map *em)
      60             : {
      61       25012 :         if (em->block_start + em->block_len < em->block_start)
      62             :                 return (u64)-1;
      63             :         return em->block_start + em->block_len;
      64             : }
      65             : 
      66             : void extent_map_tree_init(struct extent_map_tree *tree);
      67             : struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
      68             :                                          u64 start, u64 len);
      69             : int add_extent_mapping(struct extent_map_tree *tree,
      70             :                        struct extent_map *em, int modified);
      71             : int remove_extent_mapping(struct extent_map_tree *tree, struct extent_map *em);
      72             : void replace_extent_mapping(struct extent_map_tree *tree,
      73             :                             struct extent_map *cur,
      74             :                             struct extent_map *new,
      75             :                             int modified);
      76             : 
      77             : struct extent_map *alloc_extent_map(void);
      78             : void free_extent_map(struct extent_map *em);
      79             : int __init extent_map_init(void);
      80             : void extent_map_exit(void);
      81             : int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len, u64 gen);
      82             : void clear_em_logging(struct extent_map_tree *tree, struct extent_map *em);
      83             : struct extent_map *search_extent_mapping(struct extent_map_tree *tree,
      84             :                                          u64 start, u64 len);
      85             : #endif

Generated by: LCOV version 1.10