--- cluster/gfs-kernel/src/gfs/sys.c 2008-01-28 01:29:25.000000000 -0500 +++ cluster.new/gfs-kernel/src/gfs/sys.c 2008-02-11 14:36:15.000000000 -0500 @@ -85,25 +85,18 @@ .sysfs_ops = &gfs_attr_ops, }; -static struct kset gfs_kset = { - .ktype = &gfs_ktype, -}; +static struct kset *gfs_kset; int gfs_sys_fs_add(struct gfs_sbd *sdp) { int error; - sdp->sd_kobj.kset = &gfs_kset; - sdp->sd_kobj.ktype = &gfs_ktype; - - error = kobject_set_name(&sdp->sd_kobj, "%s", sdp->sd_table_name); - if (error) - goto fail; - - error = kobject_register(&sdp->sd_kobj); + sdp->sd_kobj.kset = gfs_kset; + error = kobject_init_and_add(&sdp->sd_kobj, &gfs_ktype, NULL, "%s", sdp->sd_table_name); if (error) goto fail; + kobject_uevent(&sdp->sd_kobj, KOBJ_ADD); return 0; fail: @@ -112,20 +105,22 @@ void gfs_sys_fs_del(struct gfs_sbd *sdp) { - kobject_unregister(&sdp->sd_kobj); + kobject_put(&sdp->sd_kobj); } int gfs_sys_init(void) { gfs_sys_margs = NULL; spin_lock_init(&gfs_sys_margs_lock); - kobject_set_name(&gfs_kset.kobj, "gfs"); - kobj_set_kset_s(&gfs_kset, fs_subsys); - return kset_register(&gfs_kset); + gfs_kset = kset_create_and_add("gfs", NULL, fs_kobj); + if (!gfs_kset) + return -ENOMEM; + + return 0; } void gfs_sys_uninit(void) { kfree(gfs_sys_margs); - kset_unregister(&gfs_kset); + kset_unregister(gfs_kset); }