diff options
author | NeilBrown <neilb@suse.de> | 2009-04-01 12:26:08 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-04-01 12:26:08 +1100 |
commit | 93ecfa01d47f992a41694ef8c75f6e542bb5ffee (patch) | |
tree | 639b88981e0abc646fc8d921d00b8e1d8b1bd375 /sysfs.c | |
parent | b9d77223eb68a211410131b5b0895c547a6d5734 (diff) | |
download | mdadm-93ecfa01d47f992a41694ef8c75f6e542bb5ffee.tar.gz mdadm-93ecfa01d47f992a41694ef8c75f6e542bb5ffee.tar.xz mdadm-93ecfa01d47f992a41694ef8c75f6e542bb5ffee.zip |
grow: don't wait forever for critical section to pass.
If an array reshape completed within 1 second, then --grow will not
notice that it has finished and will keep waiting for the critical
section to pass.
So be more cautious in the test.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'sysfs.c')
-rw-r--r-- | sysfs.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -466,6 +466,25 @@ int sysfs_get_ll(struct mdinfo *sra, struct mdinfo *dev, return 0; } +int sysfs_get_str(struct mdinfo *sra, struct mdinfo *dev, + char *name, char *val, int size) +{ + char fname[50]; + int n; + int fd; + sprintf(fname, "/sys/block/%s/md/%s/%s", + sra->sys_name, dev?dev->sys_name:"", name); + fd = open(fname, O_RDONLY); + if (fd < 0) + return -1; + n = read(fd, val, size); + close(fd); + if (n <= 0) + return -1; + val[n] = 0; + return n; +} + int sysfs_set_safemode(struct mdinfo *sra, unsigned long ms) { unsigned long sec; |