Skip to content

Commit

Permalink
btrfs: dev delete should remove sysfs entry
Browse files Browse the repository at this point in the history
when we delete the device from the mounted btrfs,
we would need its corresponding sysfs enty to
be removed as well.

Signed-off-by: Anand Jain <Anand.Jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
  • Loading branch information
Anand Jain authored and Chris Mason committed Jun 28, 2014
1 parent 9b4eaf4 commit 99994cd
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 0 deletions.
20 changes: 20 additions & 0 deletions fs/btrfs/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,26 @@ static void init_feature_attrs(void)
}
}

int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
struct btrfs_device *one_device)
{
struct hd_struct *disk;
struct kobject *disk_kobj;

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

if (one_device) {
disk = one_device->bdev->bd_part;
disk_kobj = &part_to_dev(disk)->kobj;

sysfs_remove_link(fs_info->device_dir_kobj,
disk_kobj->name);
}

return 0;
}

static int btrfs_kobj_add_device(struct btrfs_fs_info *fs_info)
{
int error = 0;
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,4 +66,6 @@ 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_rm_device(struct btrfs_fs_info *fs_info,
struct btrfs_device *one_device);
#endif /* _BTRFS_SYSFS_H_ */
4 changes: 4 additions & 0 deletions fs/btrfs/volumes.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#include "rcu-string.h"
#include "math.h"
#include "dev-replace.h"
#include "sysfs.h"

static int init_first_rw_device(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
Expand Down Expand Up @@ -1680,6 +1681,9 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path)
if (device->bdev)
device->fs_devices->open_devices--;

/* remove sysfs entry */
btrfs_kobj_rm_device(root->fs_info, device);

call_rcu(&device->rcu, free_device);

num_devices = btrfs_super_num_devices(root->fs_info->super_copy) - 1;
Expand Down

0 comments on commit 99994cd

Please sign in to comment.