@@ -899,11 +899,18 @@ static blk_qc_t __submit_bio(struct bio *bio)
899
899
struct gendisk * disk = bio -> bi_bdev -> bd_disk ;
900
900
blk_qc_t ret = BLK_QC_T_NONE ;
901
901
902
- if (blk_crypto_bio_prep (& bio )) {
903
- if (!disk -> fops -> submit_bio )
904
- return blk_mq_submit_bio (bio );
902
+ if (unlikely (bio_queue_enter (bio ) != 0 ))
903
+ return BLK_QC_T_NONE ;
904
+
905
+ if (!submit_bio_checks (bio ) || !blk_crypto_bio_prep (& bio ))
906
+ goto queue_exit ;
907
+ if (disk -> fops -> submit_bio ) {
905
908
ret = disk -> fops -> submit_bio (bio );
909
+ goto queue_exit ;
906
910
}
911
+ return blk_mq_submit_bio (bio );
912
+
913
+ queue_exit :
907
914
blk_queue_exit (disk -> queue );
908
915
return ret ;
909
916
}
@@ -941,9 +948,6 @@ static blk_qc_t __submit_bio_noacct(struct bio *bio)
941
948
struct request_queue * q = bio -> bi_bdev -> bd_disk -> queue ;
942
949
struct bio_list lower , same ;
943
950
944
- if (unlikely (bio_queue_enter (bio ) != 0 ))
945
- continue ;
946
-
947
951
/*
948
952
* Create a fresh bio_list for all subordinate requests.
949
953
*/
@@ -979,23 +983,12 @@ static blk_qc_t __submit_bio_noacct(struct bio *bio)
979
983
static blk_qc_t __submit_bio_noacct_mq (struct bio * bio )
980
984
{
981
985
struct bio_list bio_list [2 ] = { };
982
- blk_qc_t ret = BLK_QC_T_NONE ;
986
+ blk_qc_t ret ;
983
987
984
988
current -> bio_list = bio_list ;
985
989
986
990
do {
987
- struct gendisk * disk = bio -> bi_bdev -> bd_disk ;
988
-
989
- if (unlikely (bio_queue_enter (bio ) != 0 ))
990
- continue ;
991
-
992
- if (!blk_crypto_bio_prep (& bio )) {
993
- blk_queue_exit (disk -> queue );
994
- ret = BLK_QC_T_NONE ;
995
- continue ;
996
- }
997
-
998
- ret = blk_mq_submit_bio (bio );
991
+ ret = __submit_bio (bio );
999
992
} while ((bio = bio_list_pop (& bio_list [0 ])));
1000
993
1001
994
current -> bio_list = NULL ;
@@ -1013,9 +1006,6 @@ static blk_qc_t __submit_bio_noacct_mq(struct bio *bio)
1013
1006
*/
1014
1007
blk_qc_t submit_bio_noacct (struct bio * bio )
1015
1008
{
1016
- if (!submit_bio_checks (bio ))
1017
- return BLK_QC_T_NONE ;
1018
-
1019
1009
/*
1020
1010
* We only want one ->submit_bio to be active at a time, else stack
1021
1011
* usage with stacked devices could be a problem. Use current->bio_list
0 commit comments