Commit 5c3c7e64 authored by Lars Ellenberg's avatar Lars Ellenberg Committed by Philipp Reisner

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: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 3c2023dd
...@@ -235,7 +235,7 @@ void drbd_endio_pri(struct bio *bio, int error) ...@@ -235,7 +235,7 @@ void drbd_endio_pri(struct bio *bio, int error)
if (unlikely(error)) { if (unlikely(error)) {
what = (bio_data_dir(bio) == WRITE) what = (bio_data_dir(bio) == WRITE)
? write_completed_with_error ? write_completed_with_error
: (bio_rw(bio) == READA) : (bio_rw(bio) == READ)
? read_completed_with_error ? read_completed_with_error
: read_ahead_completed_with_error; : read_ahead_completed_with_error;
} else } else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment