From: Chandra Seetharaman <sekharan@us.ibm.com>
To: dm-devel@redhat.com, linux-scsi@vger.kernel.org
Cc: andmike@us.ibm.com, michaelc@cs.wisc.edu,
Chandra Seetharaman <sekharan@us.ibm.com>,
jens.axboe@oracle.com
Subject: [PATCH 4/9] scsi_dh: add skeleton for SCSI Device Handlers
Date: Wed, 23 Jan 2008 16:31:15 -0800 [thread overview]
Message-ID: <20080124003115.18871.42778.sendpatchset@localhost.localdomain> (raw)
In-Reply-To: <20080124003010.18871.84095.sendpatchset@localhost.localdomain>
Subject: scsi_dh: add skeleton for SCSI Device Handlers
From: Mike Anderson <andmike@linux.vnet.ibm.com>
Add base support to the SCSI subsystem for SCSI device handlers.
Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com>
---
drivers/scsi/Kconfig | 2 2 + 0 - 0 !
drivers/scsi/Makefile | 1 1 + 0 - 0 !
drivers/scsi/device_handler/Kconfig | 16 16 + 0 - 0 !
drivers/scsi/device_handler/Makefile | 3 3 + 0 - 0 !
drivers/scsi/scsi_error.c | 10 10 + 0 - 0 !
drivers/scsi/scsi_sysfs.c | 43 43 + 0 - 0 !
include/scsi/scsi_device.h | 2 2 + 0 - 0 !
7 files changed, 77 insertions(+)
Index: linux-2.6.24-rc8/drivers/scsi/Kconfig
===================================================================
--- linux-2.6.24-rc8.orig/drivers/scsi/Kconfig
+++ linux-2.6.24-rc8/drivers/scsi/Kconfig
@@ -1822,4 +1822,6 @@ endif # SCSI_LOWLEVEL
source "drivers/scsi/pcmcia/Kconfig"
+source "drivers/scsi/device_handler/Kconfig"
+
endmenu
Index: linux-2.6.24-rc8/drivers/scsi/Makefile
===================================================================
--- linux-2.6.24-rc8.orig/drivers/scsi/Makefile
+++ linux-2.6.24-rc8/drivers/scsi/Makefile
@@ -34,6 +34,7 @@ obj-$(CONFIG_SCSI_ISCSI_ATTRS) += scsi_t
obj-$(CONFIG_SCSI_SAS_ATTRS) += scsi_transport_sas.o
obj-$(CONFIG_SCSI_SAS_LIBSAS) += libsas/
obj-$(CONFIG_SCSI_SRP_ATTRS) += scsi_transport_srp.o
+obj-$(CONFIG_SCSI_DH) += device_handler/
obj-$(CONFIG_ISCSI_TCP) += libiscsi.o iscsi_tcp.o
obj-$(CONFIG_INFINIBAND_ISER) += libiscsi.o
Index: linux-2.6.24-rc8/drivers/scsi/device_handler/Kconfig
===================================================================
--- /dev/null
+++ linux-2.6.24-rc8/drivers/scsi/device_handler/Kconfig
@@ -0,0 +1,16 @@
+#
+# SCSI Device Handler configuration
+#
+
+menuconfig SCSI_DH
+ bool "SCSI Device Handlers"
+ depends on SCSI!=n
+ default n
+ help
+ SCSI Device Handlers provide device specific support for
+ devices utilized in multipath configurations. Say Y here to
+ select support for specific hardware.
+
+if SCSI_DH
+
+endif #SCSI_DH
Index: linux-2.6.24-rc8/drivers/scsi/device_handler/Makefile
===================================================================
--- /dev/null
+++ linux-2.6.24-rc8/drivers/scsi/device_handler/Makefile
@@ -0,0 +1,3 @@
+#
+# SCSI Device Handler
+#
Index: linux-2.6.24-rc8/drivers/scsi/scsi_error.c
===================================================================
--- linux-2.6.24-rc8.orig/drivers/scsi/scsi_error.c
+++ linux-2.6.24-rc8/drivers/scsi/scsi_error.c
@@ -298,6 +298,7 @@ static inline void scsi_eh_prt_fail_stat
*/
static int scsi_check_sense(struct scsi_cmnd *scmd)
{
+ struct scsi_device *sdev = scmd->device;
struct scsi_sense_hdr sshdr;
if (! scsi_command_normalize_sense(scmd, &sshdr))
@@ -306,6 +307,15 @@ static int scsi_check_sense(struct scsi_
if (scsi_sense_is_deferred(&sshdr))
return NEEDS_RETRY;
+ if (sdev->sdev_dh && sdev->sdev_dh->check_sense) {
+ int rc;
+
+ rc = sdev->sdev_dh->check_sense(sdev, &sshdr);
+ if (rc != SUCCESS)
+ return rc;
+ /* handler does not care. Drop down to default handling */
+ }
+
/*
* Previous logic looked for FILEMARK, EOM or ILI which are
* mainly associated with tapes and returned SUCCESS.
Index: linux-2.6.24-rc8/drivers/scsi/scsi_sysfs.c
===================================================================
--- linux-2.6.24-rc8.orig/drivers/scsi/scsi_sysfs.c
+++ linux-2.6.24-rc8/drivers/scsi/scsi_sysfs.c
@@ -951,6 +951,49 @@ int scsi_register_interface(struct class
}
EXPORT_SYMBOL(scsi_register_interface);
+static int scsi_dh_notifier_add(struct device *dev, void *data)
+{
+ struct scsi_device_handler *sdev_dh = data;
+
+ sdev_dh->nb.notifier_call(&sdev_dh->nb, BUS_NOTIFY_ADD_DEVICE, dev);
+
+ return 0;
+}
+
+int scsi_register_device_handler(struct scsi_device_handler *sdev_dh)
+{
+ int ret;
+
+ ret = bus_register_notifier(&scsi_bus_type, &sdev_dh->nb);
+
+ bus_for_each_dev(&scsi_bus_type, NULL, sdev_dh, scsi_dh_notifier_add);
+
+ return ret;
+}
+EXPORT_SYMBOL(scsi_register_device_handler);
+
+static int scsi_dh_notifier_remove(struct device *dev, void *data)
+{
+ struct scsi_device_handler *sdev_dh = data;
+
+ sdev_dh->nb.notifier_call(&sdev_dh->nb, BUS_NOTIFY_DEL_DEVICE, dev);
+
+ return 0;
+}
+
+int scsi_unregister_device_handler(struct scsi_device_handler *sdev_dh)
+{
+ int ret;
+
+ ret = bus_unregister_notifier(&scsi_bus_type, &sdev_dh->nb);
+
+ bus_for_each_dev(&scsi_bus_type, NULL, sdev_dh,
+ scsi_dh_notifier_remove);
+
+ return ret;
+}
+EXPORT_SYMBOL(scsi_unregister_device_handler);
+
static struct class_device_attribute *class_attr_overridden(
struct class_device_attribute **attrs,
Index: linux-2.6.24-rc8/include/scsi/scsi_device.h
===================================================================
--- linux-2.6.24-rc8.orig/include/scsi/scsi_device.h
+++ linux-2.6.24-rc8/include/scsi/scsi_device.h
@@ -241,7 +241,9 @@ extern struct scsi_device *__scsi_add_de
uint, uint, uint, void *hostdata);
extern int scsi_add_device(struct Scsi_Host *host, uint channel,
uint target, uint lun);
+extern int scsi_register_device_handler(struct scsi_device_handler *sdev_dh);
extern void scsi_remove_device(struct scsi_device *);
+extern int scsi_unregister_device_handler(struct scsi_device_handler *sdev_dh);
extern int scsi_device_get(struct scsi_device *);
extern void scsi_device_put(struct scsi_device *);
--
----------------------------------------------------------------------
Chandra Seetharaman | Be careful what you choose....
- sekharan@us.ibm.com | .......you may get it.
----------------------------------------------------------------------
next prev parent reply other threads:[~2008-01-24 0:31 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-24 0:30 [PATCH 0/9] scsi_dh: Move dm device handler to SCSI layer Chandra Seetharaman
2008-01-24 0:30 ` [PATCH 1/9] scsi_dh: add REQ_LB_OP_TRANSITION and errors Chandra Seetharaman
2008-01-24 0:30 ` [PATCH 2/9] scsi_dh: change sd_prep_fn to call common code Chandra Seetharaman
2008-01-24 0:30 ` [PATCH 3/9] scsi_dh: scsi handling of REQ_LB_OP_TRANSITION Chandra Seetharaman
2008-02-01 20:00 ` Mike Christie
2008-02-04 18:59 ` Chandra Seetharaman
2008-02-04 19:02 ` James Bottomley
2008-02-06 19:00 ` Mike Anderson
2008-02-06 20:52 ` James Bottomley
2008-01-24 0:31 ` Chandra Seetharaman [this message]
2008-02-01 19:53 ` [PATCH 4/9] scsi_dh: add skeleton for SCSI Device Handlers Mike Christie
2008-02-01 20:27 ` Mike Anderson
2008-02-04 18:54 ` Chandra Seetharaman
2008-01-24 0:31 ` [PATCH 5/9] scsi_dh: add EMC Clariion device handler Chandra Seetharaman
2008-01-24 0:31 ` [PATCH 6/9] scsi_dh: add hp sw " Chandra Seetharaman
2008-01-24 0:32 ` [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE Chandra Seetharaman
2008-02-04 18:58 ` James Bottomley
2008-02-04 20:15 ` Chandra Seetharaman
2008-02-04 20:28 ` James Bottomley
2008-02-04 21:19 ` Chandra Seetharaman
2008-02-09 12:45 ` Matthew Wilcox
2008-02-11 18:27 ` Chandra Seetharaman
2008-02-11 19:18 ` Matthew Wilcox
2008-02-28 1:03 ` Chandra Seetharaman
2008-02-05 20:04 ` Mike Christie
2008-02-05 21:56 ` Mike Anderson
2008-02-06 0:46 ` Chandra Seetharaman
2008-02-07 10:08 ` no INQUIRY from userspace please (was Re: [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE) Stefan Richter
2008-02-07 15:01 ` James Bottomley
2008-02-07 17:05 ` no INQUIRY from userspace please Stefan Richter
2008-02-07 17:13 ` Stefan Richter
2008-02-19 20:53 ` Douglas Gilbert
2008-03-04 9:06 ` Hannes Reinecke
2008-02-07 20:42 ` no INQUIRY from userspace please (was Re: [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE) Luben Tuikov
2008-02-04 20:26 ` [PATCH 7/9] scsi_dh: Add support for SDEV_PASSIVE Mike Anderson
2008-01-24 0:32 ` [PATCH 8/9] scsi_dh: add lsi rdac device handler Chandra Seetharaman
2008-01-24 0:32 ` [PATCH 9/9] scsi_dh: add scsi device handler to dm Chandra Seetharaman
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=20080124003115.18871.42778.sendpatchset@localhost.localdomain \
--to=sekharan@us.ibm.com \
--cc=andmike@us.ibm.com \
--cc=dm-devel@redhat.com \
--cc=jens.axboe@oracle.com \
--cc=linux-scsi@vger.kernel.org \
--cc=michaelc@cs.wisc.edu \
/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;
as well as URLs for NNTP newsgroup(s).