Skip to content

Commit cd29660

Browse files
Christoph Hellwigmartinkpetersen
authored andcommitted
scsi: dc395x: simplify list handling
Remove the list wrappers, including the pointless list iteration before deletion. Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent 7726618 commit cd29660

File tree

1 file changed

+26
-126
lines changed

1 file changed

+26
-126
lines changed

drivers/scsi/dc395x.c

Lines changed: 26 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -753,105 +753,6 @@ static inline struct ScsiReqBlk *find_cmd(struct scsi_cmnd *cmd,
753753
return NULL;
754754
}
755755

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-
855756
/* Sets the timer to wake us up */
856757
static void waiting_set_timer(struct AdapterCtlBlk *acb, unsigned long to)
857758
{
@@ -923,7 +824,7 @@ static void waiting_process_next(struct AdapterCtlBlk *acb)
923824

924825
/* Try to send to the bus */
925826
if (!start_scsi(acb, pos, srb))
926-
srb_waiting_to_going_move(pos, srb);
827+
list_move(&srb->list, &pos->srb_going_list);
927828
else
928829
waiting_set_timer(acb, HZ/50);
929830
break;
@@ -960,15 +861,15 @@ static void send_srb(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb)
960861
if (dcb->max_command <= list_size(&dcb->srb_going_list) ||
961862
acb->active_dcb ||
962863
(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);
964865
waiting_process_next(acb);
965866
return;
966867
}
967868

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);
972873
waiting_set_timer(acb, HZ / 50);
973874
}
974875
}
@@ -1116,22 +1017,23 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s
11161017
cmd->scsi_done = done;
11171018
cmd->result = 0;
11181019

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) {
11221023
/*
11231024
* Return 1 since we are unable to queue this command at this
11241025
* point in time.
11251026
*/
11261027
dprintkdbg(DBG_0, "queue_command: No free srb's\n");
11271028
return 1;
11281029
}
1030+
list_del(&srb->list);
11291031

11301032
build_srb(cmd, dcb, srb);
11311033

11321034
if (!list_empty(&dcb->srb_waiting_list)) {
11331035
/* append to waiting queue */
1134-
srb_waiting_append(dcb, srb);
1036+
list_add_tail(&srb->list, &dcb->srb_waiting_list);
11351037
waiting_process_next(acb);
11361038
} else {
11371039
/* process immediately */
@@ -1376,11 +1278,11 @@ static int dc395x_eh_abort(struct scsi_cmnd *cmd)
13761278

13771279
srb = find_cmd(cmd, &dcb->srb_waiting_list);
13781280
if (srb) {
1379-
srb_waiting_remove(dcb, srb);
1281+
list_del(&srb->list);
13801282
pci_unmap_srb_sense(acb, srb);
13811283
pci_unmap_srb(acb, srb);
13821284
free_tag(dcb, srb);
1383-
srb_free_insert(acb, srb);
1285+
list_add_tail(&srb->list, &acb->srb_free_list);
13841286
dprintkl(KERN_DEBUG, "eh_abort: Command was waiting\n");
13851287
cmd->result = DID_ABORT << 16;
13861288
return SUCCESS;
@@ -3083,7 +2985,7 @@ static void disconnect(struct AdapterCtlBlk *acb)
30832985
goto disc1;
30842986
}
30852987
free_tag(dcb, srb);
3086-
srb_going_to_waiting_move(dcb, srb);
2988+
list_move(&srb->list, &dcb->srb_waiting_list);
30872989
dprintkdbg(DBG_KG,
30882990
"disconnect: (0x%p) Retry\n",
30892991
srb->cmd);
@@ -3148,7 +3050,7 @@ static void reselect(struct AdapterCtlBlk *acb)
31483050

31493051
srb->state = SRB_READY;
31503052
free_tag(dcb, srb);
3151-
srb_going_to_waiting_move(dcb, srb);
3053+
list_move(&srb->list, &dcb->srb_waiting_list);
31523054
waiting_set_timer(acb, HZ / 20);
31533055

31543056
/* return; */
@@ -3411,7 +3313,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
34113313
tempcnt--;
34123314
dcb->max_command = tempcnt;
34133315
free_tag(dcb, srb);
3414-
srb_going_to_waiting_move(dcb, srb);
3316+
list_move(&srb->list, &dcb->srb_waiting_list);
34153317
waiting_set_timer(acb, HZ / 20);
34163318
srb->adapter_status = 0;
34173319
srb->target_status = 0;
@@ -3498,14 +3400,13 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
34983400
cmd->cmnd[0], srb->total_xfer_length);
34993401
}
35003402

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 */
35063405
dprintkdbg(DBG_0, "srb_done: (0x%p) done result=0x%08x\n",
35073406
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");
35093410
}
35103411
pci_unmap_srb(acb, srb);
35113412

@@ -3535,9 +3436,9 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
35353436
result = MK_RES(0, did_flag, 0, 0);
35363437
printk("G:%p(%02i-%i) ", p,
35373438
p->device->id, (u8)p->device->lun);
3538-
srb_going_remove(dcb, srb);
3439+
list_del(&srb->list);
35393440
free_tag(dcb, srb);
3540-
srb_free_insert(acb, srb);
3441+
list_add_tail(&srb->list, &acb->srb_free_list);
35413442
p->result = result;
35423443
pci_unmap_srb_sense(acb, srb);
35433444
pci_unmap_srb(acb, srb);
@@ -3565,8 +3466,7 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
35653466
result = MK_RES(0, did_flag, 0, 0);
35663467
printk("W:%p<%02i-%i>", p, p->device->id,
35673468
(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);
35703470
p->result = result;
35713471
pci_unmap_srb_sense(acb, srb);
35723472
pci_unmap_srb(acb, srb);
@@ -3705,7 +3605,7 @@ static void request_sense(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
37053605
dprintkl(KERN_DEBUG,
37063606
"request_sense: (0x%p) failed <%02i-%i>\n",
37073607
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);
37093609
waiting_set_timer(acb, HZ / 100);
37103610
}
37113611
}
@@ -4392,7 +4292,7 @@ static void adapter_init_params(struct AdapterCtlBlk *acb)
43924292

43934293
/* link static array of srbs into the srb free list */
43944294
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);
43964296
}
43974297

43984298

0 commit comments

Comments
 (0)