sector_t sector;
        const sector_t capacity = drbd_get_capacity(mdev->this_bdev);
        int max_segment_size;
-       int number, i, size, pe, mx;
+       int number, i, rollback_i, size, pe, mx;
        int align, queued, sndbuf;
 
        if (unlikely(cancel))
                 * be prepared for all stripe sizes of software RAIDs.
                 */
                align = 1;
+               rollback_i = i;
                for (;;) {
                        if (size + BM_BLOCK_SIZE > max_segment_size)
                                break;
                        case 2: /* Allocation failed */
                                drbd_rs_complete_io(mdev, sector);
                                mdev->bm_resync_fo = BM_SECT_TO_BIT(sector);
+                               i = rollback_i;
                                goto requeue;
                        /* case 1: everything ok */
                        }