android_kernel_samsung_a7y1.../drivers/md
Nigel Croxon 4718021ba0 Don't jump to compute_result state from check_result state
commit 4f4fd7c5798bbdd5a03a60f6269cf1177fbd11ef upstream.

Changing state from check_state_check_result to
check_state_compute_result not only is unsafe but also doesn't
appear to serve a valid purpose.  A raid6 check should only be
pushing out extra writes if doing repair and a mis-match occurs.
The stripe dev management will already try and do repair writes
for failing sectors.

This patch makes the raid6 check_state_check_result handling
work more like raid5's.  If somehow too many failures for a
check, just quit the check operation for the stripe.  When any
checks pass, don't try and use check_state_compute_result for
a purpose it isn't needed for and is unsafe for.  Just mark the
stripe as in sync for passing its parity checks and let the
stripe dev read/write code and the bad blocks list do their
job handling I/O errors.

Repro steps from Xiao:

These are the steps to reproduce this problem:
1. redefined OPT_MEDIUM_ERR_ADDR to 12000 in scsi_debug.c
2. insmod scsi_debug.ko dev_size_mb=11000  max_luns=1 num_tgts=1
3. mdadm --create /dev/md127 --level=6 --raid-devices=5 /dev/sde1 /dev/sde2 /dev/sde3 /dev/sde5 /dev/sde6
sde is the disk created by scsi_debug
4. echo "2" >/sys/module/scsi_debug/parameters/opts
5. raid-check

It panic:
[ 4854.730899] md: data-check of RAID array md127
[ 4854.857455] sd 5:0:0:0: [sdr] tag#80 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 4854.859246] sd 5:0:0:0: [sdr] tag#80 Sense Key : Medium Error [current]
[ 4854.860694] sd 5:0:0:0: [sdr] tag#80 Add. Sense: Unrecovered read error
[ 4854.862207] sd 5:0:0:0: [sdr] tag#80 CDB: Read(10) 28 00 00 00 2d 88 00 04 00 00
[ 4854.864196] print_req_error: critical medium error, dev sdr, sector 11656 flags 0
[ 4854.867409] sd 5:0:0:0: [sdr] tag#100 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 4854.869469] sd 5:0:0:0: [sdr] tag#100 Sense Key : Medium Error [current]
[ 4854.871206] sd 5:0:0:0: [sdr] tag#100 Add. Sense: Unrecovered read error
[ 4854.872858] sd 5:0:0:0: [sdr] tag#100 CDB: Read(10) 28 00 00 00 2e e0 00 00 08 00
[ 4854.874587] print_req_error: critical medium error, dev sdr, sector 12000 flags 4000
[ 4854.876456] sd 5:0:0:0: [sdr] tag#101 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 4854.878552] sd 5:0:0:0: [sdr] tag#101 Sense Key : Medium Error [current]
[ 4854.880278] sd 5:0:0:0: [sdr] tag#101 Add. Sense: Unrecovered read error
[ 4854.881846] sd 5:0:0:0: [sdr] tag#101 CDB: Read(10) 28 00 00 00 2e e8 00 00 08 00
[ 4854.883691] print_req_error: critical medium error, dev sdr, sector 12008 flags 4000
[ 4854.893927] sd 5:0:0:0: [sdr] tag#166 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 4854.896002] sd 5:0:0:0: [sdr] tag#166 Sense Key : Medium Error [current]
[ 4854.897561] sd 5:0:0:0: [sdr] tag#166 Add. Sense: Unrecovered read error
[ 4854.899110] sd 5:0:0:0: [sdr] tag#166 CDB: Read(10) 28 00 00 00 2e e0 00 00 10 00
[ 4854.900989] print_req_error: critical medium error, dev sdr, sector 12000 flags 0
[ 4854.902757] md/raid:md127: read error NOT corrected!! (sector 9952 on sdr1).
[ 4854.904375] md/raid:md127: read error NOT corrected!! (sector 9960 on sdr1).
[ 4854.906201] ------------[ cut here ]------------
[ 4854.907341] kernel BUG at drivers/md/raid5.c:4190!

raid5.c:4190 above is this BUG_ON:

    handle_parity_checks6()
        ...
        BUG_ON(s->uptodate < disks - 1); /* We don't need Q to recover */

Cc: <stable@vger.kernel.org> # v3.16+
OriginalAuthor: David Jeffery <djeffery@redhat.com>
Cc: Xiao Ni <xni@redhat.com>
Tested-by: David Jeffery <djeffery@redhat.com>
Signed-off-by: David Jeffy <djeffery@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-04-06 16:49:43 +02:00
..
bcache bcache: improve sysfs_strtoul_clamp() 2020-04-06 14:51:38 +02:00
persistent-data A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
alta_bigdata.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
bitmap.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
bitmap.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-android-verity.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-android-verity.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-bio-prison.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-bio-prison.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-bio-record.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-bufio.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-bufio.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-builtin.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-block-types.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-metadata.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-metadata.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-policy-cleaner.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-policy-internal.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-policy-mq.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-policy-smq.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-policy.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-policy.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-cache-target.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-crypt.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-delay.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-dirty.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-era-target.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-exception-store.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-exception-store.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-flakey.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-io.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-ioctl.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-kcopyd.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-linear.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-log-userspace-base.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-log-userspace-transfer.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-log-userspace-transfer.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-log-writes.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-log.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-mpath.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-mpath.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-path-selector.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-path-selector.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-queue-length.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-raid1.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-raid.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-region-hash.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-round-robin.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-service-time.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-snap-persistent.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-snap-transient.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-snap.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-stats.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-stats.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-stripe.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-switch.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-sysfs.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-table.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-target.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-thin-metadata.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-thin-metadata.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-thin.c dm thin: add sanity checks to thin-pool and external snapshot creation 2020-04-06 14:50:15 +02:00
dm-uevent.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-uevent.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-verity-avb.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-verity-debug.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-verity-debug.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-verity-fec.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-verity-fec.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-verity-target.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-verity.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm-zero.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dm.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
faulty.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
Kconfig A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
linear.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
linear.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
Makefile A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
md-cluster.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
md-cluster.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
md.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
md.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
multipath.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
multipath.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid0.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid0.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid1.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid1.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid5-cache.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid5.c Don't jump to compute_result state from check_result state 2020-04-06 16:49:43 +02:00
raid5.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid10.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
raid10.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30