NeilBrown
133d4527ea
md: flush writes before starting a recovery.
...
When we write to a degraded array which has a bitmap, we
make sure the relevant bit in the bitmap remains set when
the write completes (so a 're-add' can quickly rebuilt a
temporarily-missing device).
If, immediately after such a write starts, we incorporate a spare,
commence recovery, and skip over the region where the write is
happening (because the 'needs recovery' flag isn't set yet),
then that write will not get to the new device.
Once the recovery finishes the new device will be trusted, but will
have incorrect data, leading to possible corruption.
We cannot set the 'needs recovery' flag when we start the write as we
do not know easily if the write will be "degraded" or not. That
depends on details of the particular raid level and particular write
request.
This patch fixes a corruption issue of long standing and so it
suitable for any -stable kernel. It applied correctly to 3.0 at
least and will minor editing to earlier kernels.
Reported-by: Bill <billstuff2001@sbcglobal.net>
Tested-by: Bill <billstuff2001@sbcglobal.net>
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/53A518BB.60709@sbcglobal.net
Signed-off-by: NeilBrown <neilb@suse.de>
2014-07-03 10:44:45 +10:00
..
bcache
arch: Mass conversion of smp_mb__*()
2014-04-18 14:20:48 +02:00
persistent-data
dm transaction manager: fix corruption due to non-atomic transaction commit
2014-03-27 16:56:23 -04:00
bitmap.c
md/bitmap: remove confusing code from filemap_get_page.
2014-05-29 16:59:47 +10:00
bitmap.h
kernfs: s/sysfs_dirent/kernfs_node/ and rename its friends accordingly
2013-12-11 15:28:36 -08:00
dm-bio-prison.c
dm bio prison: implement per bucket locking in the dm_bio_prison hash table
2014-06-11 16:48:54 -04:00
dm-bio-prison.h
dm thin: return ENOSPC instead of EIO when error_if_no_space enabled
2014-06-03 13:44:08 -04:00
dm-bio-record.h
dm: Refactor for new bio cloning/splitting
2013-11-23 22:33:55 -08:00
dm-bufio.c
arch: Mass conversion of smp_mb__*()
2014-04-18 14:20:48 +02:00
dm-bufio.h
dm snapshot: use dm-bufio prefetch
2014-01-14 23:23:03 -05:00
dm-builtin.c
dm sysfs: fix a module unload race
2014-01-14 23:23:04 -05:00
dm-cache-block-types.h
dm cache: remove remainder of distinct discard block size
2014-03-27 16:56:23 -04:00
dm-cache-metadata.c
dm cache: fix a lock-inversion
2014-04-04 14:53:05 -04:00
dm-cache-metadata.h
dm cache: fix a lock-inversion
2014-04-04 14:53:05 -04:00
dm-cache-policy-cleaner.c
dm-cache-policy-internal.h
dm-cache-policy-mq.c
dm cache mq: fix memory allocation failure for large cache devices
2014-02-28 12:18:29 -05:00
dm-cache-policy.c
dm cache: add policy name to status output
2014-01-16 13:44:11 -05:00
dm-cache-policy.h
dm cache: add policy name to status output
2014-01-16 13:44:11 -05:00
dm-cache-target.c
dm cache: always split discards on cache block boundaries
2014-05-27 10:33:05 -04:00
dm-crypt.c
dm crypt: fix cpu hotplug crash by removing per-cpu structure
2014-05-14 16:11:35 -04:00
dm-delay.c
Merge branch 'for-3.14/core' of git://git.kernel.dk/linux-block
2014-01-30 11:19:05 -08:00
dm-era-target.c
dm era: check for a non-NULL metadata object before closing it
2014-06-03 13:44:08 -04:00
dm-exception-store.c
dm-exception-store.h
dm-flakey.c
block: Abstract out bvec iterator
2013-11-23 22:33:47 -08:00
dm-io.c
dm io: fix I/O to multiple destinations
2014-02-17 11:00:05 -05:00
dm-ioctl.c
dm-kcopyd.c
dm-linear.c
block: Abstract out bvec iterator
2013-11-23 22:33:47 -08:00
dm-log-userspace-base.c
dm log userspace: allow mark requests to piggyback on flush requests
2014-01-21 23:46:27 -05:00
dm-log-userspace-transfer.c
connector: add portid to unicast in addition to broadcasting
2014-02-07 15:40:17 -08:00
dm-log-userspace-transfer.h
dm-log.c
dm-mpath.c
dm: disable WRITE SAME if it fails
2014-06-04 09:45:52 -04:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid.c
dm-raid1.c
dm raid1: fix immutable biovec related BUG when retrying read bio
2014-02-18 10:48:57 -05:00
dm-region-hash.c
block: Abstract out bvec iterator
2013-11-23 22:33:47 -08:00
dm-round-robin.c
dm-service-time.c
dm-snap-persistent.c
dm snapshot: fix metadata corruption
2014-03-03 17:58:13 -05:00
dm-snap-transient.c
dm-snap.c
. Add dm_accept_partial_bio interface to DM core to allow DM targets
2014-06-12 13:33:29 -07:00
dm-stats.c
dm stats: initialize read-only module parameter
2013-12-10 19:13:21 -05:00
dm-stats.h
dm-stripe.c
block: Abstract out bvec iterator
2013-11-23 22:33:47 -08:00
dm-switch.c
block: Abstract out bvec iterator
2013-11-23 22:33:47 -08:00
dm-sysfs.c
dm sysfs: fix a module unload race
2014-01-14 23:23:04 -05:00
dm-table.c
dm: remove symbol export for dm_set_device_limits
2014-06-04 09:46:34 -04:00
dm-target.c
dm-thin-metadata.c
dm: take care to copy the space map roots before locking the superblock
2014-03-27 16:56:23 -04:00
dm-thin-metadata.h
dm thin: ensure user takes action to validate data and metadata consistency
2014-03-05 15:25:35 -05:00
dm-thin.c
dm thin: update discard_granularity to reflect the thin-pool blocksize
2014-06-11 16:56:12 -04:00
dm-uevent.c
dm-uevent.h
dm-verity.c
dm verity: fix biovecs hash calculation regression
2014-04-15 12:19:24 -04:00
dm-zero.c
dm.c
. Add dm_accept_partial_bio interface to DM core to allow DM targets
2014-06-12 13:33:29 -07:00
dm.h
dm table: add dm_table_run_md_queue_async
2014-03-27 16:56:24 -04:00
faulty.c
block: Abstract out bvec iterator
2013-11-23 22:33:47 -08:00
Kconfig
dm: add era target
2014-03-27 16:56:23 -04:00
linear.c
block: Introduce new bio_split()
2013-11-23 22:33:57 -08:00
linear.h
Makefile
dm: add era target
2014-03-27 16:56:23 -04:00
md.c
md: flush writes before starting a recovery.
2014-07-03 10:44:45 +10:00
md.h
md/bitmap: don't abuse i_writecount for bitmap files.
2014-04-09 12:26:59 +10:00
multipath.c
block: Abstract out bvec iterator
2013-11-23 22:33:47 -08:00
multipath.h
raid0.c
block: Introduce new bio_split()
2013-11-23 22:33:57 -08:00
raid0.h
raid1.c
md/raid1: r1buf_pool_alloc: free allocate pages when subsequent allocation fails.
2014-04-09 14:42:23 +10:00
raid1.h
raid1: Rewrite the implementation of iobarrier.
2013-11-19 15:19:18 +11:00
raid5.c
Assorted md fixes for 3.16
2014-06-11 08:33:41 -07:00
raid5.h
raid5: add an option to avoid copy data from bio to stripe cache
2014-05-29 16:59:47 +10:00
raid10.c
md/raid10: call wait_barrier() for each request submitted.
2014-05-06 09:49:26 +10:00
raid10.h