Skip to content

Commit 0d39376

Browse files
asjmasoncl
authored andcommitted
btrfs: dev add should add its sysfs entry
we would need the device links to be created, when device is added. Signed-off-by: Anand Jain <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: Chris Mason <[email protected]>
1 parent 99994cd commit 0d39376

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

fs/btrfs/sysfs.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -625,14 +625,17 @@ int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
625625
return 0;
626626
}
627627

628-
static int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info)
628+
int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info,
629+
struct btrfs_device *one_device)
629630
{
630631
int error = 0;
631632
struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
632633
struct btrfs_device *dev;
633634

634-
fs_info->device_dir_kobj = kobject_create_and_add("devices",
635+
if (!fs_info->device_dir_kobj)
636+
fs_info->device_dir_kobj = kobject_create_and_add("devices",
635637
&fs_info->super_kobj);
638+
636639
if (!fs_info->device_dir_kobj)
637640
return -ENOMEM;
638641

@@ -643,6 +646,9 @@ static int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info)
643646
if (!dev->bdev)
644647
continue;
645648

649+
if (one_device && one_device != dev)
650+
continue;
651+
646652
disk = dev->bdev->bd_part;
647653
disk_kobj = &part_to_dev(disk)->kobj;
648654

@@ -686,7 +692,7 @@ int btrfs_sysfs_add_one(struct btrfs_fs_info *fs_info)
686692
if (error)
687693
goto failure;
688694

689-
error = btrfs_kobj_add_device(fs_info);
695+
error = btrfs_kobj_add_device(fs_info, NULL);
690696
if (error)
691697
goto failure;
692698

fs/btrfs/sysfs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ char *btrfs_printable_features(enum btrfs_feature_set set, u64 flags);
6666
extern const char * const btrfs_feature_set_names[3];
6767
extern struct kobj_type space_info_ktype;
6868
extern struct kobj_type btrfs_raid_ktype;
69+
int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info,
70+
struct btrfs_device *one_device);
6971
int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
7072
struct btrfs_device *one_device);
7173
#endif /* _BTRFS_SYSFS_H_ */

fs/btrfs/volumes.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,6 +2147,10 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
21472147
total_bytes = btrfs_super_num_devices(root->fs_info->super_copy);
21482148
btrfs_set_super_num_devices(root->fs_info->super_copy,
21492149
total_bytes + 1);
2150+
2151+
/* add sysfs device entry */
2152+
btrfs_kobj_add_device(root->fs_info, device);
2153+
21502154
mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);
21512155

21522156
if (seeding_dev) {
@@ -2209,6 +2213,7 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
22092213
unlock_chunks(root);
22102214
btrfs_end_transaction(trans, root);
22112215
rcu_string_free(device->name);
2216+
btrfs_kobj_rm_device(root->fs_info, device);
22122217
kfree(device);
22132218
error:
22142219
blkdev_put(bdev, FMODE_EXCL);

0 commit comments

Comments
 (0)