summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Yao <ryao@gentoo.org>2015-09-18 08:46:58 -0400
committerRichard Yao <ryao@gentoo.org>2015-09-18 08:50:21 -0400
commit5b9bf722d0344854d45636b94f9efca672d846f8 (patch)
treee6bafc650e88bd66bdfabfc9e5ccbc8a28028a1d /sys-fs/zfs-kmod/files
parentnet-misc/icaclient: Bump to version 13.2.1.328635 (bug #560756). (diff)
downloadgentoo-5b9bf722d0344854d45636b94f9efca672d846f8.tar.gz
gentoo-5b9bf722d0344854d45636b94f9efca672d846f8.tar.bz2
gentoo-5b9bf722d0344854d45636b94f9efca672d846f8.zip
sys-fs/zfs-kmod-0.6.5-r1: Fix discard corruption regression
This is the first data corruption bug in the history of the ZoL project and I regret to say that it is my fault. I wrote the patch that caused it and it went into HEAD after passing upstream review. It affects Linux 2.6.36 and later. Package-Manager: portage-2.2.20.1 Signed-off-by: Richard Yao <ryao@gentoo.org>
Diffstat (limited to 'sys-fs/zfs-kmod/files')
-rw-r--r--sys-fs/zfs-kmod/files/zfs-kmod-0.6.5-discard-on-zvol-fix.patch31
1 files changed, 31 insertions, 0 deletions
diff --git a/sys-fs/zfs-kmod/files/zfs-kmod-0.6.5-discard-on-zvol-fix.patch b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.5-discard-on-zvol-fix.patch
new file mode 100644
index 000000000000..632d08d28e1f
--- /dev/null
+++ b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.5-discard-on-zvol-fix.patch
@@ -0,0 +1,31 @@
+From 96165264ad0afe7a5d440ef49f9712a188486266 Mon Sep 17 00:00:00 2001
+From: Richard Yao <ryao@gentoo.org>
+Date: Fri, 18 Sep 2015 08:32:52 -0400
+Subject: [PATCH] Discard on zvols should not exceed the length of a block
+
+37f9dac592bf5889c3efb305c48ac39b4c7dd140 replaced the end-start
+calculation with a cached value, but neglected to update it on discard
+operations. This can cause us to discard data not requested, causing
+data loss on zvols.
+
+Reported-by: Richard Connon <richard.connon@zynstra.com>
+Signed-off-by: Richard Yao <ryao@gentoo.org>
+---
+ module/zfs/zvol.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c
+index 492f8ff..c5a8071 100644
+--- a/module/zfs/zvol.c
++++ b/module/zfs/zvol.c
+@@ -661,6 +661,7 @@ zvol_discard(struct bio *bio)
+ if (!(bio->bi_rw & REQ_SECURE)) {
+ start = P2ROUNDUP(start, zv->zv_volblocksize);
+ end = P2ALIGN(end, zv->zv_volblocksize);
++ size = end - start;
+ }
+ #endif
+
+--
+2.4.6
+