提交 d207450c 编写于 作者: P Philipp Reisner

drbd: Bugfix: rs_in_flight could become wrong if read_for_csum() requested reschedule later

Signed-off-by: NPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: NLars Ellenberg <lars.ellenberg@linbit.com>
上级 778f271d
......@@ -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))
......@@ -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;
......@@ -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 */
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册