Skip to content

Commit

Permalink
raid10: record correct address of bad block
Browse files Browse the repository at this point in the history
For failed write request record block address on a device, not block
address in an array.

Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
Signed-off-by: Shaohua Li <shli@fb.com>
  • Loading branch information
Tomasz Majchrzak authored and Shaohua Li committed Aug 24, 2016
1 parent 0f6187d commit 2702862
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions drivers/md/raid10.c
Original file line number Diff line number Diff line change
Expand Up @@ -2465,20 +2465,21 @@ static int narrow_write_error(struct r10bio *r10_bio, int i)

while (sect_to_write) {
struct bio *wbio;
sector_t wsector;
if (sectors > sect_to_write)
sectors = sect_to_write;
/* Write at 'sector' for 'sectors' */
wbio = bio_clone_mddev(bio, GFP_NOIO, mddev);
bio_trim(wbio, sector - bio->bi_iter.bi_sector, sectors);
wbio->bi_iter.bi_sector = (r10_bio->devs[i].addr+
choose_data_offset(r10_bio, rdev) +
(sector - r10_bio->sector));
wsector = r10_bio->devs[i].addr + (sector - r10_bio->sector);
wbio->bi_iter.bi_sector = wsector +
choose_data_offset(r10_bio, rdev);
wbio->bi_bdev = rdev->bdev;
bio_set_op_attrs(wbio, REQ_OP_WRITE, 0);

if (submit_bio_wait(wbio) < 0)
/* Failure! */
ok = rdev_set_badblocks(rdev, sector,
ok = rdev_set_badblocks(rdev, wsector,
sectors, 0)
&& ok;

Expand Down

0 comments on commit 2702862

Please sign in to comment.