Joe Thornber
2a0fbffb1e
dm thin: fix a race condition between discarding and provisioning a block
...
The discard passdown was being issued after the block was unmapped,
which meant the block could be reprovisioned whilst the passdown discard
was still in flight.
We can only identify unshared blocks (safe to do a passdown a discard
to) once they're unmapped and their ref count hits zero. Block ref
counts are now used to guard against concurrent allocation of these
blocks that are being discarded. So now we unmap the block, issue
passdown discards, and the immediately increment ref counts for regions
that have been discarded via passed down (this is safe because
allocation occurs within the same thread). We then decrement ref counts
once the passdown discard IO is complete -- signaling these blocks may
now be allocated.
This fixes the potential for corruption that was reported here:
https://www.redhat.com/archives/dm-devel/2016-June/msg00311.html
Reported-by: Dennis Yang <dennisyang@qnap.com>
Signed-off-by: Joe Thornber <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
2016-07-20 12:43:35 -04:00
..
bcache
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -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: use bio op accessors
2016-06-07 13:41:38 -06: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 snapshot: fix hung bios when copy error occurs
2016-01-08 20:03:05 -05:00
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 ioctl: Simplify parameter buffer management code
2016-07-01 10:54:11 -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
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-raid.c
dm raid: fix random optimal_io_size for raid0
2016-07-19 11:37:08 -04:00
dm-raid1.c
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06: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 snapshot: fix hung bios when copy error occurs
2016-01-08 20:03:05 -05:00
dm-snap.c
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06: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
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06: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 mpath: add optional "queue_mode" feature
2016-06-10 15:16:02 -04:00
dm-target.c
dm: move request-based code out to dm-rq.[hc]
2016-06-10 15:15:44 -04: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: add support for forward error correction
2015-12-10 10:39:03 -05:00
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 verity: add ignore_zero_blocks feature
2015-12-10 10:39:03 -05:00
dm-zero.c
dm.c
dm: call PR reserve/unreserve on each underlying device
2016-07-18 15:37:35 -04:00
dm.h
dm mpath: add optional "queue_mode" feature
2016-06-10 15:16:02 -04:00
faulty.c
MD: rename some functions
2016-01-20 13:52:20 -08:00
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
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06:00
md.h
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06:00
multipath.c
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06: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
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06: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
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06:00
raid5.h
RAID5: revert e9e4c377e2 to fix a livelock
2016-02-26 09:44:56 -08:00
raid10.c
block, drivers, fs: rename REQ_FLUSH to REQ_PREFLUSH
2016-06-07 13:41:38 -06:00
raid10.h