aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-core.c
diff options
context:
space:
mode:
authorShaohua Li <shaohua.li@intel.com>2011-11-16 09:21:50 +0100
committerZiyan <jaraidaniel@gmail.com>2016-01-08 10:36:21 +0100
commit509f93403db854affb513debab37bf10f317426c (patch)
tree0ba05629e505ca143bf5102f16f805abda4e88c9 /block/blk-core.c
parentbcd68b25f35f47db311f5ee8d20f0757b465f5dc (diff)
downloadkernel_samsung_tuna-509f93403db854affb513debab37bf10f317426c.zip
kernel_samsung_tuna-509f93403db854affb513debab37bf10f317426c.tar.gz
kernel_samsung_tuna-509f93403db854affb513debab37bf10f317426c.tar.bz2
block: avoid unnecessary plug list flush
get_request_wait() could sleep and flush the plug list. If the list is already flushed, don't flush again. Signed-off-by: Shaohua Li <shaohua.li@intel.com> Reviewed-by: Namhyung Kim <namhyung@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-core.c')
-rw-r--r--block/blk-core.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index f9482c7..f249a21 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1243,15 +1243,17 @@ get_rq:
*/
if (list_empty(&plug->list))
trace_block_plug(q);
- else if (!plug->should_sort) {
- struct request *__rq;
+ else {
+ if (!plug->should_sort) {
+ struct request *__rq;
- __rq = list_entry_rq(plug->list.prev);
- if (__rq->q != q)
- plug->should_sort = 1;
+ __rq = list_entry_rq(plug->list.prev);
+ if (__rq->q != q)
+ plug->should_sort = 1;
+ }
+ if (request_count >= BLK_MAX_REQUEST_COUNT)
+ blk_flush_plug_list(plug, false);
}
- if (request_count >= BLK_MAX_REQUEST_COUNT)
- blk_flush_plug_list(plug, false);
list_add_tail(&req->queuelist, &plug->list);
plug->count++;
drive_stat_acct(req, 1);