Commit 0b246afa authored by Jeff Mahoney's avatar Jeff Mahoney Committed by David Sterba

btrfs: root->fs_info cleanup, add fs_info convenience variables

In routines where someptr->fs_info is referenced multiple times, we
introduce a convenience variable.  This makes the code considerably
more readable.
Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 6202df69
...@@ -646,11 +646,12 @@ static struct btrfsic_dev_state *btrfsic_dev_state_hashtable_lookup( ...@@ -646,11 +646,12 @@ static struct btrfsic_dev_state *btrfsic_dev_state_hashtable_lookup(
static int btrfsic_process_superblock(struct btrfsic_state *state, static int btrfsic_process_superblock(struct btrfsic_state *state,
struct btrfs_fs_devices *fs_devices) struct btrfs_fs_devices *fs_devices)
{ {
int ret = 0; struct btrfs_fs_info *fs_info = state->fs_info;
struct btrfs_super_block *selected_super; struct btrfs_super_block *selected_super;
struct list_head *dev_head = &fs_devices->devices; struct list_head *dev_head = &fs_devices->devices;
struct btrfs_device *device; struct btrfs_device *device;
struct btrfsic_dev_state *selected_dev_state = NULL; struct btrfsic_dev_state *selected_dev_state = NULL;
int ret = 0;
int pass; int pass;
BUG_ON(NULL == state); BUG_ON(NULL == state);
...@@ -716,9 +717,8 @@ static int btrfsic_process_superblock(struct btrfsic_state *state, ...@@ -716,9 +717,8 @@ static int btrfsic_process_superblock(struct btrfsic_state *state,
break; break;
} }
num_copies = num_copies = btrfs_num_copies(fs_info, next_bytenr,
btrfs_num_copies(state->fs_info, state->metablock_size);
next_bytenr, state->metablock_size);
if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
pr_info("num_copies(log_bytenr=%llu) = %d\n", pr_info("num_copies(log_bytenr=%llu) = %d\n",
next_bytenr, num_copies); next_bytenr, num_copies);
...@@ -783,6 +783,7 @@ static int btrfsic_process_superblock_dev_mirror( ...@@ -783,6 +783,7 @@ static int btrfsic_process_superblock_dev_mirror(
struct btrfsic_dev_state **selected_dev_state, struct btrfsic_dev_state **selected_dev_state,
struct btrfs_super_block *selected_super) struct btrfs_super_block *selected_super)
{ {
struct btrfs_fs_info *fs_info = state->fs_info;
struct btrfs_super_block *super_tmp; struct btrfs_super_block *super_tmp;
u64 dev_bytenr; u64 dev_bytenr;
struct buffer_head *bh; struct buffer_head *bh;
...@@ -832,7 +833,7 @@ static int btrfsic_process_superblock_dev_mirror( ...@@ -832,7 +833,7 @@ static int btrfsic_process_superblock_dev_mirror(
superblock_tmp->never_written = 0; superblock_tmp->never_written = 0;
superblock_tmp->mirror_num = 1 + superblock_mirror_num; superblock_tmp->mirror_num = 1 + superblock_mirror_num;
if (state->print_mask & BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE) if (state->print_mask & BTRFSIC_PRINT_MASK_SUPERBLOCK_WRITE)
btrfs_info_in_rcu(device->fs_info, btrfs_info_in_rcu(fs_info,
"new initial S-block (bdev %p, %s) @%llu (%s/%llu/%d)", "new initial S-block (bdev %p, %s) @%llu (%s/%llu/%d)",
superblock_bdev, superblock_bdev,
rcu_str_deref(device->name), dev_bytenr, rcu_str_deref(device->name), dev_bytenr,
...@@ -887,9 +888,8 @@ static int btrfsic_process_superblock_dev_mirror( ...@@ -887,9 +888,8 @@ static int btrfsic_process_superblock_dev_mirror(
break; break;
} }
num_copies = num_copies = btrfs_num_copies(fs_info, next_bytenr,
btrfs_num_copies(state->fs_info, state->metablock_size);
next_bytenr, state->metablock_size);
if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
pr_info("num_copies(log_bytenr=%llu) = %d\n", pr_info("num_copies(log_bytenr=%llu) = %d\n",
next_bytenr, num_copies); next_bytenr, num_copies);
...@@ -1254,6 +1254,7 @@ static int btrfsic_create_link_to_next_block( ...@@ -1254,6 +1254,7 @@ static int btrfsic_create_link_to_next_block(
struct btrfs_disk_key *disk_key, struct btrfs_disk_key *disk_key,
u64 parent_generation) u64 parent_generation)
{ {
struct btrfs_fs_info *fs_info = state->fs_info;
struct btrfsic_block *next_block = NULL; struct btrfsic_block *next_block = NULL;
int ret; int ret;
struct btrfsic_block_link *l; struct btrfsic_block_link *l;
...@@ -1262,9 +1263,8 @@ static int btrfsic_create_link_to_next_block( ...@@ -1262,9 +1263,8 @@ static int btrfsic_create_link_to_next_block(
*next_blockp = NULL; *next_blockp = NULL;
if (0 == *num_copiesp) { if (0 == *num_copiesp) {
*num_copiesp = *num_copiesp = btrfs_num_copies(fs_info, next_bytenr,
btrfs_num_copies(state->fs_info, state->metablock_size);
next_bytenr, state->metablock_size);
if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
pr_info("num_copies(log_bytenr=%llu) = %d\n", pr_info("num_copies(log_bytenr=%llu) = %d\n",
next_bytenr, *num_copiesp); next_bytenr, *num_copiesp);
...@@ -1390,13 +1390,14 @@ static int btrfsic_handle_extent_data( ...@@ -1390,13 +1390,14 @@ static int btrfsic_handle_extent_data(
struct btrfsic_block_data_ctx *block_ctx, struct btrfsic_block_data_ctx *block_ctx,
u32 item_offset, int force_iodone_flag) u32 item_offset, int force_iodone_flag)
{ {
int ret; struct btrfs_fs_info *fs_info = state->fs_info;
struct btrfs_file_extent_item file_extent_item; struct btrfs_file_extent_item file_extent_item;
u64 file_extent_item_offset; u64 file_extent_item_offset;
u64 next_bytenr; u64 next_bytenr;
u64 num_bytes; u64 num_bytes;
u64 generation; u64 generation;
struct btrfsic_block_link *l; struct btrfsic_block_link *l;
int ret;
file_extent_item_offset = offsetof(struct btrfs_leaf, items) + file_extent_item_offset = offsetof(struct btrfs_leaf, items) +
item_offset; item_offset;
...@@ -1456,9 +1457,8 @@ static int btrfsic_handle_extent_data( ...@@ -1456,9 +1457,8 @@ static int btrfsic_handle_extent_data(
else else
chunk_len = num_bytes; chunk_len = num_bytes;
num_copies = num_copies = btrfs_num_copies(fs_info, next_bytenr,
btrfs_num_copies(state->fs_info, state->datablock_size);
next_bytenr, state->datablock_size);
if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
pr_info("num_copies(log_bytenr=%llu) = %d\n", pr_info("num_copies(log_bytenr=%llu) = %d\n",
next_bytenr, num_copies); next_bytenr, num_copies);
...@@ -1533,13 +1533,14 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len, ...@@ -1533,13 +1533,14 @@ static int btrfsic_map_block(struct btrfsic_state *state, u64 bytenr, u32 len,
struct btrfsic_block_data_ctx *block_ctx_out, struct btrfsic_block_data_ctx *block_ctx_out,
int mirror_num) int mirror_num)
{ {
struct btrfs_fs_info *fs_info = state->fs_info;
int ret; int ret;
u64 length; u64 length;
struct btrfs_bio *multi = NULL; struct btrfs_bio *multi = NULL;
struct btrfs_device *device; struct btrfs_device *device;
length = len; length = len;
ret = btrfs_map_block(state->fs_info, BTRFS_MAP_READ, ret = btrfs_map_block(fs_info, BTRFS_MAP_READ,
bytenr, &length, &multi, mirror_num); bytenr, &length, &multi, mirror_num);
if (ret) { if (ret) {
...@@ -1731,6 +1732,7 @@ static void btrfsic_dump_database(struct btrfsic_state *state) ...@@ -1731,6 +1732,7 @@ static void btrfsic_dump_database(struct btrfsic_state *state)
static int btrfsic_test_for_metadata(struct btrfsic_state *state, static int btrfsic_test_for_metadata(struct btrfsic_state *state,
char **datav, unsigned int num_pages) char **datav, unsigned int num_pages)
{ {
struct btrfs_fs_info *fs_info = state->fs_info;
struct btrfs_header *h; struct btrfs_header *h;
u8 csum[BTRFS_CSUM_SIZE]; u8 csum[BTRFS_CSUM_SIZE];
u32 crc = ~(u32)0; u32 crc = ~(u32)0;
...@@ -1741,7 +1743,7 @@ static int btrfsic_test_for_metadata(struct btrfsic_state *state, ...@@ -1741,7 +1743,7 @@ static int btrfsic_test_for_metadata(struct btrfsic_state *state,
num_pages = state->metablock_size >> PAGE_SHIFT; num_pages = state->metablock_size >> PAGE_SHIFT;
h = (struct btrfs_header *)datav[0]; h = (struct btrfs_header *)datav[0];
if (memcmp(h->fsid, state->fs_info->fsid, BTRFS_UUID_SIZE)) if (memcmp(h->fsid, fs_info->fsid, BTRFS_UUID_SIZE))
return 1; return 1;
for (i = 0; i < num_pages; i++) { for (i = 0; i < num_pages; i++) {
...@@ -2202,6 +2204,7 @@ static int btrfsic_process_written_superblock( ...@@ -2202,6 +2204,7 @@ static int btrfsic_process_written_superblock(
struct btrfsic_block *const superblock, struct btrfsic_block *const superblock,
struct btrfs_super_block *const super_hdr) struct btrfs_super_block *const super_hdr)
{ {
struct btrfs_fs_info *fs_info = state->fs_info;
int pass; int pass;
superblock->generation = btrfs_super_generation(super_hdr); superblock->generation = btrfs_super_generation(super_hdr);
...@@ -2275,9 +2278,8 @@ static int btrfsic_process_written_superblock( ...@@ -2275,9 +2278,8 @@ static int btrfsic_process_written_superblock(
break; break;
} }
num_copies = num_copies = btrfs_num_copies(fs_info, next_bytenr,
btrfs_num_copies(state->fs_info, BTRFS_SUPER_INFO_SIZE);
next_bytenr, BTRFS_SUPER_INFO_SIZE);
if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES) if (state->print_mask & BTRFSIC_PRINT_MASK_NUM_COPIES)
pr_info("num_copies(log_bytenr=%llu) = %d\n", pr_info("num_copies(log_bytenr=%llu) = %d\n",
next_bytenr, num_copies); next_bytenr, num_copies);
...@@ -2699,14 +2701,14 @@ static void btrfsic_cmp_log_and_dev_bytenr(struct btrfsic_state *state, ...@@ -2699,14 +2701,14 @@ static void btrfsic_cmp_log_and_dev_bytenr(struct btrfsic_state *state,
struct btrfsic_dev_state *dev_state, struct btrfsic_dev_state *dev_state,
u64 dev_bytenr) u64 dev_bytenr)
{ {
struct btrfs_fs_info *fs_info = state->fs_info;
struct btrfsic_block_data_ctx block_ctx;
int num_copies; int num_copies;
int mirror_num; int mirror_num;
int ret;
struct btrfsic_block_data_ctx block_ctx;
int match = 0; int match = 0;
int ret;
num_copies = btrfs_num_copies(state->fs_info, num_copies = btrfs_num_copies(fs_info, bytenr, state->metablock_size);
bytenr, state->metablock_size);
for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) { for (mirror_num = 1; mirror_num <= num_copies; mirror_num++) {
ret = btrfsic_map_block(state, bytenr, state->metablock_size, ret = btrfsic_map_block(state, bytenr, state->metablock_size,
...@@ -2909,16 +2911,17 @@ int btrfsic_mount(struct btrfs_root *root, ...@@ -2909,16 +2911,17 @@ int btrfsic_mount(struct btrfs_root *root,
int ret; int ret;
struct btrfsic_state *state; struct btrfsic_state *state;
struct list_head *dev_head = &fs_devices->devices; struct list_head *dev_head = &fs_devices->devices;
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_device *device; struct btrfs_device *device;
if (root->fs_info->nodesize & ((u64)PAGE_SIZE - 1)) { if (fs_info->nodesize & ((u64)PAGE_SIZE - 1)) {
pr_info("btrfsic: cannot handle nodesize %d not being a multiple of PAGE_SIZE %ld!\n", pr_info("btrfsic: cannot handle nodesize %d not being a multiple of PAGE_SIZE %ld!\n",
root->fs_info->nodesize, PAGE_SIZE); fs_info->nodesize, PAGE_SIZE);
return -1; return -1;
} }
if (root->fs_info->sectorsize & ((u64)PAGE_SIZE - 1)) { if (fs_info->sectorsize & ((u64)PAGE_SIZE - 1)) {
pr_info("btrfsic: cannot handle sectorsize %d not being a multiple of PAGE_SIZE %ld!\n", pr_info("btrfsic: cannot handle sectorsize %d not being a multiple of PAGE_SIZE %ld!\n",
root->fs_info->sectorsize, PAGE_SIZE); fs_info->sectorsize, PAGE_SIZE);
return -1; return -1;
} }
state = kzalloc(sizeof(*state), GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT); state = kzalloc(sizeof(*state), GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT);
...@@ -2940,8 +2943,8 @@ int btrfsic_mount(struct btrfs_root *root, ...@@ -2940,8 +2943,8 @@ int btrfsic_mount(struct btrfs_root *root,
state->print_mask = print_mask; state->print_mask = print_mask;
state->include_extent_data = including_extent_data; state->include_extent_data = including_extent_data;
state->csum_size = 0; state->csum_size = 0;
state->metablock_size = root->fs_info->nodesize; state->metablock_size = fs_info->nodesize;
state->datablock_size = root->fs_info->sectorsize; state->datablock_size = fs_info->sectorsize;
INIT_LIST_HEAD(&state->all_blocks_list); INIT_LIST_HEAD(&state->all_blocks_list);
btrfsic_block_hashtable_init(&state->block_hashtable); btrfsic_block_hashtable_init(&state->block_hashtable);
btrfsic_block_link_hashtable_init(&state->block_link_hashtable); btrfsic_block_link_hashtable_init(&state->block_link_hashtable);
......
...@@ -88,10 +88,11 @@ static int btrfs_decompress_bio(int type, struct page **pages_in, ...@@ -88,10 +88,11 @@ static int btrfs_decompress_bio(int type, struct page **pages_in,
static inline int compressed_bio_size(struct btrfs_root *root, static inline int compressed_bio_size(struct btrfs_root *root,
unsigned long disk_size) unsigned long disk_size)
{ {
u16 csum_size = btrfs_super_csum_size(root->fs_info->super_copy); struct btrfs_fs_info *fs_info = root->fs_info;
u16 csum_size = btrfs_super_csum_size(fs_info->super_copy);
return sizeof(struct compressed_bio) + return sizeof(struct compressed_bio) +
(DIV_ROUND_UP(disk_size, root->fs_info->sectorsize)) * csum_size; (DIV_ROUND_UP(disk_size, fs_info->sectorsize)) * csum_size;
} }
static struct bio *compressed_bio_alloc(struct block_device *bdev, static struct bio *compressed_bio_alloc(struct block_device *bdev,
...@@ -328,6 +329,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start, ...@@ -328,6 +329,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
struct page **compressed_pages, struct page **compressed_pages,
unsigned long nr_pages) unsigned long nr_pages)
{ {
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct bio *bio = NULL; struct bio *bio = NULL;
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
struct compressed_bio *cb; struct compressed_bio *cb;
...@@ -355,7 +357,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start, ...@@ -355,7 +357,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
cb->orig_bio = NULL; cb->orig_bio = NULL;
cb->nr_pages = nr_pages; cb->nr_pages = nr_pages;
bdev = BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev; bdev = fs_info->fs_devices->latest_bdev;
bio = compressed_bio_alloc(bdev, first_byte, GFP_NOFS); bio = compressed_bio_alloc(bdev, first_byte, GFP_NOFS);
if (!bio) { if (!bio) {
...@@ -391,8 +393,8 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start, ...@@ -391,8 +393,8 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
* freed before we're done setting it up * freed before we're done setting it up
*/ */
atomic_inc(&cb->pending_bios); atomic_inc(&cb->pending_bios);
ret = btrfs_bio_wq_end_io(root->fs_info, bio, ret = btrfs_bio_wq_end_io(fs_info, bio,
BTRFS_WQ_ENDIO_DATA); BTRFS_WQ_ENDIO_DATA);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
if (!skip_sum) { if (!skip_sum) {
...@@ -417,7 +419,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start, ...@@ -417,7 +419,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
bio_add_page(bio, page, PAGE_SIZE, 0); bio_add_page(bio, page, PAGE_SIZE, 0);
} }
if (bytes_left < PAGE_SIZE) { if (bytes_left < PAGE_SIZE) {
btrfs_info(BTRFS_I(inode)->root->fs_info, btrfs_info(fs_info,
"bytes left %lu compress len %lu nr %lu", "bytes left %lu compress len %lu nr %lu",
bytes_left, cb->compressed_len, cb->nr_pages); bytes_left, cb->compressed_len, cb->nr_pages);
} }
...@@ -427,7 +429,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start, ...@@ -427,7 +429,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
} }
bio_get(bio); bio_get(bio);
ret = btrfs_bio_wq_end_io(root->fs_info, bio, BTRFS_WQ_ENDIO_DATA); ret = btrfs_bio_wq_end_io(fs_info, bio, BTRFS_WQ_ENDIO_DATA);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
if (!skip_sum) { if (!skip_sum) {
...@@ -575,6 +577,7 @@ static noinline int add_ra_bio_pages(struct inode *inode, ...@@ -575,6 +577,7 @@ static noinline int add_ra_bio_pages(struct inode *inode,
int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
int mirror_num, unsigned long bio_flags) int mirror_num, unsigned long bio_flags)
{ {
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct extent_io_tree *tree; struct extent_io_tree *tree;
struct extent_map_tree *em_tree; struct extent_map_tree *em_tree;
struct compressed_bio *cb; struct compressed_bio *cb;
...@@ -634,7 +637,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, ...@@ -634,7 +637,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
if (!cb->compressed_pages) if (!cb->compressed_pages)
goto fail1; goto fail1;
bdev = BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev; bdev = fs_info->fs_devices->latest_bdev;
for (pg_index = 0; pg_index < nr_pages; pg_index++) { for (pg_index = 0; pg_index < nr_pages; pg_index++) {
cb->compressed_pages[pg_index] = alloc_page(GFP_NOFS | cb->compressed_pages[pg_index] = alloc_page(GFP_NOFS |
...@@ -678,8 +681,8 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, ...@@ -678,8 +681,8 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
PAGE_SIZE) { PAGE_SIZE) {
bio_get(comp_bio); bio_get(comp_bio);
ret = btrfs_bio_wq_end_io(root->fs_info, comp_bio, ret = btrfs_bio_wq_end_io(fs_info, comp_bio,
BTRFS_WQ_ENDIO_DATA); BTRFS_WQ_ENDIO_DATA);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
/* /*
...@@ -696,7 +699,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, ...@@ -696,7 +699,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
} }
sums += DIV_ROUND_UP(comp_bio->bi_iter.bi_size, sums += DIV_ROUND_UP(comp_bio->bi_iter.bi_size,
root->fs_info->sectorsize); fs_info->sectorsize);
ret = btrfs_map_bio(root, comp_bio, mirror_num, 0); ret = btrfs_map_bio(root, comp_bio, mirror_num, 0);
if (ret) { if (ret) {
...@@ -719,8 +722,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, ...@@ -719,8 +722,7 @@ int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
} }
bio_get(comp_bio); bio_get(comp_bio);
ret = btrfs_bio_wq_end_io(root->fs_info, comp_bio, ret = btrfs_bio_wq_end_io(fs_info, comp_bio, BTRFS_WQ_ENDIO_DATA);
BTRFS_WQ_ENDIO_DATA);
BUG_ON(ret); /* -ENOMEM */ BUG_ON(ret); /* -ENOMEM */
if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) { if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
......
This diff is collapsed.
...@@ -1352,9 +1352,11 @@ static inline int ...@@ -1352,9 +1352,11 @@ static inline int
btrfs_should_fragment_free_space(struct btrfs_root *root, btrfs_should_fragment_free_space(struct btrfs_root *root,
struct btrfs_block_group_cache *block_group) struct btrfs_block_group_cache *block_group)
{ {
return (btrfs_test_opt(root->fs_info, FRAGMENT_METADATA) && struct btrfs_fs_info *fs_info = root->fs_info;
return (btrfs_test_opt(fs_info, FRAGMENT_METADATA) &&
block_group->flags & BTRFS_BLOCK_GROUP_METADATA) || block_group->flags & BTRFS_BLOCK_GROUP_METADATA) ||
(btrfs_test_opt(root->fs_info, FRAGMENT_DATA) && (btrfs_test_opt(fs_info, FRAGMENT_DATA) &&
block_group->flags & BTRFS_BLOCK_GROUP_DATA); block_group->flags & BTRFS_BLOCK_GROUP_DATA);
} }
#endif #endif
...@@ -2312,10 +2314,11 @@ static inline unsigned long btrfs_leaf_data(struct extent_buffer *l) ...@@ -2312,10 +2314,11 @@ static inline unsigned long btrfs_leaf_data(struct extent_buffer *l)
static inline unsigned int leaf_data_end(struct btrfs_root *root, static inline unsigned int leaf_data_end(struct btrfs_root *root,
struct extent_buffer *leaf) struct extent_buffer *leaf)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
u32 nr = btrfs_header_nritems(leaf); u32 nr = btrfs_header_nritems(leaf);
if (nr == 0) if (nr == 0)
return BTRFS_LEAF_DATA_SIZE(root->fs_info); return BTRFS_LEAF_DATA_SIZE(fs_info);
return btrfs_item_offset_nr(leaf, nr - 1); return btrfs_item_offset_nr(leaf, nr - 1);
} }
...@@ -2905,8 +2908,9 @@ static inline int btrfs_fs_closing(struct btrfs_fs_info *fs_info) ...@@ -2905,8 +2908,9 @@ static inline int btrfs_fs_closing(struct btrfs_fs_info *fs_info)
*/ */
static inline int btrfs_need_cleaner_sleep(struct btrfs_root *root) static inline int btrfs_need_cleaner_sleep(struct btrfs_root *root)
{ {
return (root->fs_info->sb->s_flags & MS_RDONLY || struct btrfs_fs_info *fs_info = root->fs_info;
btrfs_fs_closing(root->fs_info));
return (fs_info->sb->s_flags & MS_RDONLY || btrfs_fs_closing(fs_info));
} }
static inline void free_fs_info(struct btrfs_fs_info *fs_info) static inline void free_fs_info(struct btrfs_fs_info *fs_info)
......
...@@ -538,6 +538,7 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans, ...@@ -538,6 +538,7 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct btrfs_root *root,
struct btrfs_delayed_item *item) struct btrfs_delayed_item *item)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_block_rsv *src_rsv; struct btrfs_block_rsv *src_rsv;
struct btrfs_block_rsv *dst_rsv; struct btrfs_block_rsv *dst_rsv;
u64 num_bytes; u64 num_bytes;
...@@ -547,12 +548,12 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans, ...@@ -547,12 +548,12 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
return 0; return 0;
src_rsv = trans->block_rsv; src_rsv = trans->block_rsv;
dst_rsv = &root->fs_info->delayed_block_rsv; dst_rsv = &fs_info->delayed_block_rsv;
num_bytes = btrfs_calc_trans_metadata_size(root->fs_info, 1); num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1); ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
if (!ret) { if (!ret) {
trace_btrfs_space_reservation(root->fs_info, "delayed_item", trace_btrfs_space_reservation(fs_info, "delayed_item",
item->key.objectid, item->key.objectid,
num_bytes, 1); num_bytes, 1);
item->bytes_reserved = num_bytes; item->bytes_reserved = num_bytes;
...@@ -564,13 +565,14 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans, ...@@ -564,13 +565,14 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
static void btrfs_delayed_item_release_metadata(struct btrfs_root *root, static void btrfs_delayed_item_release_metadata(struct btrfs_root *root,
struct btrfs_delayed_item *item) struct btrfs_delayed_item *item)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_block_rsv *rsv; struct btrfs_block_rsv *rsv;
if (!item->bytes_reserved) if (!item->bytes_reserved)
return; return;
rsv = &root->fs_info->delayed_block_rsv; rsv = &fs_info->delayed_block_rsv;
trace_btrfs_space_reservation(root->fs_info, "delayed_item", trace_btrfs_space_reservation(fs_info, "delayed_item",
item->key.objectid, item->bytes_reserved, item->key.objectid, item->bytes_reserved,
0); 0);
btrfs_block_rsv_release(root, rsv, btrfs_block_rsv_release(root, rsv,
...@@ -583,6 +585,7 @@ static int btrfs_delayed_inode_reserve_metadata( ...@@ -583,6 +585,7 @@ static int btrfs_delayed_inode_reserve_metadata(
struct inode *inode, struct inode *inode,
struct btrfs_delayed_node *node) struct btrfs_delayed_node *node)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_block_rsv *src_rsv; struct btrfs_block_rsv *src_rsv;
struct btrfs_block_rsv *dst_rsv; struct btrfs_block_rsv *dst_rsv;
u64 num_bytes; u64 num_bytes;
...@@ -590,9 +593,9 @@ static int btrfs_delayed_inode_reserve_metadata( ...@@ -590,9 +593,9 @@ static int btrfs_delayed_inode_reserve_metadata(
bool release = false; bool release = false;
src_rsv = trans->block_rsv; src_rsv = trans->block_rsv;
dst_rsv = &root->fs_info->delayed_block_rsv; dst_rsv = &fs_info->delayed_block_rsv;
num_bytes = btrfs_calc_trans_metadata_size(root->fs_info, 1); num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
/* /*
* If our block_rsv is the delalloc block reserve then check and see if * If our block_rsv is the delalloc block reserve then check and see if
...@@ -640,7 +643,7 @@ static int btrfs_delayed_inode_reserve_metadata( ...@@ -640,7 +643,7 @@ static int btrfs_delayed_inode_reserve_metadata(
ret = -ENOSPC; ret = -ENOSPC;
if (!ret) { if (!ret) {
node->bytes_reserved = num_bytes; node->bytes_reserved = num_bytes;
trace_btrfs_space_reservation(root->fs_info, trace_btrfs_space_reservation(fs_info,
"delayed_inode", "delayed_inode",
btrfs_ino(inode), btrfs_ino(inode),
num_bytes, 1); num_bytes, 1);
...@@ -664,13 +667,13 @@ static int btrfs_delayed_inode_reserve_metadata( ...@@ -664,13 +667,13 @@ static int btrfs_delayed_inode_reserve_metadata(
* how block rsvs. work. * how block rsvs. work.
*/ */
if (!ret) { if (!ret) {
trace_btrfs_space_reservation(root->fs_info, "delayed_inode", trace_btrfs_space_reservation(fs_info, "delayed_inode",
btrfs_ino(inode), num_bytes, 1); btrfs_ino(inode), num_bytes, 1);
node->bytes_reserved = num_bytes; node->bytes_reserved = num_bytes;
} }
if (release) { if (release) {
trace_btrfs_space_reservation(root->fs_info, "delalloc", trace_btrfs_space_reservation(fs_info, "delalloc",
btrfs_ino(inode), num_bytes, 0); btrfs_ino(inode), num_bytes, 0);
btrfs_block_rsv_release(root, src_rsv, num_bytes); btrfs_block_rsv_release(root, src_rsv, num_bytes);
} }
...@@ -681,13 +684,14 @@ static int btrfs_delayed_inode_reserve_metadata( ...@@ -681,13 +684,14 @@ static int btrfs_delayed_inode_reserve_metadata(
static void btrfs_delayed_inode_release_metadata(struct btrfs_root *root, static void btrfs_delayed_inode_release_metadata(struct btrfs_root *root,
struct btrfs_delayed_node *node) struct btrfs_delayed_node *node)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_block_rsv *rsv; struct btrfs_block_rsv *rsv;
if (!node->bytes_reserved) if (!node->bytes_reserved)
return; return;
rsv = &root->fs_info->delayed_block_rsv; rsv = &fs_info->delayed_block_rsv;
trace_btrfs_space_reservation(root->fs_info, "delayed_inode", trace_btrfs_space_reservation(fs_info, "delayed_inode",
node->inode_id, node->bytes_reserved, 0); node->inode_id, node->bytes_reserved, 0);
btrfs_block_rsv_release(root, rsv, btrfs_block_rsv_release(root, rsv,
node->bytes_reserved); node->bytes_reserved);
...@@ -1140,6 +1144,7 @@ __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, ...@@ -1140,6 +1144,7 @@ __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans,
static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans, static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans,
struct btrfs_root *root, int nr) struct btrfs_root *root, int nr)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_delayed_root *delayed_root; struct btrfs_delayed_root *delayed_root;
struct btrfs_delayed_node *curr_node, *prev_node; struct btrfs_delayed_node *curr_node, *prev_node;
struct btrfs_path *path; struct btrfs_path *path;
...@@ -1156,7 +1161,7 @@ static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans, ...@@ -1156,7 +1161,7 @@ static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans,
path->leave_spinning = 1; path->leave_spinning = 1;
block_rsv = trans->block_rsv; block_rsv = trans->block_rsv;
trans->block_rsv = &root->fs_info->delayed_block_rsv; trans->block_rsv = &fs_info->delayed_block_rsv;
delayed_root = btrfs_get_delayed_root(root); delayed_root = btrfs_get_delayed_root(root);
...@@ -1860,6 +1865,7 @@ int btrfs_delayed_update_inode(struct btrfs_trans_handle *trans, ...@@ -1860,6 +1865,7 @@ int btrfs_delayed_update_inode(struct btrfs_trans_handle *trans,
int btrfs_delayed_delete_inode_ref(struct inode *inode) int btrfs_delayed_delete_inode_ref(struct inode *inode)
{ {
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_delayed_node *delayed_node; struct btrfs_delayed_node *delayed_node;
/* /*
...@@ -1867,8 +1873,7 @@ int btrfs_delayed_delete_inode_ref(struct inode *inode) ...@@ -1867,8 +1873,7 @@ int btrfs_delayed_delete_inode_ref(struct inode *inode)
* leads to enospc problems. This means we also can't do * leads to enospc problems. This means we also can't do
* delayed inode refs * delayed inode refs
*/ */
if (test_bit(BTRFS_FS_LOG_RECOVERING, if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags))
&BTRFS_I(inode)->root->fs_info->flags))
return -EAGAIN; return -EAGAIN;
delayed_node = btrfs_get_or_create_delayed_node(inode); delayed_node = btrfs_get_or_create_delayed_node(inode);
...@@ -1895,7 +1900,7 @@ int btrfs_delayed_delete_inode_ref(struct inode *inode) ...@@ -1895,7 +1900,7 @@ int btrfs_delayed_delete_inode_ref(struct inode *inode)
set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags); set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags);
delayed_node->count++; delayed_node->count++;
atomic_inc(&BTRFS_I(inode)->root->fs_info->delayed_root->items); atomic_inc(&fs_info->delayed_root->items);
release_node: release_node:
mutex_unlock(&delayed_node->mutex); mutex_unlock(&delayed_node->mutex);
btrfs_release_delayed_node(delayed_node); btrfs_release_delayed_node(delayed_node);
......
...@@ -142,7 +142,7 @@ int btrfs_init_dev_replace(struct btrfs_fs_info *fs_info) ...@@ -142,7 +142,7 @@ int btrfs_init_dev_replace(struct btrfs_fs_info *fs_info)
* missing * missing
*/ */
if (!dev_replace->srcdev && if (!dev_replace->srcdev &&
!btrfs_test_opt(dev_root->fs_info, DEGRADED)) { !btrfs_test_opt(fs_info, DEGRADED)) {
ret = -EIO; ret = -EIO;
btrfs_warn(fs_info, btrfs_warn(fs_info,
"cannot mount because device replace operation is ongoing and"); "cannot mount because device replace operation is ongoing and");
...@@ -151,7 +151,7 @@ int btrfs_init_dev_replace(struct btrfs_fs_info *fs_info) ...@@ -151,7 +151,7 @@ int btrfs_init_dev_replace(struct btrfs_fs_info *fs_info)
src_devid); src_devid);
} }
if (!dev_replace->tgtdev && if (!dev_replace->tgtdev &&
!btrfs_test_opt(dev_root->fs_info, DEGRADED)) { !btrfs_test_opt(fs_info, DEGRADED)) {
ret = -EIO; ret = -EIO;
btrfs_warn(fs_info, btrfs_warn(fs_info,
"cannot mount because device replace operation is ongoing and"); "cannot mount because device replace operation is ongoing and");
...@@ -387,7 +387,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, char *tgtdev_name, ...@@ -387,7 +387,7 @@ int btrfs_dev_replace_start(struct btrfs_root *root, char *tgtdev_name,
if (ret) if (ret)
btrfs_err(fs_info, "kobj add dev failed %d", ret); btrfs_err(fs_info, "kobj add dev failed %d", ret);
btrfs_wait_ordered_roots(root->fs_info, -1, 0, (u64)-1); btrfs_wait_ordered_roots(fs_info, -1, 0, (u64)-1);
/* force writing the updated state information to disk */ /* force writing the updated state information to disk */
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
...@@ -501,12 +501,12 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, ...@@ -501,12 +501,12 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
* flush all outstanding I/O and inode extent mappings before the * flush all outstanding I/O and inode extent mappings before the
* copy operation is declared as being finished * copy operation is declared as being finished
*/ */
ret = btrfs_start_delalloc_roots(root->fs_info, 0, -1); ret = btrfs_start_delalloc_roots(fs_info, 0, -1);
if (ret) { if (ret) {
mutex_unlock(&dev_replace->lock_finishing_cancel_unmount); mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
return ret; return ret;
} }
btrfs_wait_ordered_roots(root->fs_info, -1, 0, (u64)-1); btrfs_wait_ordered_roots(fs_info, -1, 0, (u64)-1);
trans = btrfs_start_transaction(root, 0); trans = btrfs_start_transaction(root, 0);
if (IS_ERR(trans)) { if (IS_ERR(trans)) {
...@@ -518,8 +518,8 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, ...@@ -518,8 +518,8 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
mutex_lock(&uuid_mutex); mutex_lock(&uuid_mutex);
/* keep away write_all_supers() during the finishing procedure */ /* keep away write_all_supers() during the finishing procedure */
mutex_lock(&root->fs_info->fs_devices->device_list_mutex); mutex_lock(&fs_info->fs_devices->device_list_mutex);
mutex_lock(&root->fs_info->chunk_mutex); mutex_lock(&fs_info->chunk_mutex);
btrfs_dev_replace_lock(dev_replace, 1); btrfs_dev_replace_lock(dev_replace, 1);
dev_replace->replace_state = dev_replace->replace_state =
scrub_ret ? BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED scrub_ret ? BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED
...@@ -535,15 +535,15 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, ...@@ -535,15 +535,15 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
src_device, src_device,
tgt_device); tgt_device);
} else { } else {
btrfs_err_in_rcu(root->fs_info, btrfs_err_in_rcu(fs_info,
"btrfs_scrub_dev(%s, %llu, %s) failed %d", "btrfs_scrub_dev(%s, %llu, %s) failed %d",
src_device->missing ? "<missing disk>" : src_device->missing ? "<missing disk>" :
rcu_str_deref(src_device->name), rcu_str_deref(src_device->name),
src_device->devid, src_device->devid,
rcu_str_deref(tgt_device->name), scrub_ret); rcu_str_deref(tgt_device->name), scrub_ret);
btrfs_dev_replace_unlock(dev_replace, 1); btrfs_dev_replace_unlock(dev_replace, 1);
mutex_unlock(&root->fs_info->chunk_mutex); mutex_unlock(&fs_info->chunk_mutex);
mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); mutex_unlock(&fs_info->fs_devices->device_list_mutex);
mutex_unlock(&uuid_mutex); mutex_unlock(&uuid_mutex);
if (tgt_device) if (tgt_device)
btrfs_destroy_dev_replace_tgtdev(fs_info, tgt_device); btrfs_destroy_dev_replace_tgtdev(fs_info, tgt_device);
...@@ -552,12 +552,12 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, ...@@ -552,12 +552,12 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
return scrub_ret; return scrub_ret;
} }
btrfs_info_in_rcu(root->fs_info, btrfs_info_in_rcu(fs_info,
"dev_replace from %s (devid %llu) to %s finished", "dev_replace from %s (devid %llu) to %s finished",
src_device->missing ? "<missing disk>" : src_device->missing ? "<missing disk>" :
rcu_str_deref(src_device->name), rcu_str_deref(src_device->name),
src_device->devid, src_device->devid,
rcu_str_deref(tgt_device->name)); rcu_str_deref(tgt_device->name));
tgt_device->is_tgtdev_for_dev_replace = 0; tgt_device->is_tgtdev_for_dev_replace = 0;
tgt_device->devid = src_device->devid; tgt_device->devid = src_device->devid;
src_device->devid = BTRFS_DEV_REPLACE_DEVID; src_device->devid = BTRFS_DEV_REPLACE_DEVID;
...@@ -592,8 +592,8 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info, ...@@ -592,8 +592,8 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
* superblock is scratched out so that it is no longer marked to * superblock is scratched out so that it is no longer marked to
* belong to this filesystem. * belong to this filesystem.
*/ */
mutex_unlock(&root->fs_info->chunk_mutex); mutex_unlock(&fs_info->chunk_mutex);
mutex_unlock(&root->fs_info->fs_devices->device_list_mutex); mutex_unlock(&fs_info->fs_devices->device_list_mutex);
mutex_unlock(&uuid_mutex); mutex_unlock(&uuid_mutex);
/* replace the sysfs entry */ /* replace the sysfs entry */
......
...@@ -451,12 +451,12 @@ int verify_dir_item(struct btrfs_root *root, ...@@ -451,12 +451,12 @@ int verify_dir_item(struct btrfs_root *root,
struct extent_buffer *leaf, struct extent_buffer *leaf,
struct btrfs_dir_item *dir_item) struct btrfs_dir_item *dir_item)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
u16 namelen = BTRFS_NAME_LEN; u16 namelen = BTRFS_NAME_LEN;
u8 type = btrfs_dir_type(leaf, dir_item); u8 type = btrfs_dir_type(leaf, dir_item);
if (type >= BTRFS_FT_MAX) { if (type >= BTRFS_FT_MAX) {
btrfs_crit(root->fs_info, "invalid dir item type: %d", btrfs_crit(fs_info, "invalid dir item type: %d", (int)type);
(int)type);
return 1; return 1;
} }
...@@ -464,16 +464,16 @@ int verify_dir_item(struct btrfs_root *root, ...@@ -464,16 +464,16 @@ int verify_dir_item(struct btrfs_root *root,
namelen = XATTR_NAME_MAX; namelen = XATTR_NAME_MAX;
if (btrfs_dir_name_len(leaf, dir_item) > namelen) { if (btrfs_dir_name_len(leaf, dir_item) > namelen) {
btrfs_crit(root->fs_info, "invalid dir item name len: %u", btrfs_crit(fs_info, "invalid dir item name len: %u",
(unsigned)btrfs_dir_data_len(leaf, dir_item)); (unsigned)btrfs_dir_data_len(leaf, dir_item));
return 1; return 1;
} }
/* BTRFS_MAX_XATTR_SIZE is the same for all dir items */ /* BTRFS_MAX_XATTR_SIZE is the same for all dir items */
if ((btrfs_dir_data_len(leaf, dir_item) + if ((btrfs_dir_data_len(leaf, dir_item) +
btrfs_dir_name_len(leaf, dir_item)) > BTRFS_MAX_XATTR_SIZE(root->fs_info)) { btrfs_dir_name_len(leaf, dir_item)) >
btrfs_crit(root->fs_info, BTRFS_MAX_XATTR_SIZE(fs_info)) {
"invalid dir item name + data len: %u + %u", btrfs_crit(fs_info, "invalid dir item name + data len: %u + %u",
(unsigned)btrfs_dir_name_len(leaf, dir_item), (unsigned)btrfs_dir_name_len(leaf, dir_item),
(unsigned)btrfs_dir_data_len(leaf, dir_item)); (unsigned)btrfs_dir_data_len(leaf, dir_item));
return 1; return 1;
......
This diff is collapsed.
...@@ -153,6 +153,7 @@ static struct dentry *btrfs_fh_to_dentry(struct super_block *sb, struct fid *fh, ...@@ -153,6 +153,7 @@ static struct dentry *btrfs_fh_to_dentry(struct super_block *sb, struct fid *fh,
static struct dentry *btrfs_get_parent(struct dentry *child) static struct dentry *btrfs_get_parent(struct dentry *child)
{ {
struct inode *dir = d_inode(child); struct inode *dir = d_inode(child);
struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
struct btrfs_root *root = BTRFS_I(dir)->root; struct btrfs_root *root = BTRFS_I(dir)->root;
struct btrfs_path *path; struct btrfs_path *path;
struct extent_buffer *leaf; struct extent_buffer *leaf;
...@@ -169,7 +170,7 @@ static struct dentry *btrfs_get_parent(struct dentry *child) ...@@ -169,7 +170,7 @@ static struct dentry *btrfs_get_parent(struct dentry *child)
key.objectid = root->root_key.objectid; key.objectid = root->root_key.objectid;
key.type = BTRFS_ROOT_BACKREF_KEY; key.type = BTRFS_ROOT_BACKREF_KEY;
key.offset = (u64)-1; key.offset = (u64)-1;
root = root->fs_info->tree_root; root = fs_info->tree_root;
} else { } else {
key.objectid = btrfs_ino(dir); key.objectid = btrfs_ino(dir);
key.type = BTRFS_INODE_REF_KEY; key.type = BTRFS_INODE_REF_KEY;
...@@ -205,13 +206,13 @@ static struct dentry *btrfs_get_parent(struct dentry *child) ...@@ -205,13 +206,13 @@ static struct dentry *btrfs_get_parent(struct dentry *child)
btrfs_free_path(path); btrfs_free_path(path);
if (found_key.type == BTRFS_ROOT_BACKREF_KEY) { if (found_key.type == BTRFS_ROOT_BACKREF_KEY) {
return btrfs_get_dentry(root->fs_info->sb, key.objectid, return btrfs_get_dentry(fs_info->sb, key.objectid,
found_key.offset, 0, 0); found_key.offset, 0, 0);
} }
key.type = BTRFS_INODE_ITEM_KEY; key.type = BTRFS_INODE_ITEM_KEY;
key.offset = 0; key.offset = 0;
return d_obtain_alias(btrfs_iget(root->fs_info->sb, &key, root, NULL)); return d_obtain_alias(btrfs_iget(fs_info->sb, &key, root, NULL));
fail: fail:
btrfs_free_path(path); btrfs_free_path(path);
return ERR_PTR(ret); return ERR_PTR(ret);
...@@ -222,6 +223,7 @@ static int btrfs_get_name(struct dentry *parent, char *name, ...@@ -222,6 +223,7 @@ static int btrfs_get_name(struct dentry *parent, char *name,
{ {
struct inode *inode = d_inode(child); struct inode *inode = d_inode(child);
struct inode *dir = d_inode(parent); struct inode *dir = d_inode(parent);
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_path *path; struct btrfs_path *path;
struct btrfs_root *root = BTRFS_I(dir)->root; struct btrfs_root *root = BTRFS_I(dir)->root;
struct btrfs_inode_ref *iref; struct btrfs_inode_ref *iref;
...@@ -250,7 +252,7 @@ static int btrfs_get_name(struct dentry *parent, char *name, ...@@ -250,7 +252,7 @@ static int btrfs_get_name(struct dentry *parent, char *name,
key.objectid = BTRFS_I(inode)->root->root_key.objectid; key.objectid = BTRFS_I(inode)->root->root_key.objectid;
key.type = BTRFS_ROOT_BACKREF_KEY; key.type = BTRFS_ROOT_BACKREF_KEY;
key.offset = (u64)-1; key.offset = (u64)-1;
root = root->fs_info->tree_root; root = fs_info->tree_root;
} else { } else {
key.objectid = ino; key.objectid = ino;
key.offset = btrfs_ino(dir); key.offset = btrfs_ino(dir);
......
This diff is collapsed.
...@@ -2070,17 +2070,18 @@ int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical, ...@@ -2070,17 +2070,18 @@ int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical,
int repair_eb_io_failure(struct btrfs_root *root, struct extent_buffer *eb, int repair_eb_io_failure(struct btrfs_root *root, struct extent_buffer *eb,
int mirror_num) int mirror_num)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
u64 start = eb->start; u64 start = eb->start;
unsigned long i, num_pages = num_extent_pages(eb->start, eb->len); unsigned long i, num_pages = num_extent_pages(eb->start, eb->len);
int ret = 0; int ret = 0;
if (root->fs_info->sb->s_flags & MS_RDONLY) if (fs_info->sb->s_flags & MS_RDONLY)
return -EROFS; return -EROFS;
for (i = 0; i < num_pages; i++) { for (i = 0; i < num_pages; i++) {
struct page *p = eb->pages[i]; struct page *p = eb->pages[i];
ret = repair_io_failure(root->fs_info->btree_inode, start, ret = repair_io_failure(fs_info->btree_inode, start,
PAGE_SIZE, start, p, PAGE_SIZE, start, p,
start - page_offset(p), mirror_num); start - page_offset(p), mirror_num);
if (ret) if (ret)
...@@ -2341,6 +2342,7 @@ struct bio *btrfs_create_repair_bio(struct inode *inode, struct bio *failed_bio, ...@@ -2341,6 +2342,7 @@ struct bio *btrfs_create_repair_bio(struct inode *inode, struct bio *failed_bio,
struct page *page, int pg_offset, int icsum, struct page *page, int pg_offset, int icsum,
bio_end_io_t *endio_func, void *data) bio_end_io_t *endio_func, void *data)
{ {
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct bio *bio; struct bio *bio;
struct btrfs_io_bio *btrfs_failed_bio; struct btrfs_io_bio *btrfs_failed_bio;
struct btrfs_io_bio *btrfs_bio; struct btrfs_io_bio *btrfs_bio;
...@@ -2351,13 +2353,12 @@ struct bio *btrfs_create_repair_bio(struct inode *inode, struct bio *failed_bio, ...@@ -2351,13 +2353,12 @@ struct bio *btrfs_create_repair_bio(struct inode *inode, struct bio *failed_bio,
bio->bi_end_io = endio_func; bio->bi_end_io = endio_func;
bio->bi_iter.bi_sector = failrec->logical >> 9; bio->bi_iter.bi_sector = failrec->logical >> 9;
bio->bi_bdev = BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev; bio->bi_bdev = fs_info->fs_devices->latest_bdev;
bio->bi_iter.bi_size = 0; bio->bi_iter.bi_size = 0;
bio->bi_private = data; bio->bi_private = data;
btrfs_failed_bio = btrfs_io_bio(failed_bio); btrfs_failed_bio = btrfs_io_bio(failed_bio);
if (btrfs_failed_bio->csum) { if (btrfs_failed_bio->csum) {
struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
u16 csum_size = btrfs_super_csum_size(fs_info->super_copy); u16 csum_size = btrfs_super_csum_size(fs_info->super_copy);
btrfs_bio = btrfs_io_bio(bio); btrfs_bio = btrfs_io_bio(bio);
...@@ -2476,6 +2477,8 @@ static void end_bio_extent_writepage(struct bio *bio) ...@@ -2476,6 +2477,8 @@ static void end_bio_extent_writepage(struct bio *bio)
bio_for_each_segment_all(bvec, bio, i) { bio_for_each_segment_all(bvec, bio, i) {
struct page *page = bvec->bv_page; struct page *page = bvec->bv_page;
struct inode *inode = page->mapping->host;
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
/* We always issue full-page reads, but if some block /* We always issue full-page reads, but if some block
* in a page fails to read, blk_update_request() will * in a page fails to read, blk_update_request() will
...@@ -2484,11 +2487,11 @@ static void end_bio_extent_writepage(struct bio *bio) ...@@ -2484,11 +2487,11 @@ static void end_bio_extent_writepage(struct bio *bio)
* if they don't add up to a full page. */ * if they don't add up to a full page. */
if (bvec->bv_offset || bvec->bv_len != PAGE_SIZE) { if (bvec->bv_offset || bvec->bv_len != PAGE_SIZE) {
if (bvec->bv_offset + bvec->bv_len != PAGE_SIZE) if (bvec->bv_offset + bvec->bv_len != PAGE_SIZE)
btrfs_err(BTRFS_I(page->mapping->host)->root->fs_info, btrfs_err(fs_info,
"partial page write in btrfs with offset %u and length %u", "partial page write in btrfs with offset %u and length %u",
bvec->bv_offset, bvec->bv_len); bvec->bv_offset, bvec->bv_len);
else else
btrfs_info(BTRFS_I(page->mapping->host)->root->fs_info, btrfs_info(fs_info,
"incomplete page write in btrfs with offset %u and length %u", "incomplete page write in btrfs with offset %u and length %u",
bvec->bv_offset, bvec->bv_len); bvec->bv_offset, bvec->bv_len);
} }
...@@ -5789,6 +5792,7 @@ static void copy_pages(struct page *dst_page, struct page *src_page, ...@@ -5789,6 +5792,7 @@ static void copy_pages(struct page *dst_page, struct page *src_page,
void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
unsigned long src_offset, unsigned long len) unsigned long src_offset, unsigned long len)
{ {
struct btrfs_fs_info *fs_info = dst->fs_info;
size_t cur; size_t cur;
size_t dst_off_in_page; size_t dst_off_in_page;
size_t src_off_in_page; size_t src_off_in_page;
...@@ -5797,13 +5801,13 @@ void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, ...@@ -5797,13 +5801,13 @@ void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
unsigned long src_i; unsigned long src_i;
if (src_offset + len > dst->len) { if (src_offset + len > dst->len) {
btrfs_err(dst->fs_info, btrfs_err(fs_info,
"memmove bogus src_offset %lu move len %lu dst len %lu", "memmove bogus src_offset %lu move len %lu dst len %lu",
src_offset, len, dst->len); src_offset, len, dst->len);
BUG_ON(1); BUG_ON(1);
} }
if (dst_offset + len > dst->len) { if (dst_offset + len > dst->len) {
btrfs_err(dst->fs_info, btrfs_err(fs_info,
"memmove bogus dst_offset %lu move len %lu dst len %lu", "memmove bogus dst_offset %lu move len %lu dst len %lu",
dst_offset, len, dst->len); dst_offset, len, dst->len);
BUG_ON(1); BUG_ON(1);
...@@ -5835,6 +5839,7 @@ void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, ...@@ -5835,6 +5839,7 @@ void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
unsigned long src_offset, unsigned long len) unsigned long src_offset, unsigned long len)
{ {
struct btrfs_fs_info *fs_info = dst->fs_info;
size_t cur; size_t cur;
size_t dst_off_in_page; size_t dst_off_in_page;
size_t src_off_in_page; size_t src_off_in_page;
...@@ -5845,13 +5850,13 @@ void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, ...@@ -5845,13 +5850,13 @@ void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
unsigned long src_i; unsigned long src_i;
if (src_offset + len > dst->len) { if (src_offset + len > dst->len) {
btrfs_err(dst->fs_info, btrfs_err(fs_info,
"memmove bogus src_offset %lu move len %lu len %lu", "memmove bogus src_offset %lu move len %lu len %lu",
src_offset, len, dst->len); src_offset, len, dst->len);
BUG_ON(1); BUG_ON(1);
} }
if (dst_offset + len > dst->len) { if (dst_offset + len > dst->len) {
btrfs_err(dst->fs_info, btrfs_err(fs_info,
"memmove bogus dst_offset %lu move len %lu len %lu", "memmove bogus dst_offset %lu move len %lu len %lu",
dst_offset, len, dst->len); dst_offset, len, dst->len);
BUG_ON(1); BUG_ON(1);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -189,7 +189,7 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans, ...@@ -189,7 +189,7 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
int ret; int ret;
bitmap_size = free_space_bitmap_size(block_group->key.offset, bitmap_size = free_space_bitmap_size(block_group->key.offset,
block_group->fs_info->sectorsize); fs_info->sectorsize);
bitmap = alloc_bitmap(bitmap_size); bitmap = alloc_bitmap(bitmap_size);
if (!bitmap) { if (!bitmap) {
ret = -ENOMEM; ret = -ENOMEM;
...@@ -227,9 +227,9 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans, ...@@ -227,9 +227,9 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
ASSERT(found_key.objectid + found_key.offset <= end); ASSERT(found_key.objectid + found_key.offset <= end);
first = div_u64(found_key.objectid - start, first = div_u64(found_key.objectid - start,
block_group->fs_info->sectorsize); fs_info->sectorsize);
last = div_u64(found_key.objectid + found_key.offset - start, last = div_u64(found_key.objectid + found_key.offset - start,
block_group->fs_info->sectorsize); fs_info->sectorsize);
le_bitmap_set(bitmap, first, last - first); le_bitmap_set(bitmap, first, last - first);
extent_count++; extent_count++;
...@@ -270,7 +270,7 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans, ...@@ -270,7 +270,7 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
} }
bitmap_cursor = bitmap; bitmap_cursor = bitmap;
bitmap_range = block_group->fs_info->sectorsize * BTRFS_FREE_SPACE_BITMAP_BITS; bitmap_range = fs_info->sectorsize * BTRFS_FREE_SPACE_BITMAP_BITS;
i = start; i = start;
while (i < end) { while (i < end) {
unsigned long ptr; unsigned long ptr;
...@@ -279,7 +279,7 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans, ...@@ -279,7 +279,7 @@ int convert_free_space_to_bitmaps(struct btrfs_trans_handle *trans,
extent_size = min(end - i, bitmap_range); extent_size = min(end - i, bitmap_range);
data_size = free_space_bitmap_size(extent_size, data_size = free_space_bitmap_size(extent_size,
block_group->fs_info->sectorsize); fs_info->sectorsize);
key.objectid = i; key.objectid = i;
key.type = BTRFS_FREE_SPACE_BITMAP_KEY; key.type = BTRFS_FREE_SPACE_BITMAP_KEY;
...@@ -330,7 +330,7 @@ int convert_free_space_to_extents(struct btrfs_trans_handle *trans, ...@@ -330,7 +330,7 @@ int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
int ret; int ret;
bitmap_size = free_space_bitmap_size(block_group->key.offset, bitmap_size = free_space_bitmap_size(block_group->key.offset,
block_group->fs_info->sectorsize); fs_info->sectorsize);
bitmap = alloc_bitmap(bitmap_size); bitmap = alloc_bitmap(bitmap_size);
if (!bitmap) { if (!bitmap) {
ret = -ENOMEM; ret = -ENOMEM;
...@@ -370,11 +370,11 @@ int convert_free_space_to_extents(struct btrfs_trans_handle *trans, ...@@ -370,11 +370,11 @@ int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
ASSERT(found_key.objectid + found_key.offset <= end); ASSERT(found_key.objectid + found_key.offset <= end);
bitmap_pos = div_u64(found_key.objectid - start, bitmap_pos = div_u64(found_key.objectid - start,
block_group->fs_info->sectorsize * fs_info->sectorsize *
BITS_PER_BYTE); BITS_PER_BYTE);
bitmap_cursor = bitmap + bitmap_pos; bitmap_cursor = bitmap + bitmap_pos;
data_size = free_space_bitmap_size(found_key.offset, data_size = free_space_bitmap_size(found_key.offset,
block_group->fs_info->sectorsize); fs_info->sectorsize);
ptr = btrfs_item_ptr_offset(leaf, path->slots[0] - 1); ptr = btrfs_item_ptr_offset(leaf, path->slots[0] - 1);
read_extent_buffer(leaf, bitmap_cursor, ptr, read_extent_buffer(leaf, bitmap_cursor, ptr,
...@@ -425,7 +425,7 @@ int convert_free_space_to_extents(struct btrfs_trans_handle *trans, ...@@ -425,7 +425,7 @@ int convert_free_space_to_extents(struct btrfs_trans_handle *trans,
extent_count++; extent_count++;
} }
prev_bit = bit; prev_bit = bit;
offset += block_group->fs_info->sectorsize; offset += fs_info->sectorsize;
bitnr++; bitnr++;
} }
if (prev_bit == 1) { if (prev_bit == 1) {
...@@ -526,6 +526,7 @@ static void free_space_set_bits(struct btrfs_block_group_cache *block_group, ...@@ -526,6 +526,7 @@ static void free_space_set_bits(struct btrfs_block_group_cache *block_group,
struct btrfs_path *path, u64 *start, u64 *size, struct btrfs_path *path, u64 *start, u64 *size,
int bit) int bit)
{ {
struct btrfs_fs_info *fs_info = block_group->fs_info;
struct extent_buffer *leaf; struct extent_buffer *leaf;
struct btrfs_key key; struct btrfs_key key;
u64 end = *start + *size; u64 end = *start + *size;
...@@ -545,10 +546,8 @@ static void free_space_set_bits(struct btrfs_block_group_cache *block_group, ...@@ -545,10 +546,8 @@ static void free_space_set_bits(struct btrfs_block_group_cache *block_group,
end = found_end; end = found_end;
ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
first = div_u64(*start - found_start, first = div_u64(*start - found_start, fs_info->sectorsize);
block_group->fs_info->sectorsize); last = div_u64(end - found_start, fs_info->sectorsize);
last = div_u64(end - found_start,
block_group->fs_info->sectorsize);
if (bit) if (bit)
extent_buffer_bitmap_set(leaf, ptr, first, last - first); extent_buffer_bitmap_set(leaf, ptr, first, last - first);
else else
...@@ -1270,7 +1269,7 @@ int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info) ...@@ -1270,7 +1269,7 @@ int btrfs_clear_free_space_tree(struct btrfs_fs_info *fs_info)
list_del(&free_space_root->dirty_list); list_del(&free_space_root->dirty_list);
btrfs_tree_lock(free_space_root->node); btrfs_tree_lock(free_space_root->node);
clean_tree_block(trans, tree_root->fs_info, free_space_root->node); clean_tree_block(trans, fs_info, free_space_root->node);
btrfs_tree_unlock(free_space_root->node); btrfs_tree_unlock(free_space_root->node);
btrfs_free_tree_block(trans, free_space_root, free_space_root->node, btrfs_free_tree_block(trans, free_space_root, free_space_root->node,
0, 1); 0, 1);
...@@ -1476,7 +1475,7 @@ static int load_free_space_bitmaps(struct btrfs_caching_control *caching_ctl, ...@@ -1476,7 +1475,7 @@ static int load_free_space_bitmaps(struct btrfs_caching_control *caching_ctl,
extent_count++; extent_count++;
} }
prev_bit = bit; prev_bit = bit;
offset += block_group->fs_info->sectorsize; offset += fs_info->sectorsize;
} }
} }
if (prev_bit == 1) { if (prev_bit == 1) {
......
...@@ -328,6 +328,7 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans, ...@@ -328,6 +328,7 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
const char *name, int name_len, const char *name, int name_len,
u64 inode_objectid, u64 ref_objectid, u64 index) u64 inode_objectid, u64 ref_objectid, u64 index)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_path *path; struct btrfs_path *path;
struct btrfs_key key; struct btrfs_key key;
struct btrfs_inode_ref *ref; struct btrfs_inode_ref *ref;
...@@ -384,7 +385,7 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans, ...@@ -384,7 +385,7 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
btrfs_free_path(path); btrfs_free_path(path);
if (ret == -EMLINK) { if (ret == -EMLINK) {
struct btrfs_super_block *disk_super = root->fs_info->super_copy; struct btrfs_super_block *disk_super = fs_info->super_copy;
/* We ran out of space in the ref array. Need to /* We ran out of space in the ref array. Need to
* add an extended ref. */ * add an extended ref. */
if (btrfs_super_incompat_flags(disk_super) if (btrfs_super_incompat_flags(disk_super)
......
...@@ -38,7 +38,7 @@ static int caching_kthread(void *data) ...@@ -38,7 +38,7 @@ static int caching_kthread(void *data)
int slot; int slot;
int ret; int ret;
if (!btrfs_test_opt(root->fs_info, INODE_MAP_CACHE)) if (!btrfs_test_opt(fs_info, INODE_MAP_CACHE))
return 0; return 0;
path = btrfs_alloc_path(); path = btrfs_alloc_path();
...@@ -180,7 +180,7 @@ static void start_caching(struct btrfs_root *root) ...@@ -180,7 +180,7 @@ static void start_caching(struct btrfs_root *root)
if (IS_ERR(tsk)) { if (IS_ERR(tsk)) {
btrfs_warn(fs_info, "failed to start inode caching task"); btrfs_warn(fs_info, "failed to start inode caching task");
btrfs_clear_pending_and_info(fs_info, INODE_MAP_CACHE, btrfs_clear_pending_and_info(fs_info, INODE_MAP_CACHE,
"disabling inode map caching"); "disabling inode map caching");
} }
} }
...@@ -395,6 +395,7 @@ void btrfs_init_free_ino_ctl(struct btrfs_root *root) ...@@ -395,6 +395,7 @@ void btrfs_init_free_ino_ctl(struct btrfs_root *root)
int btrfs_save_ino_cache(struct btrfs_root *root, int btrfs_save_ino_cache(struct btrfs_root *root,
struct btrfs_trans_handle *trans) struct btrfs_trans_handle *trans)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_free_space_ctl *ctl = root->free_ino_ctl; struct btrfs_free_space_ctl *ctl = root->free_ino_ctl;
struct btrfs_path *path; struct btrfs_path *path;
struct inode *inode; struct inode *inode;
...@@ -415,7 +416,7 @@ int btrfs_save_ino_cache(struct btrfs_root *root, ...@@ -415,7 +416,7 @@ int btrfs_save_ino_cache(struct btrfs_root *root,
if (btrfs_root_refs(&root->root_item) == 0) if (btrfs_root_refs(&root->root_item) == 0)
return 0; return 0;
if (!btrfs_test_opt(root->fs_info, INODE_MAP_CACHE)) if (!btrfs_test_opt(fs_info, INODE_MAP_CACHE))
return 0; return 0;
path = btrfs_alloc_path(); path = btrfs_alloc_path();
...@@ -423,7 +424,7 @@ int btrfs_save_ino_cache(struct btrfs_root *root, ...@@ -423,7 +424,7 @@ int btrfs_save_ino_cache(struct btrfs_root *root,
return -ENOMEM; return -ENOMEM;
rsv = trans->block_rsv; rsv = trans->block_rsv;
trans->block_rsv = &root->fs_info->trans_block_rsv; trans->block_rsv = &fs_info->trans_block_rsv;
num_bytes = trans->bytes_reserved; num_bytes = trans->bytes_reserved;
/* /*
...@@ -433,15 +434,14 @@ int btrfs_save_ino_cache(struct btrfs_root *root, ...@@ -433,15 +434,14 @@ int btrfs_save_ino_cache(struct btrfs_root *root,
* 1 item for free space object * 1 item for free space object
* 3 items for pre-allocation * 3 items for pre-allocation
*/ */
trans->bytes_reserved = btrfs_calc_trans_metadata_size(root->fs_info, trans->bytes_reserved = btrfs_calc_trans_metadata_size(fs_info, 10);
10);
ret = btrfs_block_rsv_add(root, trans->block_rsv, ret = btrfs_block_rsv_add(root, trans->block_rsv,
trans->bytes_reserved, trans->bytes_reserved,
BTRFS_RESERVE_NO_FLUSH); BTRFS_RESERVE_NO_FLUSH);
if (ret) if (ret)
goto out; goto out;
trace_btrfs_space_reservation(root->fs_info, "ino_cache", trace_btrfs_space_reservation(fs_info, "ino_cache", trans->transid,
trans->transid, trans->bytes_reserved, 1); trans->bytes_reserved, 1);
again: again:
inode = lookup_free_ino_inode(root, path); inode = lookup_free_ino_inode(root, path);
if (IS_ERR(inode) && (PTR_ERR(inode) != -ENOENT || retry)) { if (IS_ERR(inode) && (PTR_ERR(inode) != -ENOENT || retry)) {
...@@ -507,8 +507,8 @@ int btrfs_save_ino_cache(struct btrfs_root *root, ...@@ -507,8 +507,8 @@ int btrfs_save_ino_cache(struct btrfs_root *root,
out_put: out_put:
iput(inode); iput(inode);
out_release: out_release:
trace_btrfs_space_reservation(root->fs_info, "ino_cache", trace_btrfs_space_reservation(fs_info, "ino_cache", trans->transid,
trans->transid, trans->bytes_reserved, 0); trans->bytes_reserved, 0);
btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved); btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved);
out: out:
trans->block_rsv = rsv; trans->block_rsv = rsv;
......
This diff is collapsed.
This diff is collapsed.
...@@ -186,6 +186,7 @@ static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset, ...@@ -186,6 +186,7 @@ static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
u64 start, u64 len, u64 disk_len, u64 start, u64 len, u64 disk_len,
int type, int dio, int compress_type) int type, int dio, int compress_type)
{ {
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
struct btrfs_ordered_inode_tree *tree; struct btrfs_ordered_inode_tree *tree;
struct rb_node *node; struct rb_node *node;
...@@ -234,11 +235,10 @@ static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset, ...@@ -234,11 +235,10 @@ static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
&root->ordered_extents); &root->ordered_extents);
root->nr_ordered_extents++; root->nr_ordered_extents++;
if (root->nr_ordered_extents == 1) { if (root->nr_ordered_extents == 1) {
spin_lock(&root->fs_info->ordered_root_lock); spin_lock(&fs_info->ordered_root_lock);
BUG_ON(!list_empty(&root->ordered_root)); BUG_ON(!list_empty(&root->ordered_root));
list_add_tail(&root->ordered_root, list_add_tail(&root->ordered_root, &fs_info->ordered_roots);
&root->fs_info->ordered_roots); spin_unlock(&fs_info->ordered_root_lock);
spin_unlock(&root->fs_info->ordered_root_lock);
} }
spin_unlock(&root->ordered_extent_lock); spin_unlock(&root->ordered_extent_lock);
...@@ -303,6 +303,7 @@ int btrfs_dec_test_first_ordered_pending(struct inode *inode, ...@@ -303,6 +303,7 @@ int btrfs_dec_test_first_ordered_pending(struct inode *inode,
struct btrfs_ordered_extent **cached, struct btrfs_ordered_extent **cached,
u64 *file_offset, u64 io_size, int uptodate) u64 *file_offset, u64 io_size, int uptodate)
{ {
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_ordered_inode_tree *tree; struct btrfs_ordered_inode_tree *tree;
struct rb_node *node; struct rb_node *node;
struct btrfs_ordered_extent *entry = NULL; struct btrfs_ordered_extent *entry = NULL;
...@@ -331,14 +332,14 @@ int btrfs_dec_test_first_ordered_pending(struct inode *inode, ...@@ -331,14 +332,14 @@ int btrfs_dec_test_first_ordered_pending(struct inode *inode,
entry->len); entry->len);
*file_offset = dec_end; *file_offset = dec_end;
if (dec_start > dec_end) { if (dec_start > dec_end) {
btrfs_crit(BTRFS_I(inode)->root->fs_info, btrfs_crit(fs_info, "bad ordering dec_start %llu end %llu",
"bad ordering dec_start %llu end %llu", dec_start, dec_end); dec_start, dec_end);
} }
to_dec = dec_end - dec_start; to_dec = dec_end - dec_start;
if (to_dec > entry->bytes_left) { if (to_dec > entry->bytes_left) {
btrfs_crit(BTRFS_I(inode)->root->fs_info, btrfs_crit(fs_info,
"bad ordered accounting left %llu size %llu", "bad ordered accounting left %llu size %llu",
entry->bytes_left, to_dec); entry->bytes_left, to_dec);
} }
entry->bytes_left -= to_dec; entry->bytes_left -= to_dec;
if (!uptodate) if (!uptodate)
...@@ -588,6 +589,7 @@ void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry) ...@@ -588,6 +589,7 @@ void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry)
void btrfs_remove_ordered_extent(struct inode *inode, void btrfs_remove_ordered_extent(struct inode *inode,
struct btrfs_ordered_extent *entry) struct btrfs_ordered_extent *entry)
{ {
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
struct btrfs_ordered_inode_tree *tree; struct btrfs_ordered_inode_tree *tree;
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
struct rb_node *node; struct rb_node *node;
...@@ -618,11 +620,11 @@ void btrfs_remove_ordered_extent(struct inode *inode, ...@@ -618,11 +620,11 @@ void btrfs_remove_ordered_extent(struct inode *inode,
* lock, so be nice and check if trans is set, but ASSERT() so * lock, so be nice and check if trans is set, but ASSERT() so
* if it isn't set a developer will notice. * if it isn't set a developer will notice.
*/ */
spin_lock(&root->fs_info->trans_lock); spin_lock(&fs_info->trans_lock);
trans = root->fs_info->running_transaction; trans = fs_info->running_transaction;
if (trans) if (trans)
atomic_inc(&trans->use_count); atomic_inc(&trans->use_count);
spin_unlock(&root->fs_info->trans_lock); spin_unlock(&fs_info->trans_lock);
ASSERT(trans); ASSERT(trans);
if (trans) { if (trans) {
...@@ -639,10 +641,10 @@ void btrfs_remove_ordered_extent(struct inode *inode, ...@@ -639,10 +641,10 @@ void btrfs_remove_ordered_extent(struct inode *inode,
trace_btrfs_ordered_extent_remove(inode, entry); trace_btrfs_ordered_extent_remove(inode, entry);
if (!root->nr_ordered_extents) { if (!root->nr_ordered_extents) {
spin_lock(&root->fs_info->ordered_root_lock); spin_lock(&fs_info->ordered_root_lock);
BUG_ON(list_empty(&root->ordered_root)); BUG_ON(list_empty(&root->ordered_root));
list_del_init(&root->ordered_root); list_del_init(&root->ordered_root);
spin_unlock(&root->fs_info->ordered_root_lock); spin_unlock(&fs_info->ordered_root_lock);
} }
spin_unlock(&root->ordered_extent_lock); spin_unlock(&root->ordered_extent_lock);
wake_up(&entry->wait); wake_up(&entry->wait);
...@@ -664,6 +666,7 @@ static void btrfs_run_ordered_extent_work(struct btrfs_work *work) ...@@ -664,6 +666,7 @@ static void btrfs_run_ordered_extent_work(struct btrfs_work *work)
int btrfs_wait_ordered_extents(struct btrfs_root *root, int nr, int btrfs_wait_ordered_extents(struct btrfs_root *root, int nr,
const u64 range_start, const u64 range_len) const u64 range_start, const u64 range_len)
{ {
struct btrfs_fs_info *fs_info = root->fs_info;
LIST_HEAD(splice); LIST_HEAD(splice);
LIST_HEAD(skipped); LIST_HEAD(skipped);
LIST_HEAD(works); LIST_HEAD(works);
...@@ -694,8 +697,7 @@ int btrfs_wait_ordered_extents(struct btrfs_root *root, int nr, ...@@ -694,8 +697,7 @@ int btrfs_wait_ordered_extents(struct btrfs_root *root, int nr,
btrfs_flush_delalloc_helper, btrfs_flush_delalloc_helper,
btrfs_run_ordered_extent_work, NULL, NULL); btrfs_run_ordered_extent_work, NULL, NULL);
list_add_tail(&ordered->work_list, &works); list_add_tail(&ordered->work_list, &works);
btrfs_queue_work(root->fs_info->flush_workers, btrfs_queue_work(fs_info->flush_workers, &ordered->flush_work);
&ordered->flush_work);
cond_resched(); cond_resched();
spin_lock(&root->ordered_extent_lock); spin_lock(&root->ordered_extent_lock);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment