mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
Btrfs: deal with io_tree->mapping being NULL
I need to add infrastructure to allocate dummy extent buffers for running sanity tests, and to do this I need to not have to worry about having an address_mapping for an io_tree, so just fix up the places where we assume that all io_tree's have a non-NULL ->mapping. Thanks, Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
2ef1fed285
commit
a5dee37d39
@ -77,13 +77,19 @@ void btrfs_leak_debug_check(void)
|
||||
}
|
||||
}
|
||||
|
||||
#define btrfs_debug_check_extent_io_range(inode, start, end) \
|
||||
__btrfs_debug_check_extent_io_range(__func__, (inode), (start), (end))
|
||||
#define btrfs_debug_check_extent_io_range(tree, start, end) \
|
||||
__btrfs_debug_check_extent_io_range(__func__, (tree), (start), (end))
|
||||
static inline void __btrfs_debug_check_extent_io_range(const char *caller,
|
||||
struct inode *inode, u64 start, u64 end)
|
||||
struct extent_io_tree *tree, u64 start, u64 end)
|
||||
{
|
||||
u64 isize = i_size_read(inode);
|
||||
struct inode *inode;
|
||||
u64 isize;
|
||||
|
||||
if (!tree->mapping)
|
||||
return;
|
||||
|
||||
inode = tree->mapping->host;
|
||||
isize = i_size_read(inode);
|
||||
if (end >= PAGE_SIZE && (end % 2) == 0 && end != isize - 1) {
|
||||
printk_ratelimited(KERN_DEBUG
|
||||
"btrfs: %s: ino %llu isize %llu odd range [%llu,%llu]\n",
|
||||
@ -124,6 +130,8 @@ static noinline void flush_write_bio(void *data);
|
||||
static inline struct btrfs_fs_info *
|
||||
tree_fs_info(struct extent_io_tree *tree)
|
||||
{
|
||||
if (!tree->mapping)
|
||||
return NULL;
|
||||
return btrfs_sb(tree->mapping->host->i_sb);
|
||||
}
|
||||
|
||||
@ -570,7 +578,7 @@ int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
|
||||
int err;
|
||||
int clear = 0;
|
||||
|
||||
btrfs_debug_check_extent_io_range(tree->mapping->host, start, end);
|
||||
btrfs_debug_check_extent_io_range(tree, start, end);
|
||||
|
||||
if (bits & EXTENT_DELALLOC)
|
||||
bits |= EXTENT_NORESERVE;
|
||||
@ -730,7 +738,7 @@ static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
|
||||
struct extent_state *state;
|
||||
struct rb_node *node;
|
||||
|
||||
btrfs_debug_check_extent_io_range(tree->mapping->host, start, end);
|
||||
btrfs_debug_check_extent_io_range(tree, start, end);
|
||||
|
||||
spin_lock(&tree->lock);
|
||||
again:
|
||||
@ -817,7 +825,7 @@ __set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
|
||||
u64 last_start;
|
||||
u64 last_end;
|
||||
|
||||
btrfs_debug_check_extent_io_range(tree->mapping->host, start, end);
|
||||
btrfs_debug_check_extent_io_range(tree, start, end);
|
||||
|
||||
bits |= EXTENT_FIRST_DELALLOC;
|
||||
again:
|
||||
@ -1043,7 +1051,7 @@ int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
|
||||
u64 last_start;
|
||||
u64 last_end;
|
||||
|
||||
btrfs_debug_check_extent_io_range(tree->mapping->host, start, end);
|
||||
btrfs_debug_check_extent_io_range(tree, start, end);
|
||||
|
||||
again:
|
||||
if (!prealloc && (mask & __GFP_WAIT)) {
|
||||
|
Loading…
Reference in New Issue
Block a user