Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 346217
b: refs/heads/master
c: 3b9ef85
h: refs/heads/master
i:
  346215: 6744406
v: v3
  • Loading branch information
Lars Ellenberg authored and Philipp Reisner committed Nov 8, 2012
1 parent 5f31bfe commit 56c0332
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 27012382bc221a8cf6ca67ced19df699b0ba8e78
refs/heads/master: 3b9ef85e05f123f535d4ee1c5041b80f80648e50
16 changes: 11 additions & 5 deletions trunk/drivers/block/drbd/drbd_req.c
Original file line number Diff line number Diff line change
Expand Up @@ -823,7 +823,7 @@ static void complete_conflicting_writes(struct drbd_request *req)
}

/* called within req_lock and rcu_read_lock() */
static bool conn_check_congested(struct drbd_conf *mdev)
static void maybe_pull_ahead(struct drbd_conf *mdev)
{
struct drbd_tconn *tconn = mdev->tconn;
struct net_conf *nc;
Expand All @@ -834,7 +834,14 @@ static bool conn_check_congested(struct drbd_conf *mdev)
on_congestion = nc ? nc->on_congestion : OC_BLOCK;
if (on_congestion == OC_BLOCK ||
tconn->agreed_pro_version < 96)
return false;
return;

/* If I don't even have good local storage, we can not reasonably try
* to pull ahead of the peer. We also need the local reference to make
* sure mdev->act_log is there.
*/
if (!get_ldev_if_state(mdev, D_UP_TO_DATE))
return;

if (nc->cong_fill &&
atomic_read(&mdev->ap_in_flight) >= nc->cong_fill) {
Expand All @@ -857,8 +864,7 @@ static bool conn_check_congested(struct drbd_conf *mdev)
else /*nc->on_congestion == OC_DISCONNECT */
_drbd_set_state(_NS(mdev, conn, C_DISCONNECTING), 0, NULL);
}

return congested;
put_ldev(mdev);
}

/* If this returns false, and req->private_bio is still set,
Expand Down Expand Up @@ -923,7 +929,7 @@ static int drbd_process_write_request(struct drbd_request *req)
rcu_read_lock();
remote = drbd_should_do_remote(mdev->state);
if (remote) {
conn_check_congested(mdev);
maybe_pull_ahead(mdev);
remote = drbd_should_do_remote(mdev->state);
}
send_oos = drbd_should_send_out_of_sync(mdev->state);
Expand Down

0 comments on commit 56c0332

Please sign in to comment.