Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 994442e8 authored by Mike Christie's avatar Mike Christie Committed by James Bottomley
Browse files

[SCSI] iscsi: fix run list corruption



from davidw@netapp.com:

We must grab the session lock when modifying the running lists.

Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 67a61114
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -552,8 +552,10 @@ static int iscsi_data_xmit(struct iscsi_conn *conn)
        if (unlikely(__kfifo_len(conn->immqueue))) {
	        while (__kfifo_get(conn->immqueue, (void*)&conn->mtask,
			           sizeof(void*))) {
			spin_lock_bh(&conn->session->lock);
			list_add_tail(&conn->mtask->running,
				      &conn->mgmt_run_list);
			spin_unlock_bh(&conn->session->lock);
		        if (tt->xmit_mgmt_task(conn, conn->mtask))
			        goto again;
	        }
@@ -568,8 +570,10 @@ static int iscsi_data_xmit(struct iscsi_conn *conn)
		 * iscsi tcp may readd the task to the xmitqueue to send
		 * write data
		 */
		spin_lock_bh(&conn->session->lock);
		if (list_empty(&conn->ctask->running))
			list_add_tail(&conn->ctask->running, &conn->run_list);
		spin_unlock_bh(&conn->session->lock);
		if (tt->xmit_cmd_task(conn, conn->ctask))
			goto again;
	}
@@ -580,8 +584,10 @@ static int iscsi_data_xmit(struct iscsi_conn *conn)
        if (unlikely(__kfifo_len(conn->mgmtqueue))) {
	        while (__kfifo_get(conn->mgmtqueue, (void*)&conn->mtask,
			           sizeof(void*))) {
			spin_lock_bh(&conn->session->lock);
			list_add_tail(&conn->mtask->running,
				      &conn->mgmt_run_list);
			spin_unlock_bh(&conn->session->lock);
		        if (tt->xmit_mgmt_task(conn, conn->mtask))
			        goto again;
	        }