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)==9)
- sprintf(mdi->sys_name, "md%d", (int)minor(stb.st_rdev));
- else
- sprintf(mdi->sys_name, "md_d%d",
- (int)minor(stb.st_rdev)>>MdpMinorShift);
- } 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
char fname[50];
int n;
if (fstat(fd, &stb)) return 0;
- if (major(stb.st_rdev) == 9)
+ if (major(stb.st_rdev) != get_mdp_major())
sprintf(fname, "/sys/block/md%d/md/component_size",
(int)minor(stb.st_rdev));
else
return sysfs_set_str(sra, dev, name, valstr);
}
+int sysfs_uevent(struct mdinfo *sra, char *event)
+{
+ char fname[50];
+ int n;
+ int fd;
+
+ sprintf(fname, "/sys/block/%s/uevent",
+ sra->sys_name);
+ fd = open(fname, O_WRONLY);
+ if (fd < 0)
+ return -1;
+ n = write(fd, event, strlen(event));
+ close(fd);
+ return 0;
+}
+
int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev,
char *name, unsigned long long *val)
{