mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Wenchao Hao <haowenchao2@huawei.com>
To: "James E . J . Bottomley" <jejb@linux.ibm.com>,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	Douglas Gilbert <dgilbert@interlog.com>,
	<open-iscsi@googlegroups.com>, <linux-scsi@vger.kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <louhongxiang@huawei.com>,
	Wenchao Hao <haowenchao2@huawei.com>
Subject: [PATCH v5 03/10] scsi: scsi_debug: Define grammar to remove added error injection
Date: Fri, 22 Sep 2023 17:28:59 +0800	[thread overview]
Message-ID: <20230922092906.2645265-4-haowenchao2@huawei.com> (raw)
In-Reply-To: <20230922092906.2645265-1-haowenchao2@huawei.com>

The grammar to remove error injection is a line with fixed 3 columns
separated by spaces.

First column is fixed to "-". It tells this is a removal operation.
Second column is the error code to match.
Third column is the scsi command to match.

For example the following command would remove timeout injection of
inquiry command.
    echo "- 0 0x12" > /sys/kernel/debug/scsi_debug/0:0:0:1/error

Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Wenchao Hao <haowenchao2@huawei.com>
---
 drivers/scsi/scsi_debug.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index ca1e2f4878bc..6235e828c430 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -930,6 +930,34 @@ static void sdebug_err_add(struct scsi_device *sdev, struct sdebug_err_inject *n
 	spin_unlock(&devip->list_lock);
 }
 
+static int sdebug_err_remove(struct scsi_device *sdev, const char *buf, size_t count)
+{
+	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdev->hostdata;
+	struct sdebug_err_inject *err;
+	int type;
+	unsigned char cmd;
+
+	if (sscanf(buf, "- %d %hhx", &type, &cmd) != 2) {
+		kfree(buf);
+		return -EINVAL;
+	}
+
+	spin_lock(&devip->list_lock);
+	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
+		if (err->type == type && err->cmd == cmd) {
+			list_del_rcu(&err->list);
+			call_rcu(&err->rcu, sdebug_err_free);
+			spin_unlock(&devip->list_lock);
+			kfree(buf);
+			return count;
+		}
+	}
+	spin_unlock(&devip->list_lock);
+
+	kfree(buf);
+	return -EINVAL;
+}
+
 static int sdebug_error_show(struct seq_file *m, void *p)
 {
 	struct scsi_device *sdev = (struct scsi_device *)m->private;
@@ -987,6 +1015,9 @@ static ssize_t sdebug_error_write(struct file *file, const char __user *ubuf,
 		return -EFAULT;
 	}
 
+	if (buf[0] == '-')
+		return sdebug_err_remove(sdev, buf, count);
+
 	if (sscanf(buf, "%d", &inject_type) != 1) {
 		kfree(buf);
 		return -EINVAL;
-- 
2.32.0


  parent reply	other threads:[~2023-09-22  9:30 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-22  9:28 [PATCH v5 00/10] scsi:scsi_debug: Add error injection for single device Wenchao Hao
2023-09-22  9:28 ` [PATCH v5 01/10] scsi: scsi_debug: create scsi_debug directory in the debugfs filesystem Wenchao Hao
2023-09-28  1:13   ` Douglas Gilbert
2023-09-28  1:38     ` Wenchao Hao
2023-09-22  9:28 ` [PATCH v5 02/10] scsi: scsi_debug: Add interface to manage single device's error inject Wenchao Hao
2023-09-22  9:28 ` Wenchao Hao [this message]
2023-09-22  9:29 ` [PATCH v5 04/10] scsi: scsi_debug: timeout command if the error is injected Wenchao Hao
2023-09-22  9:29 ` [PATCH v5 05/10] scsi: scsi_debug: Return failed value " Wenchao Hao
2023-09-22  9:29 ` [PATCH v5 06/10] scsi: scsi_debug: set command's result and sense data " Wenchao Hao
2023-10-05 10:40   ` Dan Carpenter
2023-09-22  9:29 ` [PATCH v5 07/10] scsi: scsi_debug: Add new error injection abort failed Wenchao Hao
2023-10-06 16:06   ` Douglas Gilbert
2023-09-22  9:29 ` [PATCH v5 08/10] scsi: scsi_debug: Add new error injection reset lun failed Wenchao Hao
2023-10-06 21:04   ` Douglas Gilbert
2023-10-07  9:45     ` Wenchao Hao
2023-09-22  9:29 ` [PATCH v5 09/10] scsi: scsi_debug: Add debugfs interface to fail target reset Wenchao Hao
2023-10-08 23:14   ` Douglas Gilbert
2023-09-22  9:29 ` [PATCH v5 10/10] scsi: scsi_debug: Add param to control sdev's allow_restart Wenchao Hao
2023-10-08 23:17   ` Douglas Gilbert
2023-10-09  7:19     ` Wenchao Hao
2023-09-27 15:38 ` [PATCH v5 00/10] scsi:scsi_debug: Add error injection for single device Martin K. Petersen

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=20230922092906.2645265-4-haowenchao2@huawei.com \
    --to=haowenchao2@huawei.com \
    --cc=dgilbert@interlog.com \
    --cc=jejb@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=louhongxiang@huawei.com \
    --cc=martin.petersen@oracle.com \
    --cc=open-iscsi@googlegroups.com \
    /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

all inboxes | Powered by JetHome®