From patchwork Thu Feb 27 21:12:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Simmons X-Patchwork-Id: 11410173 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F060892A for ; Thu, 27 Feb 2020 21:31:59 +0000 (UTC) Received: from pdx1-mailman02.dreamhost.com (pdx1-mailman02.dreamhost.com [64.90.62.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D94E224677 for ; Thu, 27 Feb 2020 21:31:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D94E224677 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lustre-devel-bounces@lists.lustre.org Received: from pdx1-mailman02.dreamhost.com (localhost [IPv6:::1]) by pdx1-mailman02.dreamhost.com (Postfix) with ESMTP id ABAEA348813; Thu, 27 Feb 2020 13:27:07 -0800 (PST) X-Original-To: lustre-devel@lists.lustre.org Delivered-To: lustre-devel-lustre.org@pdx1-mailman02.dreamhost.com Received: from smtp3.ccs.ornl.gov (smtp3.ccs.ornl.gov [160.91.203.39]) by pdx1-mailman02.dreamhost.com (Postfix) with ESMTP id DAC1F21FE0C for ; Thu, 27 Feb 2020 13:19:41 -0800 (PST) Received: from star.ccs.ornl.gov (star.ccs.ornl.gov [160.91.202.134]) by smtp3.ccs.ornl.gov (Postfix) with ESMTP id 88CFA8A24; Thu, 27 Feb 2020 16:18:16 -0500 (EST) Received: by star.ccs.ornl.gov (Postfix, from userid 2004) id 8655D46D; Thu, 27 Feb 2020 16:18:16 -0500 (EST) From: James Simmons To: Andreas Dilger , Oleg Drokin , NeilBrown Date: Thu, 27 Feb 2020 16:12:21 -0500 Message-Id: <1582838290-17243-274-git-send-email-jsimmons@infradead.org> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1582838290-17243-1-git-send-email-jsimmons@infradead.org> References: <1582838290-17243-1-git-send-email-jsimmons@infradead.org> Subject: [lustre-devel] [PATCH 273/622] lustre: obd: update udev event handling X-BeenThere: lustre-devel@lists.lustre.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "For discussing Lustre software development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: James Simmons , Lustre Development List MIME-Version: 1.0 Errors-To: lustre-devel-bounces@lists.lustre.org Sender: "lustre-devel" Add a timestamp that users have requested so it can be recorded then a sysfs lustre file changed. Second the PARAM field only was created with the kobject source and parent name but the sysfs file could be deeper in the lustre sysfs tree. Add handling for deeper sysfs tree paths. WC-bug-id: https://jira.whamcloud.com/browse/LU-8066 Lustre-commit: b0d162390ad6 ("LU-8066 obd: update udev event handling") Signed-off-by: James Simmons Reviewed-on: https://review.whamcloud.com/34624 Reviewed-by: Emoly Liu Reviewed-by: Alex Zhuravlev Reviewed-by: Ben Evans Reviewed-by: Oleg Drokin Signed-off-by: James Simmons --- fs/lustre/obdclass/obd_config.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/fs/lustre/obdclass/obd_config.c b/fs/lustre/obdclass/obd_config.c index 4b1848f..97cb8c1 100644 --- a/fs/lustre/obdclass/obd_config.c +++ b/fs/lustre/obdclass/obd_config.c @@ -773,7 +773,7 @@ static int process_param2_config(struct lustre_cfg *lcfg) char *param = lustre_cfg_string(lcfg, 1); struct kobject *kobj = NULL; const char *subsys = param; - char *envp[3]; + char *envp[4]; char *value; size_t len; int rc; @@ -802,7 +802,9 @@ static int process_param2_config(struct lustre_cfg *lcfg) 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++) @@ -1128,14 +1130,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", @@ -1144,6 +1157,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));