Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25-rc7 /lib/kobject_uevent.c

Filename:/lib/kobject_uevent.c
Lines Added:28
Lines Deleted:10
Also changed in: (Previous) 2.6.25-rc6  2.6.25-rc5  2.6.25-rc4  2.6.25-rc3  2.6.25-rc2  2.6.25-rc1 
(Following) 2.6.25-rc7-git6  2.6.25-rc8  2.6.25-rc9  2.6.25  2.6.25-git2  2.6.25-git3 

Location
[  2.6.25-rc7
  [  lib
     o  kobject_uevent.c

Patch

diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c
index 5886147..5a402e2 100644
--- a/lib/kobject_uevent.c
+++ b/lib/kobject_uevent.c
@@ -98,7 +98,8 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
    int i = 0;
    int retval = 0;
 
-   pr_debug("%s\n", __FUNCTION__);
+   pr_debug("kobject: '%s' (%p): %s\n",
+       kobject_name(kobj), kobj, __FUNCTION__);
 
    /* search the kset we belong to */
    top_kobj = kobj;
@@ -106,7 +107,9 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
       top_kobj = top_kobj->parent;
 
    if (!top_kobj->kset) {
-      pr_debug("kobject attempted to send uevent without kset!\n");
+      pr_debug("kobject: '%s' (%p): %s: attempted to send uevent "
+          "without kset!\n", kobject_name(kobj), kobj,
+          __FUNCTION__);
       return -EINVAL;
    }
 
@@ -116,7 +119,9 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
    /* skip the event, if the filter returns zero. */
    if (uevent_ops && uevent_ops->filter)
       if (!uevent_ops->filter(kset, kobj)) {
-         pr_debug("kobject filter function caused the event to drop!\n");
+         pr_debug("kobject: '%s' (%p): %s: filter function "
+             "caused the event to drop!\n",
+             kobject_name(kobj), kobj, __FUNCTION__);
          return 0;
       }
 
@@ -126,7 +131,9 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
    else
       subsystem = kobject_name(&kset->kobj);
    if (!subsystem) {
-      pr_debug("unset subsystem caused the event to drop!\n");
+      pr_debug("kobject: '%s' (%p): %s: unset subsystem caused the "
+          "event to drop!\n", kobject_name(kobj), kobj,
+          __FUNCTION__);
       return 0;
    }
 
@@ -166,12 +173,24 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
    if (uevent_ops && uevent_ops->uevent) {
       retval = uevent_ops->uevent(kset, kobj, env);
       if (retval) {
-         pr_debug ("%s - uevent() returned %d\n",
-              __FUNCTION__, retval);
+         pr_debug("kobject: '%s' (%p): %s: uevent() returned "
+             "%d\n", kobject_name(kobj), kobj,
+             __FUNCTION__, retval);
          goto exit;
       }
    }
 
+   /*
+    * Mark "add" and "remove" events in the object to ensure proper
+    * events to userspace during automatic cleanup. If the object did
+    * send an "add" event, "remove" will automatically generated by
+    * the core, if not already done by the caller.
+    */
+   if (action == KOBJ_ADD)
+      kobj->state_add_uevent_sent = 1;
+   else if (action == KOBJ_REMOVE)
+      kobj->state_remove_uevent_sent = 1;
+
    /* we will send an event, so request a new sequence number */
    spin_lock(&sequence_lock);
    seq = ++uevent_seqnum;
@@ -219,11 +238,12 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
       retval = add_uevent_var(env, "HOME=/");
       if (retval)
          goto exit;
-      retval = add_uevent_var(env, "PATH=/sbin:/bin:/usr/sbin:/usr/bin");
+      retval = add_uevent_var(env,
+               "PATH=/sbin:/bin:/usr/sbin:/usr/bin");
       if (retval)
          goto exit;
 
-      call_usermodehelper (argv[0], argv, env->envp, UMH_WAIT_EXEC);
+      call_usermodehelper(argv[0], argv, env->envp, UMH_WAIT_EXEC);
    }
 
 exit:
@@ -231,7 +251,6 @@ exit:
    kfree(env);
    return retval;
 }
-
 EXPORT_SYMBOL_GPL(kobject_uevent_env);
 
 /**
@@ -247,7 +266,6 @@ int kobject_uevent(struct kobject *kobj, enum kobject_action action)
 {
    return kobject_uevent_env(kobj, action, NULL);
 }
-
 EXPORT_SYMBOL_GPL(kobject_uevent);
 
 /**


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.