@@ -1743,12 +1743,12 @@ static blk_qc_t request_to_qc_t(struct blk_mq_hw_ctx *hctx, struct request *rq)
1743
1743
1744
1744
static blk_status_t __blk_mq_issue_directly (struct blk_mq_hw_ctx * hctx ,
1745
1745
struct request * rq ,
1746
- blk_qc_t * cookie )
1746
+ blk_qc_t * cookie , bool last )
1747
1747
{
1748
1748
struct request_queue * q = rq -> q ;
1749
1749
struct blk_mq_queue_data bd = {
1750
1750
.rq = rq ,
1751
- .last = true ,
1751
+ .last = last ,
1752
1752
};
1753
1753
blk_qc_t new_cookie ;
1754
1754
blk_status_t ret ;
@@ -1783,7 +1783,7 @@ static blk_status_t __blk_mq_issue_directly(struct blk_mq_hw_ctx *hctx,
1783
1783
static blk_status_t __blk_mq_try_issue_directly (struct blk_mq_hw_ctx * hctx ,
1784
1784
struct request * rq ,
1785
1785
blk_qc_t * cookie ,
1786
- bool bypass_insert )
1786
+ bool bypass_insert , bool last )
1787
1787
{
1788
1788
struct request_queue * q = rq -> q ;
1789
1789
bool run_queue = true;
@@ -1812,7 +1812,7 @@ static blk_status_t __blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1812
1812
goto insert ;
1813
1813
}
1814
1814
1815
- return __blk_mq_issue_directly (hctx , rq , cookie );
1815
+ return __blk_mq_issue_directly (hctx , rq , cookie , last );
1816
1816
insert :
1817
1817
if (bypass_insert )
1818
1818
return BLK_STS_RESOURCE ;
@@ -1831,7 +1831,7 @@ static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1831
1831
1832
1832
hctx_lock (hctx , & srcu_idx );
1833
1833
1834
- ret = __blk_mq_try_issue_directly (hctx , rq , cookie , false);
1834
+ ret = __blk_mq_try_issue_directly (hctx , rq , cookie , false, true );
1835
1835
if (ret == BLK_STS_RESOURCE || ret == BLK_STS_DEV_RESOURCE )
1836
1836
blk_mq_sched_insert_request (rq , false, true, false);
1837
1837
else if (ret != BLK_STS_OK )
@@ -1840,15 +1840,15 @@ static void blk_mq_try_issue_directly(struct blk_mq_hw_ctx *hctx,
1840
1840
hctx_unlock (hctx , srcu_idx );
1841
1841
}
1842
1842
1843
- blk_status_t blk_mq_request_issue_directly (struct request * rq )
1843
+ blk_status_t blk_mq_request_issue_directly (struct request * rq , bool last )
1844
1844
{
1845
1845
blk_status_t ret ;
1846
1846
int srcu_idx ;
1847
1847
blk_qc_t unused_cookie ;
1848
1848
struct blk_mq_hw_ctx * hctx = rq -> mq_hctx ;
1849
1849
1850
1850
hctx_lock (hctx , & srcu_idx );
1851
- ret = __blk_mq_try_issue_directly (hctx , rq , & unused_cookie , true);
1851
+ ret = __blk_mq_try_issue_directly (hctx , rq , & unused_cookie , true, last );
1852
1852
hctx_unlock (hctx , srcu_idx );
1853
1853
1854
1854
return ret ;
@@ -1863,7 +1863,7 @@ void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
1863
1863
queuelist );
1864
1864
1865
1865
list_del_init (& rq -> queuelist );
1866
- ret = blk_mq_request_issue_directly (rq );
1866
+ ret = blk_mq_request_issue_directly (rq , list_empty ( list ) );
1867
1867
if (ret != BLK_STS_OK ) {
1868
1868
if (ret == BLK_STS_RESOURCE ||
1869
1869
ret == BLK_STS_DEV_RESOURCE ) {
0 commit comments