btrfs: remove dead create_space_info calls
Since commit2be12ef79
(btrfs: Separate space_info create/update), we've separated out the creation and updating of the space info structures. That commit was a straightforward refactoring of the two parts of update_space_info, but we can go a step further. Since commitsc59021f84
(Btrfs: fix OOPS of empty filesystem after balance) andb742bb82f
(Btrfs: Link block groups of different raid types), we know that the space_info structures will be created at mount and there will only ever be, at most, three of them. This patch cleans out the create_space_info calls after __find_space_info returns NULL since __find_space_info *can't* return NULL. The initial cause for reviewing this was the kobject_add calls from create_space_info occuring in sites where fs-reclaim wasn't allowed. Now we are certain they occur only early in the mount process and are safe. Signed-off-by: Jeff Mahoney <jeffm@suse.com> Reviewed-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
580c6efaf9
commit
dc2d3005d2
|
@ -954,9 +954,9 @@ struct btrfs_fs_info {
|
||||||
struct btrfs_fs_devices *fs_devices;
|
struct btrfs_fs_devices *fs_devices;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the space_info list is almost entirely read only. It only changes
|
* The space_info list is effectively read only after initial
|
||||||
* when we add a new raid type to the FS, and that happens
|
* setup. It is populated at mount time and cleaned up after
|
||||||
* very rarely. RCU is used to protect it.
|
* all block groups are removed. RCU is used to protect it.
|
||||||
*/
|
*/
|
||||||
struct list_head space_info;
|
struct list_head space_info;
|
||||||
|
|
||||||
|
|
|
@ -4606,11 +4606,7 @@ static int do_chunk_alloc(struct btrfs_trans_handle *trans,
|
||||||
return -ENOSPC;
|
return -ENOSPC;
|
||||||
|
|
||||||
space_info = __find_space_info(fs_info, flags);
|
space_info = __find_space_info(fs_info, flags);
|
||||||
if (!space_info) {
|
ASSERT(space_info);
|
||||||
ret = create_space_info(fs_info, flags, &space_info);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
again:
|
again:
|
||||||
spin_lock(&space_info->lock);
|
spin_lock(&space_info->lock);
|
||||||
|
@ -10265,15 +10261,7 @@ int btrfs_make_block_group(struct btrfs_trans_handle *trans,
|
||||||
* with its ->space_info set.
|
* with its ->space_info set.
|
||||||
*/
|
*/
|
||||||
cache->space_info = __find_space_info(fs_info, cache->flags);
|
cache->space_info = __find_space_info(fs_info, cache->flags);
|
||||||
if (!cache->space_info) {
|
ASSERT(cache->space_info);
|
||||||
ret = create_space_info(fs_info, cache->flags,
|
|
||||||
&cache->space_info);
|
|
||||||
if (ret) {
|
|
||||||
btrfs_remove_free_space_cache(cache);
|
|
||||||
btrfs_put_block_group(cache);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = btrfs_add_block_group_cache(fs_info, cache);
|
ret = btrfs_add_block_group_cache(fs_info, cache);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|
Loading…
Reference in New Issue