Skip to content

Commit

Permalink
btrfs: dev add should add its sysfs entry
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
asj authored and masoncl committed Jun 28, 2014
1 parent 99994cd commit 0d39376
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
12 changes: 9 additions & 3 deletions fs/btrfs/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -625,14 +625,17 @@ int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
return 0;
}

static int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info)
int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info,
struct btrfs_device *one_device)
{
int error = 0;
struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
struct btrfs_device *dev;

fs_info->device_dir_kobj = kobject_create_and_add("devices",
if (!fs_info->device_dir_kobj)
fs_info->device_dir_kobj = kobject_create_and_add("devices",
&fs_info->super_kobj);

if (!fs_info->device_dir_kobj)
return -ENOMEM;

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

if (one_device && one_device != dev)
continue;

disk = dev->bdev->bd_part;
disk_kobj = &part_to_dev(disk)->kobj;

Expand Down Expand Up @@ -686,7 +692,7 @@ int btrfs_sysfs_add_one(struct btrfs_fs_info *fs_info)
if (error)
goto failure;

error = btrfs_kobj_add_device(fs_info);
error = btrfs_kobj_add_device(fs_info, NULL);
if (error)
goto failure;

Expand Down
2 changes: 2 additions & 0 deletions fs/btrfs/sysfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ char *btrfs_printable_features(enum btrfs_feature_set set, u64 flags);
extern const char * const btrfs_feature_set_names[3];
extern struct kobj_type space_info_ktype;
extern struct kobj_type btrfs_raid_ktype;
int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info,
struct btrfs_device *one_device);
int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
struct btrfs_device *one_device);
#endif /* _BTRFS_SYSFS_H_ */
5 changes: 5 additions & 0 deletions fs/btrfs/volumes.c
Original file line number Diff line number Diff line change
Expand Up @@ -2147,6 +2147,10 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
total_bytes = btrfs_super_num_devices(root->fs_info->super_copy);
btrfs_set_super_num_devices(root->fs_info->super_copy,
total_bytes + 1);

/* add sysfs device entry */
btrfs_kobj_add_device(root->fs_info, device);

mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);

if (seeding_dev) {
Expand Down Expand Up @@ -2209,6 +2213,7 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
unlock_chunks(root);
btrfs_end_transaction(trans, root);
rcu_string_free(device->name);
btrfs_kobj_rm_device(root->fs_info, device);
kfree(device);
error:
blkdev_put(bdev, FMODE_EXCL);
Expand Down

0 comments on commit 0d39376

Please sign in to comment.