NeilBrown
5a85071c2c
md: use a separate bio_set for synchronous IO.
...
md devices allocate a bio_set and use it for two
distinct purposes.
mddev->bio_set is used to clone bios as part of sending
upper level requests down to lower level devices,
and it is also use for synchronous IO such as superblock
and bitmap updates, and for correcting read errors.
This multiple usage can lead to deadlocks. It is likely
that cloned bios might be queued for write and to be
waiting for a metadata update before the write can be permitted.
If the cloning exhausted mddev->bio_set, the metadata update
may not be able to proceed.
This scenario has been seen during heavy testing, with lots of IO and
lots of memory pressure.
Address this by adding a new bio_set specifically for synchronous IO.
All synchronous IO goes directly to the underlying device and is not
queued at the md level, so request using entries from the new
mddev->sync_set will complete in a timely fashion.
Requests that use mddev->bio_set will sometimes need to wait
for synchronous IO, but will no longer risk deadlocking that iO.
Also: small simplification in mddev_put(): there is no need to
wait until the spinlock is released before calling bioset_free().
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
2017-06-21 10:52:36 -07:00
..
bcache
drivers/md/bcache/super.c: use kvmalloc
2017-05-08 17:15:13 -07:00
persistent-data
dm space map disk: fix some book keeping in the disk space map
2017-05-15 15:09:50 -04:00
bitmap.c
md: uuid debug statement now in processor byte order.
2017-05-24 15:58:43 -07:00
bitmap.h
md: move bitmap_destroy to the beginning of __md_stop
2017-03-16 16:55:58 -07:00
dm-bio-prison-v1.c
dm bio prison v2: new interface for the bio prison
2017-03-07 11:30:16 -05:00
dm-bio-prison-v1.h
dm bio prison v2: new interface for the bio prison
2017-03-07 11:30:16 -05:00
dm-bio-prison-v2.c
dm bio prison v2: new interface for the bio prison
2017-03-07 11:30:16 -05:00
dm-bio-prison-v2.h
dm bio prison v2: new interface for the bio prison
2017-03-07 11:30:16 -05:00
dm-bio-record.h
dm-bufio.c
dm: make flush bios explicitly sync
2017-05-31 10:50:23 -04:00
dm-bufio.h
dm bufio: add sector start offset to dm-bufio interface
2017-03-07 13:28:33 -05:00
dm-builtin.c
dm-cache-background-tracker.c
dm cache: handle kmalloc failure allocating background_tracker struct
2017-05-17 09:44:53 -04:00
dm-cache-background-tracker.h
dm cache: significant rework to leverage dm-bio-prison-v2
2017-03-07 13:28:31 -05:00
dm-cache-block-types.h
dm-cache-metadata.c
dm cache metadata: fail operations if fail_io mode has been established
2017-05-05 14:40:13 -04:00
dm-cache-metadata.h
dm cache: significant rework to leverage dm-bio-prison-v2
2017-03-07 13:28:31 -05:00
dm-cache-policy-internal.h
dm cache: significant rework to leverage dm-bio-prison-v2
2017-03-07 13:28:31 -05:00
dm-cache-policy-smq.c
dm cache policy smq: don't do any writebacks unless IDLE
2017-05-14 21:54:33 -04:00
dm-cache-policy.c
dm-cache-policy.h
dm cache: significant rework to leverage dm-bio-prison-v2
2017-03-07 13:28:31 -05:00
dm-cache-target.c
dm cache: simplify the IDLE vs BUSY state calculation
2017-05-14 21:54:33 -04:00
dm-core.h
libnvdimm for 4.12
2017-05-05 18:49:20 -07:00
dm-crypt.c
- A major update for DM cache that reduces the latency for deciding
2017-05-03 10:31:20 -07:00
dm-delay.c
dm: mark targets that pass integrity data
2017-04-24 12:04:32 -04:00
dm-era-target.c
dm block manager: remove an unused argument from dm_block_manager_create()
2017-04-27 17:08:41 -04:00
dm-exception-store.c
dm-exception-store.h
dm-flakey.c
dm-integrity.c
dm: make flush bios explicitly sync
2017-05-31 10:50:23 -04:00
dm-io.c
dm: support REQ_OP_WRITE_ZEROES
2017-04-08 11:25:38 -06:00
dm-ioctl.c
dm ioctl: restore __GFP_HIGH in copy_params()
2017-05-22 19:30:03 -04:00
dm-kcopyd.c
dm kcopyd: switch to use REQ_OP_WRITE_ZEROES
2017-04-08 11:25:38 -06:00
dm-linear.c
libnvdimm for 4.12
2017-05-05 18:49:20 -07:00
dm-log-userspace-base.c
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c
dm-log.c
dm-mpath.c
dm mpath: multipath_clone_and_map must not return -EIO
2017-05-15 15:09:53 -04:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid.c
- A major update for DM cache that reduces the latency for deciding
2017-05-03 10:31:20 -07:00
dm-raid1.c
dm: make flush bios explicitly sync
2017-05-31 10:50:23 -04:00
dm-region-hash.c
dm-round-robin.c
dm-rq.c
dm rq: add a missing break to map_request
2017-05-15 15:09:51 -04:00
dm-rq.h
dm-service-time.c
dm-snap-persistent.c
dm: make flush bios explicitly sync
2017-05-31 10:50:23 -04:00
dm-snap-transient.c
dm-snap.c
dm: teach dm-targets to use a dax_device + dax_operations
2017-04-25 13:20:36 -07:00
dm-stats.c
mm: introduce kv[mz]alloc helpers
2017-05-08 17:15:12 -07:00
dm-stats.h
dm-stripe.c
libnvdimm for 4.12
2017-05-05 18:49:20 -07:00
dm-switch.c
dm-sysfs.c
dm-table.c
- A major update for DM cache that reduces the latency for deciding
2017-05-03 10:31:20 -07:00
dm-target.c
libnvdimm for 4.12
2017-05-05 18:49:20 -07:00
dm-thin-metadata.c
dm thin metadata: call precommit before saving the roots
2017-05-15 15:09:49 -04:00
dm-thin-metadata.h
dm-thin.c
- A major update for DM cache that reduces the latency for deciding
2017-05-03 10:31:20 -07:00
dm-uevent.c
dm-uevent.h
dm-verity-fec.c
- A major update for DM cache that reduces the latency for deciding
2017-05-03 10:31:20 -07:00
dm-verity-fec.h
dm verity fec: limit error correction recursion
2017-03-16 09:37:31 -04:00
dm-verity-target.c
dm verity: fix no salt use case
2017-05-22 13:49:03 -04:00
dm-verity.h
dm verity: switch to using asynchronous hash crypto API
2017-04-24 15:37:04 -04:00
dm-zero.c
dm.c
dm: make flush bios explicitly sync
2017-05-31 10:50:23 -04:00
dm.h
dm: introduce enum dm_queue_mode to cleanup related code
2017-04-27 17:08:44 -04:00
faulty.c
md: fix deadlock between mddev_suspend() and md_write_start()
2017-06-13 10:18:01 -07:00
Kconfig
- DM cache metadata fixes to short-circuit operations that require the
2017-05-05 19:31:06 -07:00
linear.c
md: fix deadlock between mddev_suspend() and md_write_start()
2017-06-13 10:18:01 -07:00
linear.h
Makefile
- A major update for DM cache that reduces the latency for deciding
2017-05-03 10:31:20 -07:00
md-cluster.c
md-cluster: fix potential lock issue in add_new_disk
2017-05-21 20:37:09 -07:00
md-cluster.h
md-cluster: add the support for resize
2017-03-16 16:55:50 -07:00
md.c
md: use a separate bio_set for synchronous IO.
2017-06-21 10:52:36 -07:00
md.h
md: use a separate bio_set for synchronous IO.
2017-06-21 10:52:36 -07:00
multipath.c
md: fix deadlock between mddev_suspend() and md_write_start()
2017-06-13 10:18:01 -07:00
multipath.h
raid0.c
md: fix deadlock between mddev_suspend() and md_write_start()
2017-06-13 10:18:01 -07:00
raid0.h
raid1.c
md/raid1: remove unused bio in sync_request_write
2017-06-16 12:04:09 -07:00
raid1.h
md/raid1: Use a new variable to count flighting sync requests
2017-04-27 14:01:16 -07:00
raid5-cache.c
md: Make flush bios explicitely sync
2017-05-31 09:25:53 -07:00
raid5-log.h
md/r5cache: gracefully handle journal device errors for writeback mode
2017-05-11 22:11:11 -07:00
raid5-ppl.c
md: Make flush bios explicitely sync
2017-05-31 09:25:53 -07:00
raid5.c
md: don't use flush_signals in userspace processes
2017-06-13 10:18:02 -07:00
raid5.h
- A major update for DM cache that reduces the latency for deciding
2017-05-03 10:31:20 -07:00
raid10.c
md/raid10: fix FailFast test for wrong device
2017-06-16 12:04:08 -07:00
raid10.h
md/raid10: simplify the splitting of requests.
2017-04-11 10:13:02 -07:00