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

Commit 2f450cc1 authored by Bart Van Assche's avatar Bart Van Assche Committed by Nicholas Bellinger
Browse files

loop/usb/vhost-scsi/xen-scsiback: Fix use of __transport_register_session



This patch changes loopback, usb-gadget, vhost-scsi and xen-scsiback
fabric code to invoke transport_register_session() instead of the
unprotected flavour, to ensure se_tpg->session_lock is taken when
adding new session list nodes to se_tpg->tpg_sess_list.

Note that since these four fabric drivers already hold their own
internal TPG mutexes when accessing se_tpg->tpg_sess_list, and
consist of a single se_session created through configfs attribute
access, no list corruption can currently occur.

So for correctness sake, go ahead and use the se_tpg->session_lock
protected version for these four fabric drivers.

Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 75c3d0bf
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -953,11 +953,8 @@ static int tcm_loop_make_nexus(
		transport_free_session(tl_nexus->se_sess);
		goto out;
	}
	/*
	 * Now, register the SAS I_T Nexus as active with the call to
	 * transport_register_session()
	 */
	__transport_register_session(se_tpg, tl_nexus->se_sess->se_node_acl,
	/* Now, register the SAS I_T Nexus as active. */
	transport_register_session(se_tpg, tl_nexus->se_sess->se_node_acl,
			tl_nexus->se_sess, tl_nexus);
	tl_tpg->tl_nexus = tl_nexus;
	pr_debug("TCM_Loop_ConfigFS: Established I_T Nexus to emulated"
+2 −3
Original line number Diff line number Diff line
@@ -1740,10 +1740,9 @@ static int tcm_usbg_make_nexus(struct usbg_tpg *tpg, char *name)
		goto err_session;
	}
	/*
	 * Now register the TCM vHost virtual I_T Nexus as active with the
	 * call to __transport_register_session()
	 * Now register the TCM vHost virtual I_T Nexus as active.
	 */
	__transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
	transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
			tv_nexus->tvn_se_sess, tv_nexus);
	tpg->tpg_nexus = tv_nexus;
	mutex_unlock(&tpg->tpg_mutex);
+2 −3
Original line number Diff line number Diff line
@@ -1956,10 +1956,9 @@ static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg,
		goto out;
	}
	/*
	 * Now register the TCM vhost virtual I_T Nexus as active with the
	 * call to __transport_register_session()
	 * Now register the TCM vhost virtual I_T Nexus as active.
	 */
	__transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
	transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
			tv_nexus->tvn_se_sess, tv_nexus);
	tpg->tpg_nexus = tv_nexus;

+2 −5
Original line number Diff line number Diff line
@@ -1661,11 +1661,8 @@ static int scsiback_make_nexus(struct scsiback_tpg *tpg,
			 name);
		goto out;
	}
	/*
	 * Now register the TCM pvscsi virtual I_T Nexus as active with the
	 * call to __transport_register_session()
	 */
	__transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
	/* Now register the TCM pvscsi virtual I_T Nexus as active. */
	transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
			tv_nexus->tvn_se_sess, tv_nexus);
	tpg->tpg_nexus = tv_nexus;