public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
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, hare@suse.de
Cc: jsmart2021@gmail.com, emilne@redhat.com, mkumar@redhat.com,
	Muneendra <muneendra.kumar@broadcom.com>
Subject: [PATCH v8 03/16] nvme: Added a newsysfs attribute appid_store
Date: Thu,  4 Mar 2021 10:57:13 +0530	[thread overview]
Message-ID: <1614835646-16217-4-git-send-email-muneendra.kumar@broadcom.com> (raw)
In-Reply-To: <1614835646-16217-1-git-send-email-muneendra.kumar@broadcom.com>

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>

---
v8:
No change

v7:
No change

v6:
No change

v5:
Replaced APPID_LEN with FC_APPID_LEN

v4:
No change

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 38373a0e86ef..4cad4364fbce 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>
@@ -3769,10 +3769,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[FC_APPID_LEN];
+	int ret = 0;
+
+	if (buf[count-1] == '\n')
+		count--;
+
+	if ((count > (16+1+FC_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 > FC_APPID_LEN)
+		return -EINVAL;
+
+	memset(app_id, 0x0, sizeof(app_id));
+	memcpy(app_id, &buf[cgrpid_len+1], appid_len);
+	ret = blkcg_set_fc_appid(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


  parent reply	other threads:[~2021-03-04 12:30 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-04  5:27 [PATCH v8 00/16] blkcg:Support to track FC storage blk io traffic Muneendra
2021-03-04  5:27 ` [PATCH v8 01/16] cgroup: Added cgroup_get_from_id Muneendra
2021-03-04 12:25   ` Hannes Reinecke
2021-03-04 16:26   ` kernel test robot
2021-03-04  5:27 ` [PATCH v8 02/16] blkcg: Added a app identifier support for blkcg Muneendra
2021-03-04 12:25   ` Hannes Reinecke
2021-03-04  5:27 ` Muneendra [this message]
2021-03-04 12:27   ` [PATCH v8 03/16] nvme: Added a newsysfs attribute appid_store Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 04/16] lpfc: vmid: Add the datastructure for supporting VMID in lpfc Muneendra
2021-03-04 12:29   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 05/16] lpfc: vmid: Supplementary data structures for vmid and APIs Muneendra
2021-03-04 12:31   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 06/16] lpfc: vmid: Forward declarations for APIs Muneendra
2021-03-04 12:32   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 07/16] lpfc: vmid: VMID params initialization Muneendra
2021-03-04 12:33   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 08/16] lpfc: vmid: Add support for vmid in mailbox command, does vmid resource allocation and vmid cleanup Muneendra
2021-03-04 12:34   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 09/16] lpfc: vmid: Implements ELS commands for appid patch Muneendra
2021-03-04 12:36   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 10/16] lpfc: vmid: Functions to manage vmids Muneendra
2021-03-04 12:41   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 11/16] lpfc: vmid: Implements CT commands for appid Muneendra
2021-03-04 12:42   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 12/16] lpfc: vmid: Appends the vmid in the wqe before sending Muneendra
2021-03-04 12:43   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 13/16] lpfc: vmid: Timeout implementation for vmid Muneendra
2021-03-04 12:46   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 14/16] lpfc: vmid: Adding qfpa and vmid timeout check in worker thread Muneendra
2021-03-04 12:47   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 15/16] lpfc: vmid: Introducing vmid in io path Muneendra
2021-03-04 12:52   ` Hannes Reinecke
2021-03-04  5:27 ` [PATCH v8 16/16] scsi: Made changes in Kconfig to select BLK_CGROUP_FC_APPID Muneendra
2021-03-04 12:53   ` Hannes Reinecke
2021-03-11 15:33 ` [PATCH v8 00/16] blkcg:Support to track FC storage blk io traffic Hannes Reinecke

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=1614835646-16217-4-git-send-email-muneendra.kumar@broadcom.com \
    --to=muneendra.kumar@broadcom.com \
    --cc=emilne@redhat.com \
    --cc=hare@suse.de \
    --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=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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox