Skip to content

Commit

Permalink
drbd: Bugfix: rs_in_flight could become wrong if read_for_csum() requ…
Browse files Browse the repository at this point in the history
…ested reschedule later

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
  • Loading branch information
Philipp Reisner committed Oct 14, 2010
1 parent 778f271 commit d207450
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion drivers/block/drbd/drbd_worker.c
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ int w_make_resync_request(struct drbd_conf *mdev,
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))
Expand Down Expand Up @@ -613,6 +613,7 @@ int w_make_resync_request(struct drbd_conf *mdev,
* be prepared for all stripe sizes of software RAIDs.
*/
align = 1;
rollback_i = i;
for (;;) {
if (size + BM_BLOCK_SIZE > max_segment_size)
break;
Expand Down Expand Up @@ -654,6 +655,7 @@ int w_make_resync_request(struct drbd_conf *mdev,
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 */
}
Expand Down

0 comments on commit d207450

Please sign in to comment.