From b989f180460c5b491b81c9d8227fc31c00c3bbc2 Mon Sep 17 00:00:00 2001 From: Dmitry Torokhov Date: Mon, 19 Jan 2004 00:21:50 -0800 Subject: [PATCH] [PATCH] kobject: make kobject hotplug function public make kobject hotplug mechanism public so that others may call it. --- include/linux/kobject.h | 1 + lib/kobject.c | 49 ++++++++++++++++++----------------------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 42174b623637a..2b127488d33e4 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h @@ -56,6 +56,7 @@ extern void kobject_unregister(struct kobject *); extern struct kobject * kobject_get(struct kobject *); extern void kobject_put(struct kobject *); +extern void kobject_hotplug(const char *action, struct kobject *); struct kobj_type { void (*release)(struct kobject *); diff --git a/lib/kobject.c b/lib/kobject.c index 51787be155526..8ab50700d2c2b 100644 --- a/lib/kobject.c +++ b/lib/kobject.c @@ -198,9 +198,24 @@ exit: kfree(envp); return; } + +void kobject_hotplug(const char *action, struct kobject *kobj) +{ + struct kobject * top_kobj = kobj; + + /* If this kobj does not belong to a kset, + try to find a parent that does. */ + 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(action, top_kobj->kset, kobj); +} #else -static void kset_hotplug(const char *action, struct kset *kset, - struct kobject *kobj) +void kobject_hotplug(const char *action, struct kobject *kobj) { return; } @@ -248,7 +263,6 @@ int kobject_add(struct kobject * kobj) { int error = 0; struct kobject * parent; - struct kobject * top_kobj; if (!(kobj = kobject_get(kobj))) return -ENOENT; @@ -277,18 +291,9 @@ int kobject_add(struct kobject * kobj) if (parent) kobject_put(parent); } 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); + kobject_hotplug("add", kobj); } + return error; } @@ -396,20 +401,7 @@ void kobject_rename(struct kobject * kobj, char *new_name) 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); } @@ -638,6 +630,7 @@ EXPORT_SYMBOL(kobject_register); EXPORT_SYMBOL(kobject_unregister); EXPORT_SYMBOL(kobject_get); EXPORT_SYMBOL(kobject_put); +EXPORT_SYMBOL(kobject_hotplug); EXPORT_SYMBOL(kset_register); EXPORT_SYMBOL(kset_unregister); -- 2.53.0