--- /dev/null
+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;
+ }