drbd: restart loop in drbd_make_request() [prepare for Linux-3.2]
authorPhilipp Reisner <philipp.reisner@linbit.com>
Tue, 20 Dec 2011 10:49:58 +0000 (11:49 +0100)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Thu, 8 Nov 2012 15:58:13 +0000 (16:58 +0100)
With Linux-3.2 generic_make_request() will no longer loop over
the request function until it finally returns 0. Move this
loop into our drbd_make_request() function.

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 cf3c10e..e9a2f23 100644 (file)
@@ -929,8 +929,8 @@ allocate_barrier:
        }
 
        if (drbd_suspended(mdev)) {
-               /* If we got suspended, use the retry mechanism of
-                  generic_make_request() to restart processing of this
+               /* If we got suspended, use the retry mechanism in
+                  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;
@@ -1110,8 +1110,11 @@ int drbd_make_request(struct request_queue *q, struct bio *bio)
        D_ASSERT(bio->bi_size > 0);
        D_ASSERT(IS_ALIGNED(bio->bi_size, 512));
 
-       inc_ap_bio(mdev);
-       return __drbd_make_request(mdev, bio, start_time);
+       do {
+               inc_ap_bio(mdev);
+       } while (__drbd_make_request(mdev, bio, start_time));
+
+       return 0;
 }
 
 /* This is called by bio_add_page().