51 lines
1.6 KiB
Diff
51 lines
1.6 KiB
Diff
From db5377883fef8655aac56b5d7ce5408f8ae494e0 Mon Sep 17 00:00:00 2001
|
|
From: Xiao Ni <xni@redhat.com>
|
|
Date: Tue, 9 Feb 2021 17:39:51 +0800
|
|
Subject: [PATCH 1/1] It should be FAILED when raid has not enough active disks
|
|
|
|
It can't remove the disk if there are not enough disks. For example, raid5 can't remove the
|
|
second disk. If the second disk is unplug from machine, it's better show missing and the raid
|
|
should be FAILED. It's better for administrator to monitor the raid.
|
|
|
|
Signed-off-by: Xiao Ni <xni@redhat.com>
|
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
|
---
|
|
Detail.c | 14 ++++++++++----
|
|
1 file changed, 10 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/Detail.c b/Detail.c
|
|
index f8dea6f..cd26fb0 100644
|
|
--- a/Detail.c
|
|
+++ b/Detail.c
|
|
@@ -355,9 +355,14 @@ int Detail(char *dev, struct context *c)
|
|
avail = xcalloc(array.raid_disks, 1);
|
|
|
|
for (d = 0; d < array.raid_disks; d++) {
|
|
-
|
|
- if ((disks[d*2].state & (1<<MD_DISK_SYNC)) ||
|
|
- (disks[d*2+1].state & (1<<MD_DISK_SYNC))) {
|
|
+ char *dv, *dv_rep;
|
|
+ dv = map_dev_preferred(disks[d*2].major,
|
|
+ disks[d*2].minor, 0, c->prefer);
|
|
+ dv_rep = map_dev_preferred(disks[d*2+1].major,
|
|
+ disks[d*2+1].minor, 0, c->prefer);
|
|
+
|
|
+ if ((dv && (disks[d*2].state & (1<<MD_DISK_SYNC))) ||
|
|
+ (dv_rep && (disks[d*2+1].state & (1<<MD_DISK_SYNC)))) {
|
|
avail_disks ++;
|
|
avail[d] = 1;
|
|
} else
|
|
@@ -789,7 +794,8 @@ This is pretty boring
|
|
&max_devices, n_devices);
|
|
else
|
|
printf(" %s", dv);
|
|
- }
|
|
+ } else if (disk.major | disk.minor)
|
|
+ printf(" missing");
|
|
if (!c->brief)
|
|
printf("\n");
|
|
}
|
|
--
|
|
2.7.5
|
|
|