iscsi: fix 4k stack iscsi setups
PATCH RESEND 7/8 iscsi: fix 4k stack iscsi setups
Quoted 1 line
From Mike Christie <[email protected]>:
This v2 of the patch. This version has been rediffed so that is applies cleanly.
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]>
drivers/scsi/iscsi_tcp.c +5 -14
@@ -525,7 +525,7 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, s__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, 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_conelse __kfifo_put (conn->mgmtqueue, (void *)&mtask,sizeof (void *)); -schedule_work (&conn->xmitwork); - +scsi_queue_work (session->host, &conn->xmitwork);return 0 ; }
drivers/scsi/scsi_transport_iscsi.c +1 -0
@@ -379,6 +379,7 @@ iscsi_transport_create_session(struct sc 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;