diff options
Diffstat (limited to 'drivers/block/drbd')
-rw-r--r-- | drivers/block/drbd/drbd_main.c | 25 | ||||
-rw-r--r-- | drivers/block/drbd/drbd_req.c | 9 |
2 files changed, 5 insertions, 29 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index c3760f33d52c..9043772de400 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c | |||
@@ -337,23 +337,6 @@ bail: | |||
337 | } | 337 | } |
338 | 338 | ||
339 | 339 | ||
340 | /* In C_AHEAD mode only out_of_sync packets are sent for requests. Detach | ||
341 | * those requests from the newsest barrier when changing to an other cstate. | ||
342 | * | ||
343 | * That headless list vanishes when the last request finished its write or | ||
344 | * send out_of_sync packet. */ | ||
345 | static void tl_forget(struct drbd_conf *mdev) | ||
346 | { | ||
347 | struct drbd_tl_epoch *b; | ||
348 | |||
349 | if (test_bit(CREATE_BARRIER, &mdev->flags)) | ||
350 | return; | ||
351 | |||
352 | b = mdev->newest_tle; | ||
353 | list_del(&b->requests); | ||
354 | _tl_add_barrier(mdev, b); | ||
355 | } | ||
356 | |||
357 | /** | 340 | /** |
358 | * _tl_restart() - Walks the transfer log, and applies an action to all requests | 341 | * _tl_restart() - Walks the transfer log, and applies an action to all requests |
359 | * @mdev: DRBD device. | 342 | * @mdev: DRBD device. |
@@ -1265,14 +1248,6 @@ __drbd_set_state(struct drbd_conf *mdev, union drbd_state ns, | |||
1265 | if (os.conn < C_CONNECTED && ns.conn >= C_CONNECTED) | 1248 | if (os.conn < C_CONNECTED && ns.conn >= C_CONNECTED) |
1266 | drbd_resume_al(mdev); | 1249 | drbd_resume_al(mdev); |
1267 | 1250 | ||
1268 | /* Start a new epoch in case we start to mirror write requests */ | ||
1269 | if (!drbd_should_do_remote(os) && drbd_should_do_remote(ns)) | ||
1270 | tl_forget(mdev); | ||
1271 | |||
1272 | /* Do not add local-only requests to an epoch with mirrored requests */ | ||
1273 | if (drbd_should_do_remote(os) && !drbd_should_do_remote(ns)) | ||
1274 | set_bit(CREATE_BARRIER, &mdev->flags); | ||
1275 | |||
1276 | ascw = kmalloc(sizeof(*ascw), GFP_ATOMIC); | 1251 | ascw = kmalloc(sizeof(*ascw), GFP_ATOMIC); |
1277 | if (ascw) { | 1252 | if (ascw) { |
1278 | ascw->os = os; | 1253 | ascw->os = os; |
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index 336937a14d3f..c28be4e5e57c 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c | |||
@@ -712,10 +712,11 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what, | |||
712 | dev_err(DEV, "FIXME (barrier_acked but pending)\n"); | 712 | dev_err(DEV, "FIXME (barrier_acked but pending)\n"); |
713 | list_move(&req->tl_requests, &mdev->out_of_sequence_requests); | 713 | list_move(&req->tl_requests, &mdev->out_of_sequence_requests); |
714 | } | 714 | } |
715 | D_ASSERT(req->rq_state & RQ_NET_SENT); | 715 | if ((req->rq_state & RQ_NET_MASK) != 0) { |
716 | req->rq_state |= RQ_NET_DONE; | 716 | req->rq_state |= RQ_NET_DONE; |
717 | if (mdev->net_conf->wire_protocol == DRBD_PROT_A) | 717 | if (mdev->net_conf->wire_protocol == DRBD_PROT_A) |
718 | atomic_sub(req->size>>9, &mdev->ap_in_flight); | 718 | atomic_sub(req->size>>9, &mdev->ap_in_flight); |
719 | } | ||
719 | _req_may_be_done(req, m); /* Allowed while state.susp */ | 720 | _req_may_be_done(req, m); /* Allowed while state.susp */ |
720 | break; | 721 | break; |
721 | 722 | ||