summaryrefslogtreecommitdiffstats
path: root/dm-cache-only-use-overwrite-optimisation-for-promoti.patch
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@fedoraproject.org>2014-12-18 10:06:55 -0500
committerJosh Boyer <jwboyer@fedoraproject.org>2014-12-18 11:30:04 -0500
commite7d4b21c96bbb54a882e7141827d78d64209be8f (patch)
tree8baadd75f2efa28eef633d1692a35c8df15783b1 /dm-cache-only-use-overwrite-optimisation-for-promoti.patch
parent8d48d44bc0ba7ab6b4057800dd47e5d4e59c995e (diff)
downloadkernel-e7d4b21c96bbb54a882e7141827d78d64209be8f.tar.gz
kernel-e7d4b21c96bbb54a882e7141827d78d64209be8f.tar.xz
kernel-e7d4b21c96bbb54a882e7141827d78d64209be8f.zip
Fix dm-cache crash (rhbz 1168434)
Diffstat (limited to 'dm-cache-only-use-overwrite-optimisation-for-promoti.patch')
-rw-r--r--dm-cache-only-use-overwrite-optimisation-for-promoti.patch32
1 files changed, 32 insertions, 0 deletions
diff --git a/dm-cache-only-use-overwrite-optimisation-for-promoti.patch b/dm-cache-only-use-overwrite-optimisation-for-promoti.patch
new file mode 100644
index 000000000..12a79113d
--- /dev/null
+++ b/dm-cache-only-use-overwrite-optimisation-for-promoti.patch
@@ -0,0 +1,32 @@
+From: Joe Thornber <ejt@redhat.com>
+Date: Thu, 27 Nov 2014 12:21:08 +0000
+Subject: [PATCH] dm cache: only use overwrite optimisation for promotion when
+ in writeback mode
+
+Overwrite causes the cache block and origin blocks to diverge, which
+is only allowed in writeback mode.
+
+Signed-off-by: Joe Thornber <ejt@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Cc: stable@vger.kernel.org
+---
+ drivers/md/dm-cache-target.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
+index 7130505c2425..6f7086355691 100644
+--- a/drivers/md/dm-cache-target.c
++++ b/drivers/md/dm-cache-target.c
+@@ -1070,7 +1070,8 @@ static void issue_copy(struct dm_cache_migration *mg)
+
+ avoid = is_discarded_oblock(cache, mg->new_oblock);
+
+- if (!avoid && bio_writes_complete_block(cache, bio)) {
++ if (writeback_mode(&cache->features) &&
++ !avoid && bio_writes_complete_block(cache, bio)) {
+ issue_overwrite(mg, bio);
+ return;
+ }
+--
+2.1.0
+