diff options
-rw-r--r-- | lib.c | 26 | ||||
-rw-r--r-- | mdadm.h | 1 | ||||
-rw-r--r-- | sysfs.c | 2 |
3 files changed, 28 insertions, 1 deletions
@@ -58,6 +58,32 @@ static int mdp_major = -1; return mdp_major; } +char *devid2kname(int devid) +{ + char path[30]; + char link[200]; + static char devnm[32]; + char *cp; + int n; + + /* Look at the + * /sys/dev/block/%d:%d link which must look like + * and take the last component. + */ + sprintf(path, "/sys/dev/block/%d:%d", major(devid), + minor(devid)); + n = readlink(path, link, sizeof(link)-1); + if (n > 0) { + link[n] = 0; + cp = strrchr(link, '/'); + if (cp) { + strcpy(devnm, cp+1); + return devnm; + } + } + return NULL; +} + char *devid2devnm(int devid) { char path[30]; @@ -1349,6 +1349,7 @@ extern void print_r10_layout(int layout); extern char *find_free_devnm(int use_partitions); extern void put_md_name(char *name); +extern char *devid2kname(int devid); extern char *devid2devnm(int devid); extern int devnm2devid(char *devnm); extern char *get_md_name(char *devnm); @@ -682,7 +682,7 @@ int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume) return rv; memset(nm, 0, sizeof(nm)); - dname = devid2devnm(makedev(sd->disk.major, sd->disk.minor)); + dname = devid2kname(makedev(sd->disk.major, sd->disk.minor)); strcpy(sd->sys_name, "dev-"); strcpy(sd->sys_name+4, dname); |