[Btrfs-devel] [PATCH] btrfs: fixes for kobject changes in mainline

Greg KH greg at kroah.com
Wed Feb 6 09:01:31 PST 2008


Here's a patch against the unstable tree that gets the code to build
against Linus's current tree (2.6.24-git12).  This is needed as the
kobject/kset api has changed there.

I tried to make the smallest changes needed, and it builds and loads
successfully, but I don't have a btrfs volume anywhere (yet) to try to
see if things still work properly :)

Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
---

Note, I can remove a lot more sysfs-related code in here, to make it
much simpler if you want me to.  But that would make this file pretty
messy if you need to keep backwards compatibility with old kernels.

Also, the lifetime rules for your kobjects seem very suspect.
Especially as you have a completion handler for your release functions.
I can rework this if needed too.  Time to go download the userspace
tools to make sure I don't break anything really badly...


diff -u btrfs-unstable-18f284b2de93.orig/sysfs.c btrfs-unstable-18f284b2de93/sysfs.c
--- btrfs-unstable-18f284b2de93.orig/sysfs.c	2008-02-06 07:00:57.000000000 -0800
+++ btrfs-unstable-18f284b2de93/sysfs.c	2008-02-06 08:54:53.000000000 -0800
@@ -184,7 +184,8 @@
 	.release	= btrfs_super_release,
 };
 
-static struct kset btrfs_kset;
+/* /sys/fs/btrfs/ entry */
+static struct kset *btrfs_kset;
 
 int btrfs_sysfs_add_super(struct btrfs_fs_info *fs)
 {
@@ -208,14 +209,9 @@
 	}
 	name[len] = '\0';
 
-	fs->super_kobj.kset = &btrfs_kset;
-	fs->super_kobj.ktype = &btrfs_super_ktype;
-
-	error = kobject_set_name(&fs->super_kobj, "%s", name);
-	if (error)
-		goto fail;
-
-	error = kobject_register(&fs->super_kobj);
+	fs->super_kobj.kset = btrfs_kset;
+	error = kobject_init_and_add(&fs->super_kobj, &btrfs_super_ktype,
+				     NULL, "%s", name);
 	if (error)
 		goto fail;
 
@@ -232,15 +228,9 @@
 {
 	int error;
 
-	root->root_kobj.ktype = &btrfs_root_ktype;
-	root->root_kobj.parent = &root->fs_info->super_kobj;
-
-	error = kobject_set_name(&root->root_kobj, "%s", root->name);
-	if (error) {
-		goto fail;
-	}
-
-	error = kobject_register(&root->root_kobj);
+	error = kobject_init_and_add(&root->root_kobj, &btrfs_root_ktype,
+				     &root->fs_info->super_kobj,
+				     "%s", root->name);
 	if (error)
 		goto fail;
 
@@ -253,24 +243,25 @@
 
 void btrfs_sysfs_del_root(struct btrfs_root *root)
 {
-	kobject_unregister(&root->root_kobj);
+	kobject_put(&root->root_kobj);
 	wait_for_completion(&root->kobj_unregister);
 }
 
 void btrfs_sysfs_del_super(struct btrfs_fs_info *fs)
 {
-	kobject_unregister(&fs->super_kobj);
+	kobject_put(&fs->super_kobj);
 	wait_for_completion(&fs->kobj_unregister);
 }
 
 int btrfs_init_sysfs()
 {
-	kobj_set_kset_s(&btrfs_kset, fs_subsys);
-	kobject_set_name(&btrfs_kset.kobj, "btrfs");
-	return kset_register(&btrfs_kset);
+	btrfs_kset = kset_create_and_add("btrfs", NULL, fs_kobj);
+	if (!btrfs_kset)
+		return -ENOMEM;
+	return 0;
 }
 
 void btrfs_exit_sysfs()
 {
-	kset_unregister(&btrfs_kset);
+	kset_unregister(btrfs_kset);
 }



More information about the Btrfs-devel mailing list