@@ -753,105 +753,6 @@ static inline struct ScsiReqBlk *find_cmd(struct scsi_cmnd *cmd,
753
753
return NULL ;
754
754
}
755
755
756
-
757
- static struct ScsiReqBlk * srb_get_free (struct AdapterCtlBlk * acb )
758
- {
759
- struct list_head * head = & acb -> srb_free_list ;
760
- struct ScsiReqBlk * srb = NULL ;
761
-
762
- if (!list_empty (head )) {
763
- srb = list_entry (head -> next , struct ScsiReqBlk , list );
764
- list_del (head -> next );
765
- dprintkdbg (DBG_0 , "srb_get_free: srb=%p\n" , srb );
766
- }
767
- return srb ;
768
- }
769
-
770
-
771
- static void srb_free_insert (struct AdapterCtlBlk * acb , struct ScsiReqBlk * srb )
772
- {
773
- dprintkdbg (DBG_0 , "srb_free_insert: srb=%p\n" , srb );
774
- list_add_tail (& srb -> list , & acb -> srb_free_list );
775
- }
776
-
777
-
778
- static void srb_waiting_insert (struct DeviceCtlBlk * dcb ,
779
- struct ScsiReqBlk * srb )
780
- {
781
- dprintkdbg (DBG_0 , "srb_waiting_insert: (0x%p) <%02i-%i> srb=%p\n" ,
782
- srb -> cmd , dcb -> target_id , dcb -> target_lun , srb );
783
- list_add (& srb -> list , & dcb -> srb_waiting_list );
784
- }
785
-
786
-
787
- static void srb_waiting_append (struct DeviceCtlBlk * dcb ,
788
- struct ScsiReqBlk * srb )
789
- {
790
- dprintkdbg (DBG_0 , "srb_waiting_append: (0x%p) <%02i-%i> srb=%p\n" ,
791
- srb -> cmd , dcb -> target_id , dcb -> target_lun , srb );
792
- list_add_tail (& srb -> list , & dcb -> srb_waiting_list );
793
- }
794
-
795
-
796
- static void srb_going_append (struct DeviceCtlBlk * dcb , struct ScsiReqBlk * srb )
797
- {
798
- dprintkdbg (DBG_0 , "srb_going_append: (0x%p) <%02i-%i> srb=%p\n" ,
799
- srb -> cmd , dcb -> target_id , dcb -> target_lun , srb );
800
- list_add_tail (& srb -> list , & dcb -> srb_going_list );
801
- }
802
-
803
-
804
- static void srb_going_remove (struct DeviceCtlBlk * dcb , struct ScsiReqBlk * srb )
805
- {
806
- struct ScsiReqBlk * i ;
807
- struct ScsiReqBlk * tmp ;
808
- dprintkdbg (DBG_0 , "srb_going_remove: (0x%p) <%02i-%i> srb=%p\n" ,
809
- srb -> cmd , dcb -> target_id , dcb -> target_lun , srb );
810
-
811
- list_for_each_entry_safe (i , tmp , & dcb -> srb_going_list , list )
812
- if (i == srb ) {
813
- list_del (& srb -> list );
814
- break ;
815
- }
816
- }
817
-
818
-
819
- static void srb_waiting_remove (struct DeviceCtlBlk * dcb ,
820
- struct ScsiReqBlk * srb )
821
- {
822
- struct ScsiReqBlk * i ;
823
- struct ScsiReqBlk * tmp ;
824
- dprintkdbg (DBG_0 , "srb_waiting_remove: (0x%p) <%02i-%i> srb=%p\n" ,
825
- srb -> cmd , dcb -> target_id , dcb -> target_lun , srb );
826
-
827
- list_for_each_entry_safe (i , tmp , & dcb -> srb_waiting_list , list )
828
- if (i == srb ) {
829
- list_del (& srb -> list );
830
- break ;
831
- }
832
- }
833
-
834
-
835
- static void srb_going_to_waiting_move (struct DeviceCtlBlk * dcb ,
836
- struct ScsiReqBlk * srb )
837
- {
838
- dprintkdbg (DBG_0 ,
839
- "srb_going_to_waiting_move: (0x%p) <%02i-%i> srb=%p\n" ,
840
- srb -> cmd , dcb -> target_id , dcb -> target_lun , srb );
841
- list_move (& srb -> list , & dcb -> srb_waiting_list );
842
- }
843
-
844
-
845
- static void srb_waiting_to_going_move (struct DeviceCtlBlk * dcb ,
846
- struct ScsiReqBlk * srb )
847
- {
848
- dprintkdbg (DBG_0 ,
849
- "srb_waiting_to_going_move: (0x%p) <%02i-%i> srb=%p\n" ,
850
- srb -> cmd , dcb -> target_id , dcb -> target_lun , srb );
851
- list_move (& srb -> list , & dcb -> srb_going_list );
852
- }
853
-
854
-
855
756
/* Sets the timer to wake us up */
856
757
static void waiting_set_timer (struct AdapterCtlBlk * acb , unsigned long to )
857
758
{
@@ -923,7 +824,7 @@ static void waiting_process_next(struct AdapterCtlBlk *acb)
923
824
924
825
/* Try to send to the bus */
925
826
if (!start_scsi (acb , pos , srb ))
926
- srb_waiting_to_going_move ( pos , srb );
827
+ list_move ( & srb -> list , & pos -> srb_going_list );
927
828
else
928
829
waiting_set_timer (acb , HZ /50 );
929
830
break ;
@@ -960,15 +861,15 @@ static void send_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
960
861
if (dcb -> max_command <= list_size (& dcb -> srb_going_list ) ||
961
862
acb -> active_dcb ||
962
863
(acb -> acb_flag & (RESET_DETECT + RESET_DONE + RESET_DEV ))) {
963
- srb_waiting_append ( dcb , srb );
864
+ list_add_tail ( & srb -> list , & dcb -> srb_waiting_list );
964
865
waiting_process_next (acb );
965
866
return ;
966
867
}
967
868
968
- if (!start_scsi (acb , dcb , srb ))
969
- srb_going_append ( dcb , srb );
970
- else {
971
- srb_waiting_insert ( dcb , srb );
869
+ if (!start_scsi (acb , dcb , srb )) {
870
+ list_add_tail ( & srb -> list , & dcb -> srb_going_list );
871
+ } else {
872
+ list_add ( & srb -> list , & dcb -> srb_waiting_list );
972
873
waiting_set_timer (acb , HZ / 50 );
973
874
}
974
875
}
@@ -1116,22 +1017,23 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s
1116
1017
cmd -> scsi_done = done ;
1117
1018
cmd -> result = 0 ;
1118
1019
1119
- srb = srb_get_free ( acb );
1120
- if (! srb )
1121
- {
1020
+ srb = list_first_entry_or_null ( & acb -> srb_free_list ,
1021
+ struct ScsiReqBlk , list );
1022
+ if (! srb ) {
1122
1023
/*
1123
1024
* Return 1 since we are unable to queue this command at this
1124
1025
* point in time.
1125
1026
*/
1126
1027
dprintkdbg (DBG_0 , "queue_command: No free srb's\n" );
1127
1028
return 1 ;
1128
1029
}
1030
+ list_del (& srb -> list );
1129
1031
1130
1032
build_srb (cmd , dcb , srb );
1131
1033
1132
1034
if (!list_empty (& dcb -> srb_waiting_list )) {
1133
1035
/* append to waiting queue */
1134
- srb_waiting_append ( dcb , srb );
1036
+ list_add_tail ( & srb -> list , & dcb -> srb_waiting_list );
1135
1037
waiting_process_next (acb );
1136
1038
} else {
1137
1039
/* process immediately */
@@ -1376,11 +1278,11 @@ static int dc395x_eh_abort(struct scsi_cmnd *cmd)
1376
1278
1377
1279
srb = find_cmd (cmd , & dcb -> srb_waiting_list );
1378
1280
if (srb ) {
1379
- srb_waiting_remove ( dcb , srb );
1281
+ list_del ( & srb -> list );
1380
1282
pci_unmap_srb_sense (acb , srb );
1381
1283
pci_unmap_srb (acb , srb );
1382
1284
free_tag (dcb , srb );
1383
- srb_free_insert ( acb , srb );
1285
+ list_add_tail ( & srb -> list , & acb -> srb_free_list );
1384
1286
dprintkl (KERN_DEBUG , "eh_abort: Command was waiting\n" );
1385
1287
cmd -> result = DID_ABORT << 16 ;
1386
1288
return SUCCESS ;
@@ -3083,7 +2985,7 @@ static void disconnect(struct AdapterCtlBlk *acb)
3083
2985
goto disc1 ;
3084
2986
}
3085
2987
free_tag (dcb , srb );
3086
- srb_going_to_waiting_move ( dcb , srb );
2988
+ list_move ( & srb -> list , & dcb -> srb_waiting_list );
3087
2989
dprintkdbg (DBG_KG ,
3088
2990
"disconnect: (0x%p) Retry\n" ,
3089
2991
srb -> cmd );
@@ -3148,7 +3050,7 @@ static void reselect(struct AdapterCtlBlk *acb)
3148
3050
3149
3051
srb -> state = SRB_READY ;
3150
3052
free_tag (dcb , srb );
3151
- srb_going_to_waiting_move ( dcb , srb );
3053
+ list_move ( & srb -> list , & dcb -> srb_waiting_list );
3152
3054
waiting_set_timer (acb , HZ / 20 );
3153
3055
3154
3056
/* return; */
@@ -3411,7 +3313,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3411
3313
tempcnt -- ;
3412
3314
dcb -> max_command = tempcnt ;
3413
3315
free_tag (dcb , srb );
3414
- srb_going_to_waiting_move ( dcb , srb );
3316
+ list_move ( & srb -> list , & dcb -> srb_waiting_list );
3415
3317
waiting_set_timer (acb , HZ / 20 );
3416
3318
srb -> adapter_status = 0 ;
3417
3319
srb -> target_status = 0 ;
@@ -3498,14 +3400,13 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3498
3400
cmd -> cmnd [0 ], srb -> total_xfer_length );
3499
3401
}
3500
3402
3501
- srb_going_remove (dcb , srb );
3502
- /* Add to free list */
3503
- if (srb == acb -> tmp_srb )
3504
- dprintkl (KERN_ERR , "srb_done: ERROR! Completed cmd with tmp_srb\n" );
3505
- else {
3403
+ if (srb != acb -> tmp_srb ) {
3404
+ /* Add to free list */
3506
3405
dprintkdbg (DBG_0 , "srb_done: (0x%p) done result=0x%08x\n" ,
3507
3406
cmd , cmd -> result );
3508
- srb_free_insert (acb , srb );
3407
+ list_move_tail (& srb -> list , & acb -> srb_free_list );
3408
+ } else {
3409
+ dprintkl (KERN_ERR , "srb_done: ERROR! Completed cmd with tmp_srb\n" );
3509
3410
}
3510
3411
pci_unmap_srb (acb , srb );
3511
3412
@@ -3535,9 +3436,9 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
3535
3436
result = MK_RES (0 , did_flag , 0 , 0 );
3536
3437
printk ("G:%p(%02i-%i) " , p ,
3537
3438
p -> device -> id , (u8 )p -> device -> lun );
3538
- srb_going_remove ( dcb , srb );
3439
+ list_del ( & srb -> list );
3539
3440
free_tag (dcb , srb );
3540
- srb_free_insert ( acb , srb );
3441
+ list_add_tail ( & srb -> list , & acb -> srb_free_list );
3541
3442
p -> result = result ;
3542
3443
pci_unmap_srb_sense (acb , srb );
3543
3444
pci_unmap_srb (acb , srb );
@@ -3565,8 +3466,7 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
3565
3466
result = MK_RES (0 , did_flag , 0 , 0 );
3566
3467
printk ("W:%p<%02i-%i>" , p , p -> device -> id ,
3567
3468
(u8 )p -> device -> lun );
3568
- srb_waiting_remove (dcb , srb );
3569
- srb_free_insert (acb , srb );
3469
+ list_move_tail (& srb -> list , & acb -> srb_free_list );
3570
3470
p -> result = result ;
3571
3471
pci_unmap_srb_sense (acb , srb );
3572
3472
pci_unmap_srb (acb , srb );
@@ -3705,7 +3605,7 @@ static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
3705
3605
dprintkl (KERN_DEBUG ,
3706
3606
"request_sense: (0x%p) failed <%02i-%i>\n" ,
3707
3607
srb -> cmd , dcb -> target_id , dcb -> target_lun );
3708
- srb_going_to_waiting_move ( dcb , srb );
3608
+ list_move ( & srb -> list , & dcb -> srb_waiting_list );
3709
3609
waiting_set_timer (acb , HZ / 100 );
3710
3610
}
3711
3611
}
@@ -4392,7 +4292,7 @@ static void adapter_init_params(struct AdapterCtlBlk *acb)
4392
4292
4393
4293
/* link static array of srbs into the srb free list */
4394
4294
for (i = 0 ; i < acb -> srb_count - 1 ; i ++ )
4395
- srb_free_insert ( acb , & acb -> srb_array [i ]);
4295
+ list_add_tail ( & acb -> srb_array [i ]. list , & acb -> srb_free_list );
4396
4296
}
4397
4297
4398
4298
0 commit comments