Btrfs: cleanups for 4.5, part 2
David Sterba
maintainerHi,
a handful of cleanups. Geliang Tang's patch is a fixup to his list iterator cleanup, Jeff's patch has been posted long time ago. Please pull to 4.5.
----------------------------------------------------------------
The following changes since commit a7ca42256d9fad572fb7f2c471514d7d3572b1db:
btrfs: use list_for_each_entry* in backref.c (2016-01-07 14:42:46 +0100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git misc-cleanups-4.5
for you to fetch changes up to fb75d857a31d600cc0c37b8c7d914014f7fa3f9a:
btrfs: remove duplicate const specifier (2016-01-19 10:33:56 +0100)
----------------------------------------------------------------
Colin Ian King (1):
btrfs: remove duplicate const specifier
Dan Carpenter (1):
Btrfs: clean up an error code in btrfs_init_space_info()
Geliang Tang (1):
btrfs: fix iterator with update error in backref.c
Jeff Mahoney (1):
btrfs: cleanup, stop casting for extent_map->lookup everywhere
fs/btrfs/backref.c | 10 +++++----- fs/btrfs/dev-replace.c | 2 +- fs/btrfs/extent-tree.c | 4 ++-- fs/btrfs/extent_map.c | 2 +- fs/btrfs/extent_map.h | 10 +++++++++- fs/btrfs/scrub.c | 2 +- fs/btrfs/volumes.c | 26 +++++++++++++------------- 7 files changed, 32 insertions(+), 24 deletions(-)
Signature · 1 line
2.6.3
David Sterba
maintainerPATCH 1/4 btrfs: cleanup, stop casting for extent_map->lookup everywhere
From: Jeff Mahoney <[email protected]>
Overloading extent_map->bdev to struct map_lookup * might have started out as a means to an end, but it's a pattern that's used all over the place now. Let's get rid of the casting and just add a union instead.
--- fs/btrfs/dev-replace.c | 2 +- fs/btrfs/extent-tree.c | 2 +- fs/btrfs/extent_map.c | 2 +- fs/btrfs/extent_map.h | 10 +++++++++- fs/btrfs/scrub.c | 2 +- fs/btrfs/volumes.c | 24 ++++++++++++------------ 6 files changed, 25 insertions(+), 17 deletions(-)
fs/btrfs/dev-replace.c +1 -1
@@ -614,7 +614,7 @@ static void btrfs_dev_replace_update_device_in_mapping_tree( em =lookup_extent_mapping (em_tree, start, (u64)-1 );if (!em)break ; - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;for (i =0 ; i < map->num_stripes; i++)if (srcdev == map->stripes[i].dev) map->stripes[i].dev = tgtdev;
fs/btrfs/extent-tree.c +1 -1
@@ -10322,7 +10322,7 @@ btrfs_start_trans_remove_block_group(struct btrfs_fs_info *fs_info,* more device items and remove one chunk item), but this is done at * btrfs_remove_chunk() through a call to check_system_chunk(). */ - map = (struct map_lookup *)em->bdev; + map = em->map_lookup; num_items =3 + map->num_stripes;free_extent_map (em);
fs/btrfs/extent_map.c +1 -1
@@ -76,7 +76,7 @@ void free_extent_map(struct extent_map *em)WARN_ON (extent_map_in_tree (em));WARN_ON (!list_empty (&em->list));if (test_bit (EXTENT_FLAG_FS_MAPPING , &em->flags)) -kfree (em->bdev); +kfree (em->map_lookup);kmem_cache_free (extent_map_cache, em); } }
fs/btrfs/extent_map.h +9 -1
@@ -32,7 +32,15 @@ struct extent_map {u64 block_len;u64 generation;unsigned long flags; -struct block_device *bdev; +union { +struct block_device *bdev; + +/* +* used for chunk mappings +* flags & EXTENT_FLAG_FS_MAPPING must be set +*/ +struct map_lookup *map_lookup; + };atomic_t refs;unsigned int compress_type;struct list_head list;
fs/btrfs/scrub.c +1 -1
@@ -3458,7 +3458,7 @@ static noinline_for_stack int scrub_chunk(struct scrub_ctx *sctx,return ret; } - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;if (em->start != chunk_offset) goto out;
fs/btrfs/volumes.c +12 -12
@@ -1182,7 +1182,7 @@ static int contains_pending_extent(struct btrfs_transaction *transaction,struct map_lookup *map;int i; - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;for (i =0 ; i < map->num_stripes; i++) {u64 end;
@@ -2754,7 +2754,7 @@ int btrfs_remove_chunk(struct btrfs_trans_handle *trans,free_extent_map (em);return -EINVAL ; } - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;lock_chunks (root->fs_info->chunk_root);check_system_chunk (trans, extent_root, map->type);unlock_chunks (root->fs_info->chunk_root);
@@ -4718,7 +4718,7 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans, goto error; }set_bit (EXTENT_FLAG_FS_MAPPING , &em->flags); - em->bdev = (struct block_device *)map; + em->map_lookup = map; em->start = start; em->len = num_bytes; em->block_start =0 ;
@@ -4813,7 +4813,7 @@ int btrfs_finish_chunk_alloc(struct btrfs_trans_handle *trans,return -EINVAL ; } - map = (struct map_lookup *)em->bdev; + map = em->map_lookup; item_size =btrfs_chunk_item_size (map->num_stripes); stripe_size = em->orig_block_len;
@@ -4955,7 +4955,7 @@ int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset)if (!em)return 1 ; - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;for (i =0 ; i < map->num_stripes; i++) {if (map->stripes[i].dev->missing) { miss_ndevs++;
@@ -5035,7 +5035,7 @@ int btrfs_num_copies(struct btrfs_fs_info *fs_info, u64 logical, u64 len)return 1 ; } - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;if (map->type & (BTRFS_BLOCK_GROUP_DUP |BTRFS_BLOCK_GROUP_RAID1 )) ret = map->num_stripes;else if (map->type &BTRFS_BLOCK_GROUP_RAID10 )
@@ -5071,7 +5071,7 @@ unsigned long btrfs_full_stripe_len(struct btrfs_root *root,BUG_ON (!em);BUG_ON (em->start > logical || em->start + em->len < logical); - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;if (map->type &BTRFS_BLOCK_GROUP_RAID56_MASK ) len = map->stripe_len *nr_data_stripes (map);free_extent_map (em);
@@ -5092,7 +5092,7 @@ int btrfs_is_parity_mirror(struct btrfs_mapping_tree *map_tree,BUG_ON (!em);BUG_ON (em->start > logical || em->start + em->len < logical); - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;if (map->type &BTRFS_BLOCK_GROUP_RAID56_MASK ) ret =1 ;free_extent_map (em);
@@ -5251,7 +5251,7 @@ static int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw,return -EINVAL ; } - map = (struct map_lookup *)em->bdev; + map = em->map_lookup; offset = logical - em->start; stripe_len = map->stripe_len;
@@ -5793,7 +5793,7 @@ int btrfs_rmap_block(struct btrfs_mapping_tree *map_tree,free_extent_map (em);return -EIO ; } - map = (struct map_lookup *)em->bdev; + map = em->map_lookup; length = em->len; rmap_len = map->stripe_len;
@@ -6229,7 +6229,7 @@ static int read_one_chunk(struct btrfs_root *root, struct btrfs_key *key, }set_bit (EXTENT_FLAG_FS_MAPPING , &em->flags); - em->bdev = (struct block_device *)map; + em->map_lookup = map; em->start = logical; em->len = length; em->orig_start =0 ;
@@ -6920,7 +6920,7 @@ void btrfs_update_commit_device_bytes_used(struct btrfs_root *root,/* In order to kick the device replace finish process */ lock_chunks (root);list_for_each_entry (em, &transaction->pending_chunks, list) { - map = (struct map_lookup *)em->bdev; + map = em->map_lookup;for (i =0 ; i < map->num_stripes; i++) { dev = map->stripes[i].dev;
Signature · 1 line
2.6.3
David Sterba
maintainerPATCH 2/4 btrfs: fix iterator with update error in backref.c
In reply to David SterbaFrom: Geliang Tang <[email protected]>
Fix the following error:
fs/btrfs/backref.c:565:1-20: iterator with update on line 577
--- fs/btrfs/backref.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
fs/btrfs/backref.c +5 -5
@@ -560,13 +560,13 @@ static int __add_missing_keys(struct btrfs_fs_info *fs_info,*/ static void __merge_refs (struct list_head *head,int mode) { -struct __prelim_ref *ref1; +struct __prelim_ref *pos1; -list_for_each_entry (ref1, head, list) { -struct __prelim_ref *ref2 = ref1, *tmp; +list_for_each_entry (pos1, head, list) { +struct __prelim_ref *pos2 = pos1, *tmp; -list_for_each_entry_safe_continue (ref2, tmp, head, list) { -struct __prelim_ref *xchg; +list_for_each_entry_safe_continue (pos2, tmp, head, list) { +struct __prelim_ref *xchg, *ref1 = pos1, *ref2 = pos2;struct extent_inode_elem *eie;if (!ref_for_same_block (ref1, ref2))
Signature · 1 line
2.6.3
David Sterba
maintainerPATCH 3/4 Btrfs: clean up an error code in btrfs_init_space_info()
In reply to David SterbaFrom: Dan Carpenter <[email protected]>
If we return 1 here, then the caller treats it as an error and returns -EINVAL. It causes a static checker warning to treat positive returns as an error.
--- fs/btrfs/extent-tree.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/extent-tree.c +1 -1
@@ -10509,7 +10509,7 @@ int btrfs_init_space_info(struct btrfs_fs_info *fs_info) disk_super = fs_info->super_copy;if (!btrfs_super_root (disk_super)) -return 1 ; +return -EINVAL ; features =btrfs_super_incompat_flags (disk_super);if (features &BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS )
Signature · 1 line
2.6.3
David Sterba
maintainerPATCH 4/4 btrfs: remove duplicate const specifier
In reply to David SterbaFrom: Colin Ian King <[email protected]>
duplicate const is redundant so remove it
--- fs/btrfs/volumes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/volumes.c +1 -1
@@ -108,7 +108,7 @@ const struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = { }, }; -const u64 const btrfs_raid_group[BTRFS_NR_RAID_TYPES ] = { +const u64 btrfs_raid_group[BTRFS_NR_RAID_TYPES ] = { [BTRFS_RAID_RAID10 ] =BTRFS_BLOCK_GROUP_RAID10 , [BTRFS_RAID_RAID1 ] =BTRFS_BLOCK_GROUP_RAID1 , [BTRFS_RAID_DUP ] =BTRFS_BLOCK_GROUP_DUP ,
Signature · 1 line
2.6.3