• Bian Yu's avatar
    raid5: Retry R5_ReadNoMerge flag when hit a read error. · edfa1f65
    Bian Yu authored
    Because of block layer merge, one bio fails will cause other bios
    which belongs to the same request fails, so raid5_end_read_request
    will record all these bios as badblocks.
    If retry request with R5_ReadNoMerge flag to avoid bios merge,
    badblocks can only record sector which is bad exactly.
    
    test:
    hdparm --yes-i-know-what-i-am-doing --make-bad-sector 300000 /dev/sdb
    mdadm -C /dev/md0 -l5 -n3 /dev/sd[bcd] --assume-clean
    mdadm /dev/md0 -f /dev/sdd
    mdadm /dev/md0 -r /dev/sdd
    mdadm --zero-superblock /dev/sdd
    mdadm /dev/md0 -a /dev/sdd
    
    1. Without this patch:
    cat /sys/block/md0/md/rd*/bad_blocks
    299776 256
    299776 256
    
    2. With this patch:
    cat /sys/block/md0/md/rd*/bad_blocks
    300000 8
    300000 8
    Signed-off-by: default avatarBian Yu <bianyu@kedacom.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    edfa1f65
raid5.c 196 KB