dm raid1: report flush errors separately in status
Report flush errors as 'F' instead of 'D' for log and mirror devices.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c
index 315e36a..7035582 100644
--- a/drivers/md/dm-log.c
+++ b/drivers/md/dm-log.c
@@ -237,6 +237,7 @@
* Disk log fields
*/
int log_dev_failed;
+ int log_dev_flush_failed;
struct dm_dev *log_dev;
struct log_header header;
@@ -425,6 +426,7 @@
} else {
lc->log_dev = dev;
lc->log_dev_failed = 0;
+ lc->log_dev_flush_failed = 0;
lc->header_location.bdev = lc->log_dev->bdev;
lc->header_location.sector = 0;
@@ -633,8 +635,11 @@
/* write the new header */
r = rw_header(lc, WRITE);
- if (!r)
+ if (!r) {
r = flush_header(lc);
+ if (r)
+ lc->log_dev_flush_failed = 1;
+ }
if (r) {
DMWARN("%s: Failed to write header on dirty region log device",
lc->log_dev->name);
@@ -703,9 +708,10 @@
else {
if (lc->touched_dirtied) {
r = flush_header(lc);
- if (r)
+ if (r) {
+ lc->log_dev_flush_failed = 1;
fail_log_device(lc);
- else
+ } else
lc->touched_dirtied = 0;
}
lc->touched_cleaned = 0;
@@ -805,7 +811,9 @@
switch(status) {
case STATUSTYPE_INFO:
DMEMIT("3 %s %s %c", log->type->name, lc->log_dev->name,
- lc->log_dev_failed ? 'D' : 'A');
+ lc->log_dev_flush_failed ? 'F' :
+ lc->log_dev_failed ? 'D' :
+ 'A');
break;
case STATUSTYPE_TABLE: