Messages in this thread Patch in this message | | | Subject | [patch 1/2]block: change force plug flush call order | From | Shaohua Li <> | Date | Wed, 24 Aug 2011 16:55:29 +0800 |
| |
Do blk_flush_plug_list() first and then add new request at the tail. New request can't be merged to existing requests, but later new requests might be merged with this new one. If blk_flush_plug_list() is done later, the merge doesn't happen. Believe it or not, this fixes a 10% regression running sysbench workload.
Signed-off-by: Shaohua Li <shli@kernel.org> Signed-off-by: Shaohua Li <shaohua.li@intel.com> --- block/blk-core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
Index: linux/block/blk-core.c =================================================================== --- linux.orig/block/blk-core.c 2011-08-24 16:09:39.000000000 +0800 +++ linux/block/blk-core.c 2011-08-24 16:13:20.000000000 +0800 @@ -1302,11 +1302,11 @@ get_rq: if (__rq->q != q) plug->should_sort = 1; } - list_add_tail(&req->queuelist, &plug->list); - plug->count++; - drive_stat_acct(req, 1); if (plug->count >= BLK_MAX_REQUEST_COUNT) blk_flush_plug_list(plug, false); + plug->count++; + list_add_tail(&req->queuelist, &plug->list); + drive_stat_acct(req, 1); } else { spin_lock_irq(q->queue_lock); add_acct_request(q, req, where);
| |