From d7ab966bb82d1dfe5d532ae7bcbe233e906628ae Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 4 Nov 2008 10:35:08 +1100 Subject: Move recently merged /sys/dev/ lookup into stat2devnum. But sysfs_init and stat2devnum try to convert stat information into an md devnum. Combine all the value of both pieces of code into stat2devnum and have sysfs_init call that. Signed-off-by: NeilBrown --- sysfs.c | 46 +++++++++------------------------------------- 1 file changed, 9 insertions(+), 37 deletions(-) (limited to 'sysfs.c') diff --git a/sysfs.c b/sysfs.c index 8bcdaa5..00f42ea 100644 --- a/sysfs.c +++ b/sysfs.c @@ -82,49 +82,21 @@ int sysfs_open(int devnum, char *devname, char *attr) void sysfs_init(struct mdinfo *mdi, int fd, int devnum) { if (fd >= 0) { - struct stat stb; mdu_version_t vers; - if (fstat(fd, &stb)) - return; if (ioctl(fd, RAID_VERSION, &vers) != 0) return; - if (major(stb.st_rdev) == MD_MAJOR) - sprintf(mdi->sys_name, "md%d", (int)minor(stb.st_rdev)); - else if (major(stb.st_rdev) == get_mdp_major()) - sprintf(mdi->sys_name, "md_d%d", - (int)minor(stb.st_rdev)>>MdpMinorShift); - else { - /* must be an extended-minor partition. Look at the - * /sys/dev/block/%d:%d link which must look like - * ../../block/mdXXX/mdXXXpYY - */ - char path[30]; - char link[200]; - char *cp; - int n; - sprintf(path, "/sys/dev/block/%d:%d", major(stb.st_rdev), - minor(stb.st_rdev)); - n = readlink(path, link, sizeof(link)-1); - if (n <= 0) - return; - link[n] = 0; - cp = strrchr(link, '/'); - if (cp) *cp = 0; - cp = strchr(link, '/'); - if (cp && strncmp(cp, "/md", 3) == 0) - strcpy(mdi->sys_name, cp+1); - else - return; - } - } else { - if (devnum >= 0) - sprintf(mdi->sys_name, "md%d", devnum); - else - sprintf(mdi->sys_name, "md_d%d", - -1-devnum); + devnum = fd2devnum(fd); } + if (devnum == NoMdDev) + return; + if (devnum >= 0) + sprintf(mdi->sys_name, "md%d", devnum); + else + sprintf(mdi->sys_name, "md_d%d", + -1-devnum); } + struct mdinfo *sysfs_read(int fd, int devnum, unsigned long options) { /* Longest possible name in sysfs, mounted at /sys, is -- cgit