diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2009-11-03 02:22:06 +0100 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2009-11-04 15:21:04 +0100 |
commit | 83c38830b04d4e369b9a41acbc562c0422f2f2f2 (patch) | |
tree | 7a56720447e6e8e52b963a18cffd225143fc9fe0 /drivers/block | |
parent | e656ec8ae2c0319b6d52834695f9635217d62de5 (diff) | |
download | linux-83c38830b04d4e369b9a41acbc562c0422f2f2f2.tar.gz linux-83c38830b04d4e369b9a41acbc562c0422f2f2f2.tar.bz2 linux-83c38830b04d4e369b9a41acbc562c0422f2f2f2.zip |
drbd: performance - don't lose unplug events
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/drbd/drbd_req.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index 3678d3d66c6c..d09aac4a84ec 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -505,7 +505,7 @@ void __req_mod(struct drbd_request *req, enum drbd_req_event what, * corresponding hlist_del is in _req_may_be_done() */ hlist_add_head(&req->colision, ar_hash_slot(mdev, req->sector)); - set_bit(UNPLUG_REMOTE, &mdev->flags); /* why? */ + set_bit(UNPLUG_REMOTE, &mdev->flags); D_ASSERT(req->rq_state & RQ_NET_PENDING); req->rq_state |= RQ_NET_QUEUED; @@ -536,6 +536,11 @@ void __req_mod(struct drbd_request *req, enum drbd_req_event what, * * Add req to the (now) current epoch (barrier). */ + /* otherwise we may lose an unplug, which may cause some remote + * io-scheduler timeout to expire, increasing maximum latency, + * hurting performance. */ + set_bit(UNPLUG_REMOTE, &mdev->flags); + /* see drbd_make_request_common, * just after it grabs the req_lock */ D_ASSERT(test_bit(CREATE_BARRIER, &mdev->flags) == 0); |