Name: Expose kobject_hotplug function. Author: Rusty Russell Status: Trivial. Depends: Misc/kobject-sanity.patch.gz D: Introduce kobject_hotplug, and expose it for others. Take awkward D: logic from previous callers and turn into a simple loop. diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .23811-linux-2.5.71-bk1/include/linux/kobject.h .23811-linux-2.5.71-bk1.updated/include/linux/kobject.h --- .23811-linux-2.5.71-bk1/include/linux/kobject.h 2003-06-15 11:30:08.000000000 +1000 +++ .23811-linux-2.5.71-bk1.updated/include/linux/kobject.h 2003-06-17 09:49:40.000000000 +1000 @@ -45,6 +45,7 @@ extern void kobject_unregister(struct ko extern struct kobject * kobject_get(struct kobject *); extern void kobject_put(struct kobject *); +void kobject_hotplug(const char *action, struct kobject *kobj); struct kobj_type { void (*release)(struct kobject *); diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .23811-linux-2.5.71-bk1/lib/kobject.c .23811-linux-2.5.71-bk1.updated/lib/kobject.c --- .23811-linux-2.5.71-bk1/lib/kobject.c 2003-06-17 09:49:39.000000000 +1000 +++ .23811-linux-2.5.71-bk1.updated/lib/kobject.c 2003-06-17 09:54:56.000000000 +1000 @@ -166,11 +166,24 @@ exit: kfree(buffer); return; } + +void kobject_hotplug(const char *action, struct kobject *kobj) +{ + struct kobject *i; + + /* If this kobj does not belong to a kset, try to find a + parent that does. */ + for (i = kobj; i; i = i->parent) { + if (i->kset) { + if (i->kset->hotplug_ops) + kset_hotplug(action, i->kset, kobj); + break; + } + } +} #else -static void kset_hotplug(const char *action, struct kset *kset, - struct kobject *kobj) +void kobject_hotplug(const char *action, struct kobject *kobj) { - return; } #endif /* CONFIG_HOTPLUG */ @@ -218,7 +231,6 @@ int kobject_add(struct kobject * kobj) { int error = 0; struct kobject * parent; - struct kobject * top_kobj; if (!(kobj = kobject_get(kobj))) return -ENOENT; @@ -243,19 +255,9 @@ int kobject_add(struct kobject * kobj) error = create_dir(kobj); if (error) unlink(kobj); - else { - /* If this kobj does not belong to a kset, - try to find a parent that does. */ - top_kobj = kobj; - if (!top_kobj->kset && top_kobj->parent) { - do { - top_kobj = top_kobj->parent; - } while (!top_kobj->kset && top_kobj->parent); - } - - if (top_kobj->kset && top_kobj->kset->hotplug_ops) - kset_hotplug("add", top_kobj->kset, kobj); - } + else + kobject_hotplug("add", kobj); + return error; } @@ -288,19 +290,7 @@ int kobject_register(struct kobject * ko void kobject_del(struct kobject * kobj) { - struct kobject * top_kobj; - - /* If this kobj does not belong to a kset, - try to find a parent that does. */ - top_kobj = kobj; - if (!top_kobj->kset && top_kobj->parent) { - do { - top_kobj = top_kobj->parent; - } while (!top_kobj->kset && top_kobj->parent); - } - - if (top_kobj->kset && top_kobj->kset->hotplug_ops) - kset_hotplug("remove", top_kobj->kset, kobj); + kobject_hotplug("remove", kobj); sysfs_remove_dir(kobj); unlink(kobj);