From: Muneendra <muneendra.kumar@broadcom.com> To: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, tj@kernel.org, linux-nvme@lists.infradead.org Cc: jsmart2021@gmail.com, emilne@redhat.com, mkumar@redhat.com, pbonzini@redhat.com, Muneendra <muneendra.kumar@broadcom.com> Subject: [PATCH v3 03/19] nvme: Added a newsysfs attribute appid_store Date: Tue, 3 Nov 2020 12:48:07 +0530 [thread overview] Message-ID: <1604387903-20006-4-git-send-email-muneendra.kumar@broadcom.com> (raw) In-Reply-To: <1604387903-20006-1-git-send-email-muneendra.kumar@broadcom.com> [-- Attachment #1: Type: text/plain, Size: 3265 bytes --] Added a new sysfs attribute appid_store under /sys/class/fc/fc_udev_device/* With this new interface the user can set the application identfier in the blkcg associted with cgroup id. Once the application identifer has set with this interface it allows identification of traffic sources at an individual cgroup based Applications (ex:virtual machine (VM))level in both host and fabric infrastructure(FC). Below is the interface provided to set the app_id echo "<cgroupid>:<appid>" >> /sys/class/fc/fc_udev_device/appid_store echo "457E:100000109b521d27" >> /sys/class/fc/fc_udev_device/appid_store Signed-off-by: Muneendra <muneendra.kumar@broadcom.com> --- v3: Replaced blkcg_set_app_identifier function with blkcg_set_fc_appid v2: New Patch --- drivers/nvme/host/fc.c | 73 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index eae43bb444e0..6d6cc06fd54a 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -9,7 +9,7 @@ #include <uapi/scsi/fc/fc_els.h> #include <linux/delay.h> #include <linux/overflow.h> - +#include <linux/blk-cgroup.h> #include "nvme.h" #include "fabrics.h" #include <linux/nvme-fc-driver.h> @@ -3768,10 +3768,81 @@ static ssize_t nvme_fc_nvme_discovery_store(struct device *dev, return count; } + +/*parse the Cgroup id from a buf and returns the length of cgrpid*/ +static int fc_parse_cgrpid(const char *buf, u64 *id) +{ + char cgrp_id[16+1]; + int cgrpid_len, j; + + memset(cgrp_id, 0x0, sizeof(cgrp_id)); + for (cgrpid_len = 0, j = 0; cgrpid_len < 17; cgrpid_len++) { + if (buf[cgrpid_len] != ':') + cgrp_id[cgrpid_len] = buf[cgrpid_len]; + else { + j = 1; + break; + } + } + if (!j) + return -EINVAL; + if (kstrtou64(cgrp_id, 16, id) < 0) + return -EINVAL; + return cgrpid_len; +} + +/* + * fc_update_appid :parses and updates the appid in the blkcg associated with + * cgroupid. + * @buf: buf contains both cgrpid and appid info + * @count: size of the buffer + */ +static int fc_update_appid(const char *buf, size_t count) +{ + u64 cgrp_id; + int appid_len = 0; + int cgrpid_len = 0; + char app_id[APPID_LEN]; + int ret = 0; + + if (buf[count-1] == '\n') + count--; + + if ((count > (16+1+APPID_LEN)) || (!strchr(buf, ':'))) + return -EINVAL; + + cgrpid_len = fc_parse_cgrpid(buf, &cgrp_id); + if (cgrpid_len < 0) + return -EINVAL; + /*appid len is count - cgrpid_len -1 (: + \n) */ + appid_len = count - cgrpid_len - 1; + if (appid_len > APPID_LEN) + return -EINVAL; + + memset(app_id, 0x0, sizeof(app_id)); + memcpy(app_id, &buf[cgrpid_len+1], appid_len); + ret = blkcg_set_app_identifier(app_id, cgrp_id, sizeof(app_id)); + if (ret < 0) + return ret; + return count; +} + +static ssize_t fc_appid_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int ret = 0; + + ret = fc_update_appid(buf, count); + if (ret < 0) + return -EINVAL; + return count; +} static DEVICE_ATTR(nvme_discovery, 0200, NULL, nvme_fc_nvme_discovery_store); +static DEVICE_ATTR(appid_store, 0200, NULL, fc_appid_store); static struct attribute *nvme_fc_attrs[] = { &dev_attr_nvme_discovery.attr, + &dev_attr_appid_store.attr, NULL }; -- 2.26.2 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4177 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Muneendra <muneendra.kumar@broadcom.com> To: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, tj@kernel.org, linux-nvme@lists.infradead.org Cc: pbonzini@redhat.com, jsmart2021@gmail.com, mkumar@redhat.com, emilne@redhat.com, Muneendra <muneendra.kumar@broadcom.com> Subject: [PATCH v3 03/19] nvme: Added a newsysfs attribute appid_store Date: Tue, 3 Nov 2020 12:48:07 +0530 [thread overview] Message-ID: <1604387903-20006-4-git-send-email-muneendra.kumar@broadcom.com> (raw) In-Reply-To: <1604387903-20006-1-git-send-email-muneendra.kumar@broadcom.com> [-- Attachment #1.1: Type: text/plain, Size: 3265 bytes --] Added a new sysfs attribute appid_store under /sys/class/fc/fc_udev_device/* With this new interface the user can set the application identfier in the blkcg associted with cgroup id. Once the application identifer has set with this interface it allows identification of traffic sources at an individual cgroup based Applications (ex:virtual machine (VM))level in both host and fabric infrastructure(FC). Below is the interface provided to set the app_id echo "<cgroupid>:<appid>" >> /sys/class/fc/fc_udev_device/appid_store echo "457E:100000109b521d27" >> /sys/class/fc/fc_udev_device/appid_store Signed-off-by: Muneendra <muneendra.kumar@broadcom.com> --- v3: Replaced blkcg_set_app_identifier function with blkcg_set_fc_appid v2: New Patch --- drivers/nvme/host/fc.c | 73 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index eae43bb444e0..6d6cc06fd54a 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -9,7 +9,7 @@ #include <uapi/scsi/fc/fc_els.h> #include <linux/delay.h> #include <linux/overflow.h> - +#include <linux/blk-cgroup.h> #include "nvme.h" #include "fabrics.h" #include <linux/nvme-fc-driver.h> @@ -3768,10 +3768,81 @@ static ssize_t nvme_fc_nvme_discovery_store(struct device *dev, return count; } + +/*parse the Cgroup id from a buf and returns the length of cgrpid*/ +static int fc_parse_cgrpid(const char *buf, u64 *id) +{ + char cgrp_id[16+1]; + int cgrpid_len, j; + + memset(cgrp_id, 0x0, sizeof(cgrp_id)); + for (cgrpid_len = 0, j = 0; cgrpid_len < 17; cgrpid_len++) { + if (buf[cgrpid_len] != ':') + cgrp_id[cgrpid_len] = buf[cgrpid_len]; + else { + j = 1; + break; + } + } + if (!j) + return -EINVAL; + if (kstrtou64(cgrp_id, 16, id) < 0) + return -EINVAL; + return cgrpid_len; +} + +/* + * fc_update_appid :parses and updates the appid in the blkcg associated with + * cgroupid. + * @buf: buf contains both cgrpid and appid info + * @count: size of the buffer + */ +static int fc_update_appid(const char *buf, size_t count) +{ + u64 cgrp_id; + int appid_len = 0; + int cgrpid_len = 0; + char app_id[APPID_LEN]; + int ret = 0; + + if (buf[count-1] == '\n') + count--; + + if ((count > (16+1+APPID_LEN)) || (!strchr(buf, ':'))) + return -EINVAL; + + cgrpid_len = fc_parse_cgrpid(buf, &cgrp_id); + if (cgrpid_len < 0) + return -EINVAL; + /*appid len is count - cgrpid_len -1 (: + \n) */ + appid_len = count - cgrpid_len - 1; + if (appid_len > APPID_LEN) + return -EINVAL; + + memset(app_id, 0x0, sizeof(app_id)); + memcpy(app_id, &buf[cgrpid_len+1], appid_len); + ret = blkcg_set_app_identifier(app_id, cgrp_id, sizeof(app_id)); + if (ret < 0) + return ret; + return count; +} + +static ssize_t fc_appid_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + int ret = 0; + + ret = fc_update_appid(buf, count); + if (ret < 0) + return -EINVAL; + return count; +} static DEVICE_ATTR(nvme_discovery, 0200, NULL, nvme_fc_nvme_discovery_store); +static DEVICE_ATTR(appid_store, 0200, NULL, fc_appid_store); static struct attribute *nvme_fc_attrs[] = { &dev_attr_nvme_discovery.attr, + &dev_attr_appid_store.attr, NULL }; -- 2.26.2 [-- Attachment #1.2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4177 bytes --] [-- Attachment #2: Type: text/plain, Size: 158 bytes --] _______________________________________________ Linux-nvme mailing list Linux-nvme@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-nvme
next prev parent reply other threads:[~2020-11-03 14:12 UTC|newest] Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-03 7:18 [PATCH v3 00/19] blkcg:Support to track FC storage blk io traffic Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 01/19] cgroup: Added cgroup_get_from_kernfs_id Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-09 13:49 ` Tejun Heo 2020-11-09 13:49 ` Tejun Heo 2020-11-03 7:18 ` [PATCH v3 02/19] blkcg: Added a app identifier support for blkcg Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` Muneendra [this message] 2020-11-03 7:18 ` [PATCH v3 03/19] nvme: Added a newsysfs attribute appid_store Muneendra 2020-11-03 7:18 ` [PATCH v3 04/19] lpfc: vmid: Add the datastructure for supporting VMID in lpfc Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 05/19] lpfc: vmid: API to check if VMID is enabled Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 06/19] lpfc: vmid: Supplementary data structures for vmid Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 07/19] lpfc: vmid: Forward declarations for APIs Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 08/19] lpfc: vmid: Add support for vmid in mailbox command Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 09/19] lpfc: vmid: VMID params initialization Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 10/19] lpfc: vmid: vmid resource allocation Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 11/19] lpfc: vmid: cleanup vmid resources Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 12/19] lpfc: vmid: Implements ELS commands for appid patch Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 13/19] lpfc: vmid: Functions to manage vmids Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 14/19] lpfc: vmid: Implements CT commands for appid Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 15/19] lpfc: vmid: Appends the vmid in the wqe before sending request Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 16/19] lpfc: vmid: Timeout implementation for vmid Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 17/19] lpfc: vmid: Adding qfpa and vmid timeout check in worker thread Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 18/19] lpfc: vmid: Introducing vmid in io path Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 7:18 ` [PATCH v3 19/19] scsi: Made changes in Kconfig to select BLK_CGROUP_FC_APPID Muneendra 2020-11-03 7:18 ` Muneendra 2020-11-03 18:07 ` kernel test robot 2020-11-03 18:07 ` kernel test robot 2020-11-03 18:07 ` kernel test robot 2020-11-03 21:19 ` kernel test robot 2020-11-03 21:19 ` kernel test robot 2020-11-03 21:19 ` kernel test robot 2020-11-04 0:55 ` kernel test robot 2020-11-04 0:55 ` kernel test robot 2020-11-04 0:55 ` kernel test robot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1604387903-20006-4-git-send-email-muneendra.kumar@broadcom.com \ --to=muneendra.kumar@broadcom.com \ --cc=emilne@redhat.com \ --cc=jsmart2021@gmail.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=linux-scsi@vger.kernel.org \ --cc=mkumar@redhat.com \ --cc=pbonzini@redhat.com \ --cc=tj@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.