Skip to content

Commit

Permalink
[SCSI] iscsi: fix 4k stack iscsi setups
Browse files Browse the repository at this point in the history
When we run the xmit code from queuecomand the stack trace
gets too deep. The patch runs the xmit code from the scsi_host
work queue. This fixes 4k stack and xfs support and should
fix the st and sg stack usage bugs.

Signed-off-by: Alex Aizman <[email protected]>
Signed-off-by: Dmitry Yusupov <[email protected]>
Signed-off-by: Mike Christie <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
  • Loading branch information
Mike Christie authored and James Bottomley committed Jan 14, 2006
1 parent 7b8631b commit 55e3299
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 14 deletions.
19 changes: 5 additions & 14 deletions drivers/scsi/iscsi_tcp.c
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
__kfifo_put(ctask->r2tqueue, (void*)&r2t, sizeof(void*));
__kfifo_put(conn->writequeue, (void*)&ctask, sizeof(void*));

schedule_work(&conn->xmitwork);
scsi_queue_work(session->host, &conn->xmitwork);
conn->r2t_pdus_cnt++;
spin_unlock(&session->lock);

Expand Down Expand Up @@ -1267,7 +1267,7 @@ iscsi_write_space(struct sock *sk)
conn->old_write_space(sk);
debug_tcp("iscsi_write_space: cid %d\n", conn->id);
clear_bit(SUSPEND_BIT, &conn->suspend_tx);
schedule_work(&conn->xmitwork);
scsi_queue_work(conn->session->host, &conn->xmitwork);
}

static void
Expand Down Expand Up @@ -2275,7 +2275,7 @@ iscsi_xmitworker(void *data)
*/
mutex_lock(&conn->xmitmutex);
if (iscsi_data_xmit(conn))
schedule_work(&conn->xmitwork);
scsi_queue_work(conn->session->host, &conn->xmitwork);
mutex_unlock(&conn->xmitmutex);
}

Expand Down Expand Up @@ -2340,15 +2340,7 @@ iscsi_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
session->cmdsn, session->max_cmdsn - session->exp_cmdsn + 1);
spin_unlock(&session->lock);

if (!in_interrupt() && mutex_trylock(&conn->xmitmutex)) {
spin_unlock_irq(host->host_lock);
if (iscsi_data_xmit(conn))
schedule_work(&conn->xmitwork);
mutex_unlock(&conn->xmitmutex);
spin_lock_irq(host->host_lock);
} else
schedule_work(&conn->xmitwork);

scsi_queue_work(host, &conn->xmitwork);
return 0;

reject:
Expand Down Expand Up @@ -2942,8 +2934,7 @@ iscsi_conn_send_generic(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
else
__kfifo_put(conn->mgmtqueue, (void*)&mtask, sizeof(void*));

schedule_work(&conn->xmitwork);

scsi_queue_work(session->host, &conn->xmitwork);
return 0;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/scsi/scsi_transport_iscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ iscsi_transport_create_session(struct scsi_transport_template *scsit,
shost->max_lun = transport->max_lun;
shost->max_cmd_len = transport->max_cmd_len;
shost->transportt = scsit;
shost->transportt->create_work_queue = 1;

if (scsi_add_host(shost, NULL))
goto free_host;
Expand Down

0 comments on commit 55e3299

Please sign in to comment.