Whamcloud - gitweb
LU-8066 obd: update udev event handling
[fs/lustre-release.git] / lustre / obdclass / obd_config.c
index de558e7..3ee0f6e 100644 (file)
@@ -1098,13 +1098,15 @@ static ssize_t process_param2_config(struct lustre_cfg *lcfg)
        kfree(subsys);
        if (kobj) {
                char *value = param;
-               char *envp[3];
+               char *envp[4];
                int i;
 
                param = strsep(&value, "=");
                envp[0] = kasprintf(GFP_KERNEL, "PARAM=%s", param);
                envp[1] = kasprintf(GFP_KERNEL, "SETTING=%s", value);
-               envp[2] = NULL;
+               envp[2] = kasprintf(GFP_KERNEL, "TIME=%lld",
+                                   ktime_get_real_seconds());
+               envp[3] = NULL;
 
                rc = kobject_uevent_env(kobj, KOBJ_CHANGE, envp);
                for (i = 0; i < ARRAY_SIZE(envp); i++)
@@ -1457,14 +1459,25 @@ ssize_t class_modify_config(struct lustre_cfg *lcfg, const char *prefix,
                }
 
                if (!attr) {
-                       char *envp[3];
+                       char *envp[4], *param, *path;
 
-                       envp[0] = kasprintf(GFP_KERNEL, "PARAM=%s.%s.%.*s",
-                                           kobject_name(kobj->parent),
-                                           kobject_name(kobj),
-                                           (int) keylen, key);
+                       path = kobject_get_path(kobj, GFP_KERNEL);
+                       if (!path)
+                               return -EINVAL;
+
+                       /* convert sysfs path to uevent format */
+                       param = path;
+                       while ((param = strchr(param, '/')) != NULL)
+                               *param = '.';
+
+                       param = strstr(path, "fs.lustre.") + 10;
+
+                       envp[0] = kasprintf(GFP_KERNEL, "PARAM=%s.%.*s",
+                                           param, (int) keylen, key);
                        envp[1] = kasprintf(GFP_KERNEL, "SETTING=%s", value);
-                       envp[2] = NULL;
+                       envp[2] = kasprintf(GFP_KERNEL, "TIME=%lld",
+                                           ktime_get_real_seconds());
+                       envp[3] = NULL;
 
                        if (kobject_uevent_env(kobj, KOBJ_CHANGE, envp)) {
                                CERROR("%s: failed to send uevent %s\n",
@@ -1473,6 +1486,7 @@ ssize_t class_modify_config(struct lustre_cfg *lcfg, const char *prefix,
 
                        for (i = 0; i < ARRAY_SIZE(envp); i++)
                                kfree(envp[i]);
+                       kfree(path);
                } else {
                        count += lustre_attr_store(kobj, attr, value,
                                                   strlen(value));