@@ -1461,22 +1461,28 @@ static blk_qc_t request_to_qc_t(struct blk_mq_hw_ctx *hctx, struct request *rq)
1461
1461
return blk_tag_to_qc_t (rq -> internal_tag , hctx -> queue_num , true);
1462
1462
}
1463
1463
1464
- static void __blk_mq_try_issue_directly (struct request * rq , blk_qc_t * cookie ,
1465
- bool may_sleep )
1464
+ static void __blk_mq_try_issue_directly (struct blk_mq_hw_ctx * hctx ,
1465
+ struct request * rq ,
1466
+ blk_qc_t * cookie , bool may_sleep )
1466
1467
{
1467
1468
struct request_queue * q = rq -> q ;
1468
1469
struct blk_mq_queue_data bd = {
1469
1470
.rq = rq ,
1470
1471
.last = true,
1471
1472
};
1472
- struct blk_mq_hw_ctx * hctx ;
1473
1473
blk_qc_t new_cookie ;
1474
1474
int ret ;
1475
+ bool run_queue = true;
1476
+
1477
+ if (blk_mq_hctx_stopped (hctx )) {
1478
+ run_queue = false;
1479
+ goto insert ;
1480
+ }
1475
1481
1476
1482
if (q -> elevator )
1477
1483
goto insert ;
1478
1484
1479
- if (!blk_mq_get_driver_tag (rq , & hctx , false))
1485
+ if (!blk_mq_get_driver_tag (rq , NULL , false))
1480
1486
goto insert ;
1481
1487
1482
1488
new_cookie = request_to_qc_t (hctx , rq );
@@ -1500,23 +1506,23 @@ static void __blk_mq_try_issue_directly(struct request *rq, blk_qc_t *cookie,
1500
1506
1501
1507
__blk_mq_requeue_request (rq );
1502
1508
insert :
1503
- blk_mq_sched_insert_request (rq , false, true , false, may_sleep );
1509
+ blk_mq_sched_insert_request (rq , false, run_queue , false, may_sleep );
1504
1510
}
1505
1511
1506
1512
static void blk_mq_try_issue_directly (struct blk_mq_hw_ctx * hctx ,
1507
1513
struct request * rq , blk_qc_t * cookie )
1508
1514
{
1509
1515
if (!(hctx -> flags & BLK_MQ_F_BLOCKING )) {
1510
1516
rcu_read_lock ();
1511
- __blk_mq_try_issue_directly (rq , cookie , false);
1517
+ __blk_mq_try_issue_directly (hctx , rq , cookie , false);
1512
1518
rcu_read_unlock ();
1513
1519
} else {
1514
1520
unsigned int srcu_idx ;
1515
1521
1516
1522
might_sleep ();
1517
1523
1518
1524
srcu_idx = srcu_read_lock (& hctx -> queue_rq_srcu );
1519
- __blk_mq_try_issue_directly (rq , cookie , true);
1525
+ __blk_mq_try_issue_directly (hctx , rq , cookie , true);
1520
1526
srcu_read_unlock (& hctx -> queue_rq_srcu , srcu_idx );
1521
1527
}
1522
1528
}
0 commit comments