]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
dm crypt over RAID5 fix from Christophe Saout for 2.6.18
authorChris Wright <chrisw@sous-sol.org>
Sat, 2 Dec 2006 03:53:59 +0000 (19:53 -0800)
committerChris Wright <chrisw@sous-sol.org>
Sat, 2 Dec 2006 03:53:59 +0000 (19:53 -0800)
queue-2.6.18/dm-crypt-fix-data-corruption-with-dm-crypt-over-raid5.patch [new file with mode: 0644]
queue-2.6.18/series

diff --git a/queue-2.6.18/dm-crypt-fix-data-corruption-with-dm-crypt-over-raid5.patch b/queue-2.6.18/dm-crypt-fix-data-corruption-with-dm-crypt-over-raid5.patch
new file mode 100644 (file)
index 0000000..6e04469
--- /dev/null
@@ -0,0 +1,37 @@
+From linux-kernel-owner+chrisw=40sous-sol.org-S1162719AbWLBC2Z@vger.kernel.org  Fri Dec  1 18:36:19 2006
+Date:  Sat, 02 Dec 2006 03:27:56 +0100
+From: Christophe Saout <christophe@saout.de>
+To: dm-crypt@saout.de, Andrey <dm-crypt-revealed-address@lelik.org>, Andrew Morton <akpm@osdl.org>, agk@redhat.com, Neil Brown <neilb@suse.de>, Jens Axboe <jens.axboe@oracle.com>, Chris Wright <chrisw@sous-sol.org>, stable@kernel.org
+Subject: dm crypt: Fix data corruption with dm-crypt over RAID5
+
+Fix corruption issue with dm-crypt on top of software raid5. Cancelled
+readahead bio's that report no error, just have BIO_UPTODATE cleared
+were reported as successful reads to the higher layers (and leaving
+random content in the buffer cache). Already fixed in 2.6.19.
+
+Signed-off-by: Christophe Saout <christophe@saout.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/md/dm-crypt.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- linux-2.6.18.5.orig/drivers/md/dm-crypt.c
++++ linux-2.6.18.5/drivers/md/dm-crypt.c
+@@ -717,13 +717,15 @@ static int crypt_endio(struct bio *bio, 
+       if (bio->bi_size)
+               return 1;
++      if (!bio_flagged(bio, BIO_UPTODATE) && !error)
++              error = -EIO;
++
+       bio_put(bio);
+       /*
+        * successful reads are decrypted by the worker thread
+        */
+-      if ((bio_data_dir(bio) == READ)
+-          && bio_flagged(bio, BIO_UPTODATE)) {
++      if (bio_data_dir(io->bio) == READ && !error) {
+               kcryptd_queue_io(io);
+               return 0;
+       }
index 6e0bbc915aea03cb70752aee967abf57d0a9d7db..a263fbf59ee484d067c4bf041bc0bf993432fcbd 100644 (file)
@@ -4,3 +4,4 @@ ebtables-verify-that-ebt_entries-have-zero-distinguisher.patch
 ebtables-deal-with-the-worst-case-behaviour-in-loop-checks.patch
 ebtables-prevent-wraparounds-in-checks-for-entry-components-sizes.patch
 net_sched-policer-restore-compatibility-with-old-iproute-binaries.patch
+dm-crypt-fix-data-corruption-with-dm-crypt-over-raid5.patch