Skip to content

Commit 67b8dc4

Browse files
Robert Beckerneilbrown
authored andcommitted
md/raid10: print more useful messages on device failure.
When we get a read error on a device in a RAID10, and attempting to repair the error fails, print more useful messages about why it failed. Signed-off-by: Robert Becker <Rob.Becker@riverbed.com> Signed-off-by: NeilBrown <neilb@suse.de>
1 parent ffa2332 commit 67b8dc4

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

drivers/md/raid10.c

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,7 @@ static void fix_read_error(conf_t *conf, mddev_t *mddev, r10bio_t *r10_bio)
14881488
/* write it back and re-read */
14891489
rcu_read_lock();
14901490
while (sl != r10_bio->read_slot) {
1491+
char b[BDEVNAME_SIZE];
14911492
int d;
14921493
if (sl==0)
14931494
sl = conf->copies;
@@ -1503,9 +1504,21 @@ static void fix_read_error(conf_t *conf, mddev_t *mddev, r10bio_t *r10_bio)
15031504
r10_bio->devs[sl].addr +
15041505
sect + rdev->data_offset,
15051506
s<<9, conf->tmppage, WRITE)
1506-
== 0)
1507+
== 0) {
15071508
/* Well, this device is dead */
1509+
printk(KERN_NOTICE
1510+
"raid10:%s: read correction "
1511+
"write failed"
1512+
" (%d sectors at %llu on %s)\n",
1513+
mdname(mddev), s,
1514+
(unsigned long long)(sect+
1515+
rdev->data_offset),
1516+
bdevname(rdev->bdev, b));
1517+
printk(KERN_NOTICE "raid10:%s: failing "
1518+
"drive\n",
1519+
bdevname(rdev->bdev, b));
15081520
md_error(mddev, rdev);
1521+
}
15091522
rdev_dec_pending(rdev, mddev);
15101523
rcu_read_lock();
15111524
}
@@ -1526,17 +1539,30 @@ static void fix_read_error(conf_t *conf, mddev_t *mddev, r10bio_t *r10_bio)
15261539
if (sync_page_io(rdev->bdev,
15271540
r10_bio->devs[sl].addr +
15281541
sect + rdev->data_offset,
1529-
s<<9, conf->tmppage, READ) == 0)
1542+
s<<9, conf->tmppage,
1543+
READ) == 0) {
15301544
/* Well, this device is dead */
1545+
printk(KERN_NOTICE
1546+
"raid10:%s: unable to read back "
1547+
"corrected sectors"
1548+
" (%d sectors at %llu on %s)\n",
1549+
mdname(mddev), s,
1550+
(unsigned long long)(sect+
1551+
rdev->data_offset),
1552+
bdevname(rdev->bdev, b));
1553+
printk(KERN_NOTICE "raid10:%s: failing drive\n",
1554+
bdevname(rdev->bdev, b));
1555+
15311556
md_error(mddev, rdev);
1532-
else
1557+
} else {
15331558
printk(KERN_INFO
15341559
"raid10:%s: read error corrected"
15351560
" (%d sectors at %llu on %s)\n",
15361561
mdname(mddev), s,
15371562
(unsigned long long)(sect+
15381563
rdev->data_offset),
15391564
bdevname(rdev->bdev, b));
1565+
}
15401566

15411567
rdev_dec_pending(rdev, mddev);
15421568
rcu_read_lock();

0 commit comments

Comments
 (0)