linux/drivers/md
Alexey Obitotskiy 11367799f3 md: Prevent IO hold during accessing to faulty raid5 array
After array enters in faulty state (e.g. number of failed drives
becomes more then accepted for raid5 level) it sets error flags
(one of this flags is MD_CHANGE_PENDING). For internal metadata
arrays MD_CHANGE_PENDING cleared into md_update_sb, but not for
external metadata arrays. MD_CHANGE_PENDING flag set prevents to
finish all new or non-finished IOs to array and hold them in
pending state. In some cases this can leads to deadlock situation.

For example, we have faulty array (2 of 4 drives failed) and
udev handle array state changes and blkid started (or other
userspace application that used array to read/write) but unable
to finish reads due to IO hold. At the same time we unable to get
exclusive access to array (to stop array in our case) because
another external application still use this array.

Fix makes possible to return IO with errors immediately.
So external application can finish working with array and
give exclusive access to other applications to perform
required management actions with array.

Signed-off-by: Alexey Obitotskiy <aleksey.obitotskiy@intel.com>
Signed-off-by: Shaohua Li <shli@fb.com>
2016-08-05 22:03:10 -07:00
..
bcache block: simplify and cleanup bvec pool handling 2016-07-20 17:37:02 -06:00
persistent-data dm btree: fix a bug in dm_btree_find_next_single() 2016-07-20 12:43:34 -04:00
bitmap.c MD: hold mddev lock to change bitmap location 2016-08-05 22:02:40 -07:00
bitmap.h md-cluster: sync bitmap when node received RESYNCING msg 2016-05-04 12:39:35 -07:00
dm-bio-prison.c
dm-bio-prison.h
dm-bio-record.h
dm-bufio.c dm: use bio op accessors 2016-06-07 13:41:38 -06:00
dm-bufio.h
dm-builtin.c dm: move request-based code out to dm-rq.[hc] 2016-06-10 15:15:44 -04:00
dm-cache-block-types.h
dm-cache-metadata.c dm cache metadata: fix cmd_read_lock() acquiring write lock 2016-04-17 11:24:46 -04:00
dm-cache-metadata.h dm cache: make sure every metadata function checks fail_io 2016-03-10 17:12:12 -05:00
dm-cache-policy-cleaner.c
dm-cache-policy-internal.h
dm-cache-policy-smq.c dm cache policy smq: clarify that mq registration failure was for 'mq' 2016-03-10 17:12:11 -05:00
dm-cache-policy.c
dm-cache-policy.h
dm-cache-target.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
dm-core.h dm: move request-based code out to dm-rq.[hc] 2016-06-10 15:15:44 -04:00
dm-crypt.c dm crypt: Fix sparse complaints 2016-07-01 10:53:21 -04:00
dm-delay.c dm: rename target's per_bio_data_size to per_io_data_size 2016-02-22 22:34:37 -05:00
dm-era-target.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
dm-exception-store.c
dm-exception-store.h
dm-flakey.c block, drivers, fs: shrink bi_rw from long to int 2016-06-07 13:41:38 -06:00
dm-io.c dm: move request-based code out to dm-rq.[hc] 2016-06-10 15:15:44 -04:00
dm-ioctl.c dm: allow bio-based table to be upgraded to bio-based with DAX support 2016-07-20 23:49:52 -04:00
dm-kcopyd.c dm: move request-based code out to dm-rq.[hc] 2016-06-10 15:15:44 -04:00
dm-linear.c libnvdimm for 4.8 2016-07-28 17:38:16 -07:00
dm-log-userspace-base.c
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
dm-log.c dm: use bio op accessors 2016-06-07 13:41:38 -06:00
dm-mpath.c dm mpath: add optional "queue_mode" feature 2016-06-10 15:16:02 -04:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h dm path selector: remove 'repeat_count' return from .select_path hook 2016-02-22 22:34:42 -05:00
dm-queue-length.c dm path selector: remove 'repeat_count' return from .select_path hook 2016-02-22 22:34:42 -05:00
dm-raid1.c block: get rid of bio_rw and READA 2016-07-20 17:37:01 -06:00
dm-raid.c dm raid: fix random optimal_io_size for raid0 2016-07-19 11:37:08 -04:00
dm-region-hash.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
dm-round-robin.c dm round robin: use percpu 'repeat_count' and 'current_path' 2016-02-22 22:34:42 -05:00
dm-rq.c dm: fix second blk_delay_queue() parameter to be in msec units not jiffies 2016-07-18 15:37:34 -04:00
dm-rq.h dm mpath: add optional "queue_mode" feature 2016-06-10 15:16:02 -04:00
dm-service-time.c dm path selector: remove 'repeat_count' return from .select_path hook 2016-02-22 22:34:42 -05:00
dm-snap-persistent.c dm: use bio op accessors 2016-06-07 13:41:38 -06:00
dm-snap-transient.c
dm-snap.c libnvdimm for 4.8 2016-07-28 17:38:16 -07:00
dm-stats.c dm: move request-based code out to dm-rq.[hc] 2016-06-10 15:15:44 -04:00
dm-stats.h
dm-stripe.c libnvdimm for 4.8 2016-07-28 17:38:16 -07:00
dm-switch.c
dm-sysfs.c dm: move request-based code out to dm-rq.[hc] 2016-06-10 15:15:44 -04:00
dm-table.c dm error: add DAX support 2016-07-20 23:49:50 -04:00
dm-target.c libnvdimm for 4.8 2016-07-28 17:38:16 -07:00
dm-thin-metadata.c dm thin: fix a race condition between discarding and provisioning a block 2016-07-20 12:43:35 -04:00
dm-thin-metadata.h dm thin: fix a race condition between discarding and provisioning a block 2016-07-20 12:43:35 -04:00
dm-thin.c dm thin: fix a race condition between discarding and provisioning a block 2016-07-20 12:43:35 -04:00
dm-uevent.c
dm-uevent.h
dm-verity-fec.c dm verity fec: fix block calculation 2016-07-01 23:29:08 -04:00
dm-verity-fec.h
dm-verity-target.c dm: rename target's per_bio_data_size to per_io_data_size 2016-02-22 22:34:37 -05:00
dm-verity.h
dm-zero.c block: get rid of bio_rw and READA 2016-07-20 17:37:01 -06:00
dm.c libnvdimm for 4.8 2016-07-28 17:38:16 -07:00
dm.h dm: add infrastructure for DAX support 2016-07-20 23:49:49 -04:00
faulty.c
Kconfig dm: add missing newline between DM_DEBUG_BLOCK_STACK_TRACING and DM_BUFIO 2016-03-10 17:12:11 -05:00
linear.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
linear.h
Makefile dm: move request-based code out to dm-rq.[hc] 2016-06-10 15:15:44 -04:00
md-cluster.c md-cluster: check the return value of process_recvd_msg 2016-05-09 09:24:04 -07:00
md-cluster.h md-cluster: gather resync infos and enable recv_thread after bitmap is ready 2016-05-09 09:24:03 -07:00
md.c Merge branch 'mymd/for-next' into mymd/for-linus 2016-07-28 09:34:14 -07:00
md.h Merge branch 'mymd/for-next' into mymd/for-linus 2016-07-28 09:34:14 -07:00
multipath.c Merge branch 'mymd/for-next' into mymd/for-linus 2016-07-28 09:34:14 -07:00
multipath.h
raid0.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
raid0.h
raid1.c Merge branch 'mymd/for-next' into mymd/for-linus 2016-07-28 09:34:14 -07:00
raid1.h
raid5-cache.c block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH 2016-06-07 13:41:38 -06:00
raid5.c md: Prevent IO hold during accessing to faulty raid5 array 2016-08-05 22:03:10 -07:00
raid5.h RAID5: revert e9e4c377e2 to fix a livelock 2016-02-26 09:44:56 -08:00
raid10.c raid10: increment write counter after bio is split 2016-07-30 14:09:30 -07:00
raid10.h raid10: improve random reads performance 2016-07-19 15:20:28 -07:00