]> Pileus Git - ~andy/linux/commit
drbd: allow read requests to be retried after force-detach
authorLars Ellenberg <lars.ellenberg@linbit.com>
Tue, 24 Jul 2012 08:12:36 +0000 (10:12 +0200)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Thu, 8 Nov 2012 15:58:37 +0000 (16:58 +0100)
commit9a278a7906066a1b4f37fff9b5e27a92af0ca3ce
tree8dd98edd53bc8e0c17f2681e4418b96ffb7af736
parent934722a2dbf87b43d39c787441e511157d5add94
drbd: allow read requests to be retried after force-detach

Sometimes, a lower level block device turns into a tar-pit,
not completing requests at all, not even doing error completion.

We can force-detach from such a tar-pit block device,
either by disk-timeout, or by drbdadm detach --force.

Queueing for retry only from the request destruction path (kref hit 0)
makes it impossible to retry affected read requests from the peer,
until the local IO completion happened, as the locally submitted
bio holds a reference on the drbd request object.

If we can only complete READs when the local completion finally
happens, we would not need to force-detach in the first place.

Instead, queue for retry where we otherwise had done the error completion.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_main.c
drivers/block/drbd/drbd_req.c
drivers/block/drbd/drbd_req.h