mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
[SCSI] iscsi: fix 4k stack iscsi setups
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 <itn780@yahoo.com> Signed-off-by: Dmitry Yusupov <dmitry_yus@yahoo.com> Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
7b8631b53b
commit
55e3299d9e
@ -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);
|
||||
|
||||
@ -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
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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:
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user