aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/drbd/drbd_worker.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index fd3e1e9561cb..30b8e466a224 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -512,7 +512,7 @@ int w_make_resync_request(struct drbd_conf *mdev,
512 sector_t sector; 512 sector_t sector;
513 const sector_t capacity = drbd_get_capacity(mdev->this_bdev); 513 const sector_t capacity = drbd_get_capacity(mdev->this_bdev);
514 int max_segment_size; 514 int max_segment_size;
515 int number, i, size, pe, mx; 515 int number, i, rollback_i, size, pe, mx;
516 int align, queued, sndbuf; 516 int align, queued, sndbuf;
517 517
518 if (unlikely(cancel)) 518 if (unlikely(cancel))
@@ -613,6 +613,7 @@ next_sector:
613 * be prepared for all stripe sizes of software RAIDs. 613 * be prepared for all stripe sizes of software RAIDs.
614 */ 614 */
615 align = 1; 615 align = 1;
616 rollback_i = i;
616 for (;;) { 617 for (;;) {
617 if (size + BM_BLOCK_SIZE > max_segment_size) 618 if (size + BM_BLOCK_SIZE > max_segment_size)
618 break; 619 break;
@@ -654,6 +655,7 @@ next_sector:
654 case 2: /* Allocation failed */ 655 case 2: /* Allocation failed */
655 drbd_rs_complete_io(mdev, sector); 656 drbd_rs_complete_io(mdev, sector);
656 mdev->bm_resync_fo = BM_SECT_TO_BIT(sector); 657 mdev->bm_resync_fo = BM_SECT_TO_BIT(sector);
658 i = rollback_i;
657 goto requeue; 659 goto requeue;
658 /* case 1: everything ok */ 660 /* case 1: everything ok */
659 } 661 }