diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2010-04-10 02:10:09 +0200 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2010-05-03 22:40:16 +0200 |
commit | 5c3c7e64bbcb60db39d0d55c8fab39ef41d41c30 (patch) | |
tree | 91e5c767a24eb468ef210474784a5902a0d253a3 /drivers/block | |
parent | 3c2023dd8ed31e2ecfbb2d5aa20e8884d4b339e2 (diff) | |
download | linux-3.10-5c3c7e64bbcb60db39d0d55c8fab39ef41d41c30.tar.gz linux-3.10-5c3c7e64bbcb60db39d0d55c8fab39ef41d41c30.tar.bz2 linux-3.10-5c3c7e64bbcb60db39d0d55c8fab39ef41d41c30.zip |
drbd: don't expose failed local READ to upper layers
fix regression introduced in 8.3.3:
commit a9b17323f2875f5d9b132c2b476a750bf44b10c7
Author: Lars Ellenberg <lars.ellenberg@linbit.com>
Date: Wed Aug 12 15:18:33 2009 +0200
out-of-spinlock completion of master bio
: (bio_rw(bio) == READA)
? read_completed_with_error
: read_ahead_completed_with_error;
is obviously not what was intended.
No one noticed because of
* page-cache at work,
* local RAIDs
Impact:
Failed local READs are not retried remotely,
but errored to upper layers, causing filesystems
to remount read-only, or worse.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/drbd/drbd_worker.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c index 44bf6d11197..d48a1dfd7b2 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c @@ -235,7 +235,7 @@ void drbd_endio_pri(struct bio *bio, int error) if (unlikely(error)) { what = (bio_data_dir(bio) == WRITE) ? write_completed_with_error - : (bio_rw(bio) == READA) + : (bio_rw(bio) == READ) ? read_completed_with_error : read_ahead_completed_with_error; } else |