@@ -101,7 +101,7 @@ struct deadline_data {
101101 u32 async_depth ;
102102 int prio_aging_expire ;
103103
104- spinlock_t lock ;
104+ spinlock_t * lock ;
105105};
106106
107107/* Maps an I/O priority class to a deadline scheduler priority. */
@@ -213,7 +213,7 @@ static void dd_merged_requests(struct request_queue *q, struct request *req,
213213 const u8 ioprio_class = dd_rq_ioclass (next );
214214 const enum dd_prio prio = ioprio_class_to_prio [ioprio_class ];
215215
216- lockdep_assert_held (& dd -> lock );
216+ lockdep_assert_held (dd -> lock );
217217
218218 dd -> per_prio [prio ].stats .merged ++ ;
219219
@@ -253,7 +253,7 @@ static u32 dd_queued(struct deadline_data *dd, enum dd_prio prio)
253253{
254254 const struct io_stats_per_prio * stats = & dd -> per_prio [prio ].stats ;
255255
256- lockdep_assert_held (& dd -> lock );
256+ lockdep_assert_held (dd -> lock );
257257
258258 return stats -> inserted - atomic_read (& stats -> completed );
259259}
@@ -323,7 +323,7 @@ static struct request *__dd_dispatch_request(struct deadline_data *dd,
323323 enum dd_prio prio ;
324324 u8 ioprio_class ;
325325
326- lockdep_assert_held (& dd -> lock );
326+ lockdep_assert_held (dd -> lock );
327327
328328 if (!list_empty (& per_prio -> dispatch )) {
329329 rq = list_first_entry (& per_prio -> dispatch , struct request ,
@@ -434,7 +434,7 @@ static struct request *dd_dispatch_prio_aged_requests(struct deadline_data *dd,
434434 enum dd_prio prio ;
435435 int prio_cnt ;
436436
437- lockdep_assert_held (& dd -> lock );
437+ lockdep_assert_held (dd -> lock );
438438
439439 prio_cnt = !!dd_queued (dd , DD_RT_PRIO ) + !!dd_queued (dd , DD_BE_PRIO ) +
440440 !!dd_queued (dd , DD_IDLE_PRIO );
@@ -466,10 +466,9 @@ static struct request *dd_dispatch_request(struct blk_mq_hw_ctx *hctx)
466466 struct request * rq ;
467467 enum dd_prio prio ;
468468
469- spin_lock (& dd -> lock );
470469 rq = dd_dispatch_prio_aged_requests (dd , now );
471470 if (rq )
472- goto unlock ;
471+ return rq ;
473472
474473 /*
475474 * Next, dispatch requests in priority order. Ignore lower priority
@@ -481,9 +480,6 @@ static struct request *dd_dispatch_request(struct blk_mq_hw_ctx *hctx)
481480 break ;
482481 }
483482
484- unlock :
485- spin_unlock (& dd -> lock );
486-
487483 return rq ;
488484}
489485
@@ -552,9 +548,9 @@ static void dd_exit_sched(struct elevator_queue *e)
552548 WARN_ON_ONCE (!list_empty (& per_prio -> fifo_list [DD_READ ]));
553549 WARN_ON_ONCE (!list_empty (& per_prio -> fifo_list [DD_WRITE ]));
554550
555- spin_lock (& dd -> lock );
551+ spin_lock (dd -> lock );
556552 queued = dd_queued (dd , prio );
557- spin_unlock (& dd -> lock );
553+ spin_unlock (dd -> lock );
558554
559555 WARN_ONCE (queued != 0 ,
560556 "statistics for priority %d: i %u m %u d %u c %u\n" ,
@@ -595,7 +591,7 @@ static int dd_init_sched(struct request_queue *q, struct elevator_queue *eq)
595591 dd -> last_dir = DD_WRITE ;
596592 dd -> fifo_batch = fifo_batch ;
597593 dd -> prio_aging_expire = prio_aging_expire ;
598- spin_lock_init ( & dd -> lock ) ;
594+ dd -> lock = & eq -> lock ;
599595
600596 /* We dispatch from request queue wide instead of hw queue */
601597 blk_queue_flag_set (QUEUE_FLAG_SQ_SCHED , q );
@@ -647,9 +643,9 @@ static bool dd_bio_merge(struct request_queue *q, struct bio *bio,
647643 struct request * free = NULL ;
648644 bool ret ;
649645
650- spin_lock (& dd -> lock );
646+ spin_lock (dd -> lock );
651647 ret = blk_mq_sched_try_merge (q , bio , nr_segs , & free );
652- spin_unlock (& dd -> lock );
648+ spin_unlock (dd -> lock );
653649
654650 if (free )
655651 blk_mq_free_request (free );
@@ -671,7 +667,7 @@ static void dd_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
671667 struct dd_per_prio * per_prio ;
672668 enum dd_prio prio ;
673669
674- lockdep_assert_held (& dd -> lock );
670+ lockdep_assert_held (dd -> lock );
675671
676672 prio = ioprio_class_to_prio [ioprio_class ];
677673 per_prio = & dd -> per_prio [prio ];
@@ -715,15 +711,15 @@ static void dd_insert_requests(struct blk_mq_hw_ctx *hctx,
715711 struct deadline_data * dd = q -> elevator -> elevator_data ;
716712 LIST_HEAD (free );
717713
718- spin_lock (& dd -> lock );
714+ spin_lock (dd -> lock );
719715 while (!list_empty (list )) {
720716 struct request * rq ;
721717
722718 rq = list_first_entry (list , struct request , queuelist );
723719 list_del_init (& rq -> queuelist );
724720 dd_insert_request (hctx , rq , flags , & free );
725721 }
726- spin_unlock (& dd -> lock );
722+ spin_unlock (dd -> lock );
727723
728724 blk_mq_free_requests (& free );
729725}
@@ -839,13 +835,13 @@ static const struct elv_fs_entry deadline_attrs[] = {
839835#define DEADLINE_DEBUGFS_DDIR_ATTRS (prio , data_dir , name ) \
840836static void *deadline_##name##_fifo_start(struct seq_file *m, \
841837 loff_t *pos) \
842- __acquires(& dd->lock) \
838+ __acquires(dd->lock) \
843839{ \
844840 struct request_queue *q = m->private; \
845841 struct deadline_data *dd = q->elevator->elevator_data; \
846842 struct dd_per_prio *per_prio = &dd->per_prio[prio]; \
847843 \
848- spin_lock(& dd->lock); \
844+ spin_lock(dd->lock); \
849845 return seq_list_start(&per_prio->fifo_list[data_dir], *pos); \
850846} \
851847 \
@@ -860,12 +856,12 @@ static void *deadline_##name##_fifo_next(struct seq_file *m, void *v, \
860856} \
861857 \
862858static void deadline_##name##_fifo_stop(struct seq_file *m, void *v) \
863- __releases(& dd->lock) \
859+ __releases(dd->lock) \
864860{ \
865861 struct request_queue *q = m->private; \
866862 struct deadline_data *dd = q->elevator->elevator_data; \
867863 \
868- spin_unlock(& dd->lock); \
864+ spin_unlock(dd->lock); \
869865} \
870866 \
871867static const struct seq_operations deadline_##name##_fifo_seq_ops = { \
@@ -931,11 +927,11 @@ static int dd_queued_show(void *data, struct seq_file *m)
931927 struct deadline_data * dd = q -> elevator -> elevator_data ;
932928 u32 rt , be , idle ;
933929
934- spin_lock (& dd -> lock );
930+ spin_lock (dd -> lock );
935931 rt = dd_queued (dd , DD_RT_PRIO );
936932 be = dd_queued (dd , DD_BE_PRIO );
937933 idle = dd_queued (dd , DD_IDLE_PRIO );
938- spin_unlock (& dd -> lock );
934+ spin_unlock (dd -> lock );
939935
940936 seq_printf (m , "%u %u %u\n" , rt , be , idle );
941937
@@ -947,7 +943,7 @@ static u32 dd_owned_by_driver(struct deadline_data *dd, enum dd_prio prio)
947943{
948944 const struct io_stats_per_prio * stats = & dd -> per_prio [prio ].stats ;
949945
950- lockdep_assert_held (& dd -> lock );
946+ lockdep_assert_held (dd -> lock );
951947
952948 return stats -> dispatched + stats -> merged -
953949 atomic_read (& stats -> completed );
@@ -959,11 +955,11 @@ static int dd_owned_by_driver_show(void *data, struct seq_file *m)
959955 struct deadline_data * dd = q -> elevator -> elevator_data ;
960956 u32 rt , be , idle ;
961957
962- spin_lock (& dd -> lock );
958+ spin_lock (dd -> lock );
963959 rt = dd_owned_by_driver (dd , DD_RT_PRIO );
964960 be = dd_owned_by_driver (dd , DD_BE_PRIO );
965961 idle = dd_owned_by_driver (dd , DD_IDLE_PRIO );
966- spin_unlock (& dd -> lock );
962+ spin_unlock (dd -> lock );
967963
968964 seq_printf (m , "%u %u %u\n" , rt , be , idle );
969965
@@ -973,13 +969,13 @@ static int dd_owned_by_driver_show(void *data, struct seq_file *m)
973969#define DEADLINE_DISPATCH_ATTR (prio ) \
974970static void *deadline_dispatch##prio##_start(struct seq_file *m, \
975971 loff_t *pos) \
976- __acquires(& dd->lock) \
972+ __acquires(dd->lock) \
977973{ \
978974 struct request_queue *q = m->private; \
979975 struct deadline_data *dd = q->elevator->elevator_data; \
980976 struct dd_per_prio *per_prio = &dd->per_prio[prio]; \
981977 \
982- spin_lock(& dd->lock); \
978+ spin_lock(dd->lock); \
983979 return seq_list_start(&per_prio->dispatch, *pos); \
984980} \
985981 \
@@ -994,12 +990,12 @@ static void *deadline_dispatch##prio##_next(struct seq_file *m, \
994990} \
995991 \
996992static void deadline_dispatch##prio##_stop(struct seq_file *m, void *v) \
997- __releases(& dd->lock) \
993+ __releases(dd->lock) \
998994{ \
999995 struct request_queue *q = m->private; \
1000996 struct deadline_data *dd = q->elevator->elevator_data; \
1001997 \
1002- spin_unlock(& dd->lock); \
998+ spin_unlock(dd->lock); \
1003999} \
10041000 \
10051001static const struct seq_operations deadline_dispatch##prio##_seq_ops = { \
0 commit comments