[dm-devel] [PATCH RFT/RFC 4/4] add dm-hp-sw hw handler

Rob Kenna rkenna at redhat.com
Fri Sep 30 20:44:27 UTC 2005


Hey Mike -

Is this for HP active/passive support?  Thanks.

- Rob

Mike Christie wrote:

>This the basic handler but cleaned up. HP pointed me
>to some qlogic code I can use to get more info so I
>hope to integrate some of that code when I get a chance.
>
>Signed-off-by: Mike Christie <michaelc at cs.wisc.edu>
>
>diff -Naurp linux-2.6.14-rc2/drivers/md/dm-hp-sw.c linux-2.6.14-rc2.work/drivers/md/dm-hp-sw.c
>--- linux-2.6.14-rc2/drivers/md/dm-hp-sw.c	1969-12-31 18:00:00.000000000 -0600
>+++ linux-2.6.14-rc2.work/drivers/md/dm-hp-sw.c	2005-09-30 14:12:58.000000000 -0500
>@@ -0,0 +1,108 @@
>+/*
>+ * Copyright (C) 2005 Mike Christie, All rights reserved.
>+ *
>+ * This file is released under the GPL.
>+ *
>+ * Basic, very basic, support for HP StorageWorks and FSC FibreCat
>+ */
>+#include <scsi/scsi.h>
>+#include <scsi/scsi_eh.h>
>+#include <scsi/scsi_cmnd.h>
>+#include <scsi/scsi_device.h>
>+#include <scsi/scsi_dbg.h>
>+
>+#include "dm.h"
>+#include "dm-hw-handler.h"
>+
>+static unsigned emc_rq_error(struct path *path, int result,
>+			     struct scsi_sense_hdr *sense)
>+{
>+	DMINFO("hp_sw: hp_sw_endio 0x%x", result);
>+	/*
>+	 * TODO: get info from qlogic failover driver and
>+	 * eval sense/ASC/ASCQ
>+	 */
>+	/*
>+	 * just return true and send down the IO to see
>+	 * if it worked for now
>+	 */
>+	if (scsi_sense_valid(sense))
>+		scsi_print_sense_hdr("dm-hp-sw", sense);
>+	return 0;
>+}
>+
>+static void hp_sw_pg_init(struct hw_handler *hwh, unsigned bypassed,
>+			   struct path *path)
>+{
>+	unsigned char cmd[MAX_COMMAND_SIZE];
>+
>+	memset(cmd, 0, MAX_COMMAND_SIZE);
>+	cmd[0] = START_STOP;
>+	/* Start spin cycle */
>+	cmd[4] = 1;
>+
>+	DMINFO("hp_sw: queueing START_STOP command on %s",
>+		path->dev->name);
>+
>+	if (dm_scsi_execute_rq(hwh, path, cmd, DMA_NONE, NULL, 0, 60 * HZ,
>+			       __GFP_WAIT))
>+		dm_pg_init_complete(path, MP_FAIL_PATH);
>+}
>+
>+/*
>+ * Placeholders for coming code
>+ */
>+static int hp_sw_create(struct hw_handler *hwh, unsigned argc, char **argv)
>+{
>+	int err;
>+
>+	err = dm_scsi_init_context_pool(hwh);
>+	if (err) {
>+		DMERR("hp_sw: could not setup context pool");
>+		return err;
>+	}
>+	return 0;
>+}
>+
>+static void hp_sw_destroy(struct hw_handler *hwh)
>+{
>+	dm_scsi_destroy_context_pool(hwh);
>+}
>+
>+static struct hw_handler_type hp_sw_hwh = {
>+	.name = "hp_sw",
>+	.module = THIS_MODULE,
>+	.create = hp_sw_create,
>+	.destroy = hp_sw_destroy,
>+	.pg_init = hp_sw_pg_init,
>+	.rq_error = emc_rq_error,
>+};
>+
>+static int __init hp_sw_init(void)
>+{
>+	int r;
>+
>+	r = dm_register_hw_handler(&hp_sw_hwh);
>+	if (r < 0)
>+		DMERR("hp_sw: register failed %d", r);
>+
>+	DMINFO("hp_sw version 0.4 loaded");
>+
>+	return r;
>+}
>+
>+static void __exit hp_sw_exit(void)
>+{
>+	int r;
>+
>+	r = dm_unregister_hw_handler(&hp_sw_hwh);
>+	if (r < 0)
>+		DMERR("hp_sw: unregister failed %d", r);
>+}
>+
>+module_init(hp_sw_init);
>+module_exit(hp_sw_exit);
>+
>+MODULE_DESCRIPTION("HP StorageWorks and FSC FibreCat support for dm-multipath");
>+MODULE_AUTHOR("Mike Christie <michaelc at cs.wisc.edu>");
>+MODULE_LICENSE("GPL");
>diff -Naurp linux-2.6.14-rc2/drivers/md/Kconfig linux-2.6.14-rc2.work/drivers/md/Kconfig
>--- linux-2.6.14-rc2/drivers/md/Kconfig	2005-09-19 22:00:41.000000000 -0500
>+++ linux-2.6.14-rc2.work/drivers/md/Kconfig	2005-09-30 00:05:37.000000000 -0500
>@@ -236,5 +236,10 @@ config DM_MULTIPATH_EMC
> 	---help---
> 	  Multipath support for EMC CX/AX series hardware.
> 
>+config DM_MULTIPATH_HP_SW
>+	tristate "HP StorageWorks and FSC FibreCat support"
>+	depends on DM_MULTIPATH && BLK_DEV_DM && EXPERIMENTAL
>+	---help---
>+	  HP StorageWorks and FSC FibreCat support for dm-multipath.
> endmenu
> 
>diff -Naurp linux-2.6.14-rc2/drivers/md/Makefile linux-2.6.14-rc2.work/drivers/md/Makefile
>--- linux-2.6.14-rc2/drivers/md/Makefile	2005-09-19 22:00:41.000000000 -0500
>+++ linux-2.6.14-rc2.work/drivers/md/Makefile	2005-09-30 00:05:37.000000000 -0500
>@@ -34,6 +34,7 @@ obj-$(CONFIG_BLK_DEV_DM)	+= dm-mod.o
> obj-$(CONFIG_DM_CRYPT)		+= dm-crypt.o
> obj-$(CONFIG_DM_MULTIPATH)	+= dm-multipath.o dm-round-robin.o
> obj-$(CONFIG_DM_MULTIPATH_EMC)	+= dm-emc.o
>+obj-$(CONFIG_DM_MULTIPATH_HP_SW) += dm-hp-sw.o
> obj-$(CONFIG_DM_SNAPSHOT)	+= dm-snapshot.o
> obj-$(CONFIG_DM_MIRROR)		+= dm-mirror.o
> obj-$(CONFIG_DM_ZERO)		+= dm-zero.o
>
>
>--
>dm-devel mailing list
>dm-devel at redhat.com
>https://www.redhat.com/mailman/listinfo/dm-devel
>  
>


-- 
Robert Kenna / Red Hat
Sr Product Mgr - Storage
10 Technology Park Drive
Westford, MA 01886
o: (978) 392-2410 (x22410)
f: (978) 392-1001
c: (978) 771-6314
rkenna at redhat.com




More information about the dm-devel mailing list