Introduce devid2kname - slightly different to devid2devnm.
The purpose od devid2devnm is to return a kernel name of an md device, whether that device is a whole device or a partition, we want the whole device. md4, never md4p2. In one place I was using devid2devnm where I really wanted the partition if there was one ... and wasn't really interested in it being an md device. So introduce a new 'devid2kname' for that case. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
879982efa9
commit
bc17158dcc
26
lib.c
26
lib.c
|
@ -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];
|
||||
|
|
1
mdadm.h
1
mdadm.h
|
@ -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);
|
||||
|
|
2
sysfs.c
2
sysfs.c
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue