libata devices now have a separate sysfs entry, so we should be discovering them properly, too. Signed-off-by: Hannes Reinecke <hare@xxxxxxx> --- 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 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel