diff options
Diffstat (limited to 'block/blk-core.c')
| -rw-r--r-- | block/blk-core.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index f43c8a5840a..ea70e6c80cd 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -1379,15 +1379,19 @@ 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); +				trace_block_plug(q); +			}  		} -		if (request_count >= BLK_MAX_REQUEST_COUNT) -			blk_flush_plug_list(plug, false);  		list_add_tail(&req->queuelist, &plug->list);  		drive_stat_acct(req, 1);  	} else {  |