summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Majchrzak <tomasz.majchrzak@intel.com>2016-10-27 11:34:16 +0200
committerJes Sorensen <Jes.Sorensen@redhat.com>2016-11-17 09:46:42 -0500
commitcf52eff58ab9d08e3d016c4f22da8adfc295d7e0 (patch)
treec9702f2ab1392ea108d6fdcafe85998dbbe4db1b
parentbbb52f2b1dd049a15323d7bccde50e5818abd175 (diff)
downloadmdadm-cf52eff58ab9d08e3d016c4f22da8adfc295d7e0.tar.gz
Increase buffer for sysfs disk state
Bad block support has incremented sysfs disk state reported by kernel ("external_bbl") so it became longer than 20 bytes. It causes reshape to fail as it reads truncated entry from sysfs. Increase buffer so it can accommodate the string including all state values currently implemented in kernel at the same time. Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
-rwxr-xr-xGrow.c6
-rw-r--r--monitor.c4
-rw-r--r--super-intel.c5
3 files changed, 9 insertions, 6 deletions
diff --git a/Grow.c b/Grow.c
index a8f6243..455c5f9 100755
--- a/Grow.c
+++ b/Grow.c
@@ -4048,8 +4048,10 @@ static int grow_backup(struct mdinfo *sra,
if (sd->disk.state & (1<<MD_DISK_FAULTY))
continue;
if (sd->disk.state & (1<<MD_DISK_SYNC)) {
- char sbuf[20];
- if (sysfs_get_str(sra, sd, "state", sbuf, 20) < 0 ||
+ char sbuf[100];
+
+ if (sysfs_get_str(sra, sd, "state",
+ sbuf, sizeof(sbuf)) < 0 ||
strstr(sbuf, "faulty") ||
strstr(sbuf, "in_sync") == NULL) {
/* this device is dead */
diff --git a/monitor.c b/monitor.c
index 4c79ce2..3c554ab 100644
--- a/monitor.c
+++ b/monitor.c
@@ -131,8 +131,8 @@ static enum sync_action read_action( int fd)
int read_dev_state(int fd)
{
- char buf[60];
- int n = read_attr(buf, 60, fd);
+ char buf[100];
+ int n = read_attr(buf, sizeof(buf), fd);
char *cp;
int rv = 0;
diff --git a/super-intel.c b/super-intel.c
index 1f79eab..5740088 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -10708,9 +10708,10 @@ int check_degradation_change(struct mdinfo *info,
if (sd->disk.state & (1<<MD_DISK_FAULTY))
continue;
if (sd->disk.state & (1<<MD_DISK_SYNC)) {
- char sbuf[20];
+ char sbuf[100];
+
if (sysfs_get_str(info,
- sd, "state", sbuf, 20) < 0 ||
+ sd, "state", sbuf, sizeof(sbuf)) < 0 ||
strstr(sbuf, "faulty") ||
strstr(sbuf, "in_sync") == NULL) {
/* this device is dead */