| @@ -1677,7 +1677,8 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) · 1676 unmodified lines |
| 1677 | 1677 | list_splice_init(&plug->mq_list, &list); |
| 1678 | 1678 | plug->rq_count = 0; |
| 1679 | 1679 | |
| 1680 | | − list_sort(NULL, &list, plug_rq_cmp); |
| 1680 | + if (plug->rq_count > 2 && plug->multiple_queues) |
| 1681 | + list_sort(NULL, &list, plug_rq_cmp); |
| 1681 | 1682 | |
| 1682 | 1683 | this_q = NULL; |
| 1683 | 1684 | this_hctx = NULL; |
| @@ -1866,6 +1867,20 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx, · 182 unmodified lines |
| 1866 | 1867 | } |
| 1867 | 1868 | } |
| 1868 | 1869 | |
| 1870 | +static void blk_add_rq_to_plug(struct blk_plug *plug, struct request *rq) |
| 1871 | +{ |
| 1872 | + list_add_tail(&rq->queuelist, &plug->mq_list); |
| 1873 | + plug->rq_count++; |
| 1874 | + if (!plug->multiple_queues && !list_is_singular(&plug->mq_list)) { |
| 1875 | + struct request *tmp; |
| 1876 | + |
| 1877 | + tmp = list_first_entry(&plug->mq_list, struct request, |
| 1878 | + queuelist); |
| 1879 | + if (tmp->q != rq->q) |
| 1880 | + plug->multiple_queues = true; |
| 1881 | + } |
| 1882 | +} |
| 1883 | + |
| 1869 | 1884 | static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio) |
| 1870 | 1885 | { |
| 1871 | 1886 | const int is_sync = op_is_sync(bio->bi_opf); |
| @@ -1932,8 +1947,7 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio) · 60 unmodified lines |
| 1932 | 1947 | trace_block_plug(q); |
| 1933 | 1948 | } |
| 1934 | 1949 | |
| 1935 | | − list_add_tail(&rq->queuelist, &plug->mq_list); |
| 1936 | | − plug->rq_count++; |
| 1950 | + blk_add_rq_to_plug(plug, rq); |
| 1937 | 1951 | } else if (plug && !blk_queue_nomerges(q)) { |
| 1938 | 1952 | blk_mq_bio_to_request(rq, bio); |
| 1939 | 1953 | |
| @@ -1950,8 +1964,7 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio) · 10 unmodified lines |
| 1950 | 1964 | list_del_init(&same_queue_rq->queuelist); |
| 1951 | 1965 | plug->rq_count--; |
| 1952 | 1966 | } |
| 1953 | | − list_add_tail(&rq->queuelist, &plug->mq_list); |
| 1954 | | − plug->rq_count++; |
| 1967 | + blk_add_rq_to_plug(plug, rq); |
| 1955 | 1968 | |
| 1956 | 1969 | blk_mq_put_ctx(data.ctx); |
| 1957 | 1970 | |