X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=sysfs.c;h=725c90c51751c1dedce98d3398d698183d9cdbab;hb=c61c4dd01df75d3a56809db19ec827203505830b;hp=c3bbbe32b1fca1ff0a4a6a02a339aafa20cd3632;hpb=2904b26f059c5d82d9d631c9987e92e3f9af498c;p=thirdparty%2Fmdadm.git diff --git a/sysfs.c b/sysfs.c index c3bbbe32..725c90c5 100644 --- a/sysfs.c +++ b/sysfs.c @@ -100,13 +100,8 @@ void sysfs_init(struct mdinfo *mdi, int fd, int devnum) struct mdinfo *sysfs_read(int fd, int devnum, unsigned long options) { - /* Longest possible name in sysfs, mounted at /sys, is - * /sys/block/md_dXXX/md/dev-XXXXX/block/dev - * /sys/block/md_dXXX/md/metadata_version - * which is about 41 characters. 50 should do for now - */ - char fname[50]; - char buf[1024]; + char fname[PATH_MAX]; + char buf[PATH_MAX]; char *base; char *dbase; struct mdinfo *sra; @@ -278,22 +273,20 @@ struct mdinfo *sysfs_read(int fd, int devnum, unsigned long options) strcpy(dbase, "block/dev"); if (load_sys(fname, buf)) { + /* assume this is a stale reference to a hot + * removed device + */ free(dev); - if (options & SKIP_GONE_DEVS) - continue; - else - goto abort; + continue; } sscanf(buf, "%d:%d", &dev->disk.major, &dev->disk.minor); /* special case check for block devices that can go 'offline' */ - if (options & SKIP_GONE_DEVS) { - strcpy(dbase, "block/device/state"); - if (load_sys(fname, buf) == 0 && - strncmp(buf, "offline", 7) == 0) { - free(dev); - continue; - } + strcpy(dbase, "block/device/state"); + if (load_sys(fname, buf) == 0 && + strncmp(buf, "offline", 7) == 0) { + free(dev); + continue; } /* finally add this disk to the array */ @@ -574,8 +567,8 @@ int sysfs_set_array(struct mdinfo *info, int vers) int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int resume) { - char dv[100]; - char nm[100]; + char dv[PATH_MAX]; + char nm[PATH_MAX]; char *dname; int rv; @@ -857,9 +850,6 @@ int WaitClean(char *dev, int sock, int verbose) tm.tv_sec = 5; tm.tv_usec = 0; - /* give mdmon a chance to checkpoint resync */ - sysfs_set_str(mdi, NULL, "sync_action", "idle"); - FD_ZERO(&fds); /* wait for array_state to be clean */