]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
FIX: sysfs_disk_to_scsi_id() adapted to current sysfs format
authorKrzysztof Wojcik <krzysztof.wojcik@intel.com>
Fri, 18 Feb 2011 12:51:34 +0000 (23:51 +1100)
committerNeilBrown <neilb@suse.de>
Fri, 18 Feb 2011 12:51:34 +0000 (23:51 +1100)
Problem: sysfs_disk_to_scsi_id() not returns correct scsi_id value.
Reason: sysfs format has been changed

This patch adapt sysfs_disk_to_scsi_id() to new sysfs format.

Signed-off-by: Krzysztof Wojcik <krzysztof.wojcik@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
sysfs.c

diff --git a/sysfs.c b/sysfs.c
index f0773d476611fa8e66682ed770d0141de22e4263..883a834871694385e978758a463f37197747c209 100644 (file)
--- a/sysfs.c
+++ b/sysfs.c
@@ -705,7 +705,7 @@ int sysfs_disk_to_scsi_id(int fd, __u32 *id)
        if (fstat(fd, &st))
                return 1;
 
-       snprintf(path, sizeof(path), "/sys/dev/block/%d:%d/device",
+       snprintf(path, sizeof(path), "/sys/dev/block/%d:%d/device/scsi_device",
                 major(st.st_rdev), minor(st.st_rdev));
 
        dir = opendir(path);
@@ -714,8 +714,7 @@ int sysfs_disk_to_scsi_id(int fd, __u32 *id)
 
        de = readdir(dir);
        while (de) {
-               if (strncmp("scsi_disk:", de->d_name,
-                           strlen("scsi_disk:")) == 0)
+               if (strchr(de->d_name, ':'))
                        break;
                de = readdir(dir);
        }
@@ -724,21 +723,20 @@ int sysfs_disk_to_scsi_id(int fd, __u32 *id)
        if (!de)
                return 1;
 
-       c1 = strchr(de->d_name, ':');
-       c1++;
+       c1 = de->d_name;
        c2 = strchr(c1, ':');
        *c2 = '\0';
        *id = strtol(c1, NULL, 10) << 24; /* host */
        c1 = c2 + 1;
        c2 = strchr(c1, ':');
        *c2 = '\0';
-       *id |= strtol(c1, NULL, 10) << 16; /* channel */
+       *id |= strtol(c1, NULL, 10) << 16; /* bus */
        c1 = c2 + 1;
        c2 = strchr(c1, ':');
        *c2 = '\0';
-       *id |= strtol(c1, NULL, 10) << 8; /* lun */
+       *id |= strtol(c1, NULL, 10) << 8; /* target */
        c1 = c2 + 1;
-       *id |= strtol(c1, NULL, 10); /* id */
+       *id |= strtol(c1, NULL, 10); /* lun */
 
        return 0;
 }