[dm-devel] [PATCH 10/13] Discover target ids for ATA

Hannes Reinecke hare at suse.de
Wed Jan 16 12:14:13 UTC 2013


libata devices now have a separate sysfs entry, so we should be
discovering them properly, too.

Signed-off-by: Hannes Reinecke <hare at suse.de>
---
 libmultipath/discovery.c |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
index 3fd33a3..b6bce22 100644
--- a/libmultipath/discovery.c
+++ b/libmultipath/discovery.c
@@ -207,7 +207,7 @@ sysfs_get_tgt_nodename (struct path *pp, char * node)
 {
 	const char *targetid, *value;
 	struct udev_device *parent, *tgtdev;
-	int host, channel, rport_id = -1;
+	int host, channel, rport_id = -1, ata_id = -1;
 
 	parent = udev_device_get_parent_with_subsystem_devtype(pp->udev, "scsi", "scsi_device");
 	if (!parent)
@@ -275,6 +275,23 @@ sysfs_get_tgt_nodename (struct path *pp, char * node)
 				udev_device_unref(tgtdev);
 		}
 	}
+	/* Check for libata */
+	parent = pp->udev;
+	targetid = NULL;
+	while (parent) {
+		targetid = udev_device_get_sysname(parent);
+		if (targetid && sscanf(targetid, "ata%d", &ata_id) == 1)
+			break;
+		parent = udev_device_get_parent(parent);
+		targetid = NULL;
+	}
+	if (targetid) {
+		pp->sg_id.proto_id = SCSI_PROTOCOL_ATA;
+		pp->sg_id.transport_id = ata_id;
+		snprintf(node, NODE_NAME_SIZE, "ata-%d.00", ata_id);
+		return 0;
+	}
+	pp->sg_id.proto_id = SCSI_PROTOCOL_UNSPEC;
 	return 1;
 }
 
-- 
1.7.4.2




More information about the dm-devel mailing list