Mikulas Patocka
1781fa54a4
dm writecache: fix incorrect flush sequence when doing SSD mode commit
...
commit aa9509209c5ac2f0b35d01a922bf9ae072d0c2fc upstream.
When committing state, the function writecache_flush does the following:
1. write metadata (writecache_commit_flushed)
2. flush disk cache (writecache_commit_flushed)
3. wait for data writes to complete (writecache_wait_for_ios)
4. increase superblock seq_count
5. write the superblock
6. flush disk cache
It may happen that at step 3, when we wait for some write to finish, the
disk may report the write as finished, but the write only hit the disk
cache and it is not yet stored in persistent storage. At step 5 we write
the superblock - it may happen that the superblock is written before the
write that we waited for in step 3. If the machine crashes, it may result
in incorrect data being returned after reboot.
In order to fix the bug, we must swap steps 2 and 3 in the above sequence,
so that we first wait for writes to complete and then flush the disk
cache.
Fixes: 48debafe4f ("dm: add writecache target")
Cc: stable@vger.kernel.org # 4.18+
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-11 04:35:26 -08:00
..
bcache
bcache: at least try to shrink 1 node in bch_mca_scan()
2020-01-04 19:18:11 +01:00
persistent-data
dm space map common: fix to ensure new block isn't already in use
2020-02-11 04:35:26 -08:00
dm-bio-prison-v1.c
dm-bio-prison-v1.h
dm-bio-prison-v2.c
dm-bio-prison-v2.h
dm-bio-record.h
dm-bufio.c
dm bufio: introduce a global cache replacement
2019-09-13 17:00:21 -04:00
dm-builtin.c
dm-cache-background-tracker.c
dm-cache-background-tracker.h
dm-cache-block-types.h
dm-cache-metadata.c
dm-cache-metadata.h
dm-cache-policy-internal.h
dm-cache-policy-smq.c
dm-cache-policy.c
dm-cache-policy.h
dm-cache-target.c
dm cache: fix bugs when a GFP_NOWAIT allocation fails
2019-10-17 11:13:50 -04:00
dm-clone-metadata.c
dm clone metadata: Use a two phase commit
2019-12-21 11:05:00 +01:00
dm-clone-metadata.h
dm clone metadata: Use a two phase commit
2019-12-21 11:05:00 +01:00
dm-clone-target.c
dm clone: Flush destination device before committing metadata
2019-12-21 11:05:01 +01:00
dm-core.h
dm-crypt.c
Revert "dm crypt: use WQ_HIGHPRI for the IO and crypt workqueues"
2019-11-29 10:09:44 +01:00
dm-delay.c
dm-dust.c
dm dust: use dust block size for badblocklist index
2019-08-21 11:27:17 -04:00
dm-era-target.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
dm-exception-store.c
dm-exception-store.h
- Improve DM snapshot target's scalability by using finer grained
2019-05-16 15:55:48 -07:00
dm-flakey.c
block: Kill gfp_t argument of blkdev_report_zones()
2019-07-11 20:04:37 -06:00
dm-init.c
docs: device-mapper: move it to the admin-guide
2019-07-15 11:03:01 -03:00
dm-integrity.c
block: centralize PI remapping logic to the block layer
2019-09-17 20:03:49 -06:00
dm-io.c
dm-ioctl.c
dm: introduce DM_GET_TARGET_VERSION
2019-09-16 10:18:01 -04:00
dm-kcopyd.c
dm kcopyd: always complete failed jobs
2019-08-15 15:57:39 -04:00
dm-linear.c
block: Kill gfp_t argument of blkdev_report_zones()
2019-07-11 20:04:37 -06:00
dm-log-userspace-base.c
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c
dm log writes: fix incorrect comment about the logged sequence example
2019-07-09 14:13:33 -04:00
dm-log.c
dm-mpath.c
dm mpath: remove harmful bio-based optimization
2019-12-21 11:04:56 +01:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid.c
dm raid: fix updating of max_discard_sectors limit
2019-09-11 16:18:23 -04:00
dm-raid1.c
dm raid1: use struct_size() with kzalloc()
2019-08-26 11:05:32 -04:00
dm-region-hash.c
dm-round-robin.c
dm-rq.c
block: Delay default elevator initialization
2019-09-05 19:52:34 -06:00
dm-rq.h
dm-service-time.c
dm-snap-persistent.c
block: fix an integer overflow in logical block size
2020-01-23 08:22:32 +01:00
dm-snap-transient.c
dm-snap.c
dm snapshot: rework COW throttling to fix deadlock
2019-10-10 09:46:05 -04:00
dm-stats.c
dm stats: use struct_size() helper
2019-09-04 09:39:22 -04:00
dm-stats.h
dm-stripe.c
dm-switch.c
dm-sysfs.c
dm-table.c
dm: make dm_table_find_target return NULL
2019-08-23 10:13:12 -04:00
dm-target.c
dm-thin-metadata.c
dm thin metadata: Add support for a pre-commit callback
2019-12-21 11:05:01 +01:00
dm-thin-metadata.h
dm thin metadata: Add support for a pre-commit callback
2019-12-21 11:05:01 +01:00
dm-thin.c
dm thin: fix use-after-free in metadata_pre_commit_callback
2020-02-05 21:22:53 +00:00
dm-uevent.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
2019-05-30 11:26:35 -07:00
dm-uevent.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
2019-05-30 11:26:35 -07:00
dm-unstripe.c
dm-verity-fec.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
dm-verity-fec.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
dm-verity-target.c
dm verity: add root hash pkcs#7 signature verification
2019-08-23 10:13:14 -04:00
dm-verity-verify-sig.c
dm verity: add root hash pkcs#7 signature verification
2019-08-23 10:13:14 -04:00
dm-verity-verify-sig.h
dm verity: add root hash pkcs#7 signature verification
2019-08-23 10:13:14 -04:00
dm-verity.h
dm verity: add root hash pkcs#7 signature verification
2019-08-23 10:13:14 -04:00
dm-writecache.c
dm writecache: fix incorrect flush sequence when doing SSD mode commit
2020-02-11 04:35:26 -08:00
dm-zero.c
dm-zoned-metadata.c
dm zoned: support zone sizes smaller than 128MiB
2020-02-11 04:35:26 -08:00
dm-zoned-reclaim.c
dm zoned: reduce overhead of backing device checks
2019-12-17 19:56:12 +01:00
dm-zoned-target.c
dm zoned: reduce overhead of backing device checks
2019-12-17 19:56:12 +01:00
dm-zoned.h
dm zoned: reduce overhead of backing device checks
2019-12-17 19:56:12 +01:00
dm.c
dm: make dm_table_find_target return NULL
2019-08-23 10:13:12 -04:00
dm.h
dm: make dm_table_find_target return NULL
2019-08-23 10:13:12 -04:00
Kconfig
dm: add clone target
2019-09-12 09:32:31 -04:00
Makefile
dm: add clone target
2019-09-12 09:32:31 -04:00
md-bitmap.c
md/bitmap: avoid race window between md_bitmap_resize and bitmap_file_clear_bit
2019-12-31 16:44:20 +01:00
md-bitmap.h
md-cluster.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45
2019-05-24 17:27:12 +02:00
md-cluster.h
md-faulty.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 47
2019-05-24 17:27:13 +02:00
md-linear.c
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
2019-12-17 19:56:14 +01:00
md-linear.h
md-multipath.c
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
2019-12-17 19:56:14 +01:00
md-multipath.h
md.c
md: make sure desc_nr less than MD_SB_DISKS
2020-01-04 19:18:34 +01:00
md.h
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
2019-12-17 19:56:14 +01:00
raid0.c
block: fix an integer overflow in logical block size
2020-01-23 08:22:32 +01:00
raid0.h
md/raid0: avoid RAID0 data corruption due to layout confusion.
2019-09-13 13:10:05 -07:00
raid1-10.c
md: raid1-10: Unify r{1,10}bio_pool_free
2019-06-15 01:37:35 -06:00
raid1.c
md: raid1: check rdev before reference in raid1_sync_request func
2020-01-09 10:19:48 +01:00
raid1.h
raid5-cache.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288
2019-06-05 17:36:37 +02:00
raid5-log.h
raid5-ppl.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288
2019-06-05 17:36:37 +02:00
raid5.c
raid5: need to set STRIPE_HANDLE for batch head
2020-01-09 10:19:48 +01:00
raid5.h
raid5: use bio_end_sector in r5_next_bio
2019-09-13 13:14:43 -07:00
raid10.c
md: improve handling of bio with REQ_PREFLUSH in md_flush_request()
2019-12-17 19:56:14 +01:00
raid10.h