summaryrefslogtreecommitdiffstats
path: root/sysfs.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-04-01 12:26:08 +1100
committerNeilBrown <neilb@suse.de>2009-04-01 12:26:08 +1100
commit93ecfa01d47f992a41694ef8c75f6e542bb5ffee (patch)
tree639b88981e0abc646fc8d921d00b8e1d8b1bd375 /sysfs.c
parentb9d77223eb68a211410131b5b0895c547a6d5734 (diff)
downloadmdadm-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.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sysfs.c b/sysfs.c
index 2dad7d3..d4a1e49 100644
--- a/sysfs.c
+++ b/sysfs.c
@@ -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;