diff options
author | Anand Jain <Anand.Jain@oracle.com> | 2015-03-10 06:38:19 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2015-05-27 12:27:18 +0200 |
commit | 248d200df34f3e44a4140f32dfc7428c52615332 (patch) | |
tree | 1f84869e27d96d1ef0999e47d47b9d22f9e983c2 /fs/btrfs/sysfs.c | |
parent | ba155e2d21f6bf05de86a78dbe5bfd8757604a65 (diff) | |
download | lwn-248d200df34f3e44a4140f32dfc7428c52615332.tar.gz lwn-248d200df34f3e44a4140f32dfc7428c52615332.zip |
Btrfs: sysfs: fix, btrfs_release_super_kobj() should to clean up the kobject data
The following test case fails indicating that, thread tried to init an initialized object.
kernel: [232104.016513] kobject (ffff880006c1c980): tried to init an initialized object, something is seriously wrong.
btrfs_sysfs_remove_one() self test code:
open_tree()
{
::
ret = btrfs_sysfs_add_one(fs_info);
if (ret) {
pr_err("BTRFS: failed to init sysfs interface: %d\n", ret);
goto fail_block_groups;
}
+ btrfs_sysfs_remove_one(fs_info);
+ ret = btrfs_sysfs_add_one(fs_info);
+ if (ret) {
+ pr_err("BTRFS: failed to init sysfs interface: %d\n", ret);
+ goto fail_block_groups;
+ }
cleaning up the unregistered kobject fixes this.
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Diffstat (limited to 'fs/btrfs/sysfs.c')
-rw-r--r-- | fs/btrfs/sysfs.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index e8a4c86d274d..db2f8aed2b7d 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c @@ -439,6 +439,8 @@ static struct attribute *btrfs_attrs[] = { static void btrfs_release_super_kobj(struct kobject *kobj) { struct btrfs_fs_info *fs_info = to_fs_info(kobj); + + memset(&fs_info->super_kobj, 0, sizeof(struct kobject)); complete(&fs_info->kobj_unregister); } |