drbd: Restore the request restart logic
authorPhilipp Reisner <philipp.reisner@linbit.com>
Mon, 30 Apr 2012 10:53:52 +0000 (12:53 +0200)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Wed, 9 May 2012 15:20:59 +0000 (17:20 +0200)
It got lost with the commit 5a7bbad27a410350e64a2d7f5ec18fc73836c14f
"block: remove support for bio remapping from ->make_request"

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

index 4a642ce62bae6f865cda16c7d96b788391a24989..9c5c84946b056792fa45d99051bd5c28750db7e1 100644 (file)
@@ -871,7 +871,7 @@ allocate_barrier:
 
        if (is_susp(mdev->state)) {
                /* If we got suspended, use the retry mechanism of
-                  generic_make_request() to restart processing of this
+                  drbd_make_request() to restart processing of this
                   bio. In the next call to drbd_make_request
                   we sleep in inc_ap_bio() */
                ret = 1;
@@ -1102,8 +1102,9 @@ void drbd_make_request(struct request_queue *q, struct bio *bio)
        e_enr = (bio->bi_sector+(bio->bi_size>>9)-1) >> HT_SHIFT;
 
        if (likely(s_enr == e_enr)) {
-               inc_ap_bio(mdev, 1);
-               drbd_make_request_common(mdev, bio, start_time);
+               do {
+                       inc_ap_bio(mdev, 1);
+               } while (drbd_make_request_common(mdev, bio, start_time));
                return;
        }