File tree Expand file tree Collapse file tree 3 files changed +16
-3
lines changed Expand file tree Collapse file tree 3 files changed +16
-3
lines changed Original file line number Diff line number Diff line change @@ -625,14 +625,17 @@ int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
625
625
return 0 ;
626
626
}
627
627
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 )
629
630
{
630
631
int error = 0 ;
631
632
struct btrfs_fs_devices * fs_devices = fs_info -> fs_devices ;
632
633
struct btrfs_device * dev ;
633
634
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" ,
635
637
& fs_info -> super_kobj );
638
+
636
639
if (!fs_info -> device_dir_kobj )
637
640
return - ENOMEM ;
638
641
@@ -643,6 +646,9 @@ static int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info)
643
646
if (!dev -> bdev )
644
647
continue ;
645
648
649
+ if (one_device && one_device != dev )
650
+ continue ;
651
+
646
652
disk = dev -> bdev -> bd_part ;
647
653
disk_kobj = & part_to_dev (disk )-> kobj ;
648
654
@@ -686,7 +692,7 @@ int btrfs_sysfs_add_one(struct btrfs_fs_info *fs_info)
686
692
if (error )
687
693
goto failure ;
688
694
689
- error = btrfs_kobj_add_device (fs_info );
695
+ error = btrfs_kobj_add_device (fs_info , NULL );
690
696
if (error )
691
697
goto failure ;
692
698
Original file line number Diff line number Diff line change @@ -66,6 +66,8 @@ char *btrfs_printable_features(enum btrfs_feature_set set, u64 flags);
66
66
extern const char * const btrfs_feature_set_names [3 ];
67
67
extern struct kobj_type space_info_ktype ;
68
68
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 );
69
71
int btrfs_kobj_rm_device (struct btrfs_fs_info * fs_info ,
70
72
struct btrfs_device * one_device );
71
73
#endif /* _BTRFS_SYSFS_H_ */
Original file line number Diff line number Diff line change @@ -2147,6 +2147,10 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
2147
2147
total_bytes = btrfs_super_num_devices (root -> fs_info -> super_copy );
2148
2148
btrfs_set_super_num_devices (root -> fs_info -> super_copy ,
2149
2149
total_bytes + 1 );
2150
+
2151
+ /* add sysfs device entry */
2152
+ btrfs_kobj_add_device (root -> fs_info , device );
2153
+
2150
2154
mutex_unlock (& root -> fs_info -> fs_devices -> device_list_mutex );
2151
2155
2152
2156
if (seeding_dev ) {
@@ -2209,6 +2213,7 @@ int btrfs_init_new_device(struct btrfs_root *root, char *device_path)
2209
2213
unlock_chunks (root );
2210
2214
btrfs_end_transaction (trans , root );
2211
2215
rcu_string_free (device -> name );
2216
+ btrfs_kobj_rm_device (root -> fs_info , device );
2212
2217
kfree (device );
2213
2218
error :
2214
2219
blkdev_put (bdev , FMODE_EXCL );
You can’t perform that action at this time.
0 commit comments