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: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
75c3d0bf9c
commit
2f450cc1fb
@ -953,11 +953,8 @@ static int tcm_loop_make_nexus(
|
|||||||
transport_free_session(tl_nexus->se_sess);
|
transport_free_session(tl_nexus->se_sess);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
/*
|
/* Now, register the SAS I_T Nexus as active. */
|
||||||
* Now, register the SAS I_T Nexus as active with the call to
|
transport_register_session(se_tpg, tl_nexus->se_sess->se_node_acl,
|
||||||
* transport_register_session()
|
|
||||||
*/
|
|
||||||
__transport_register_session(se_tpg, tl_nexus->se_sess->se_node_acl,
|
|
||||||
tl_nexus->se_sess, tl_nexus);
|
tl_nexus->se_sess, tl_nexus);
|
||||||
tl_tpg->tl_nexus = tl_nexus;
|
tl_tpg->tl_nexus = tl_nexus;
|
||||||
pr_debug("TCM_Loop_ConfigFS: Established I_T Nexus to emulated"
|
pr_debug("TCM_Loop_ConfigFS: Established I_T Nexus to emulated"
|
||||||
|
@ -1740,10 +1740,9 @@ static int tcm_usbg_make_nexus(struct usbg_tpg *tpg, char *name)
|
|||||||
goto err_session;
|
goto err_session;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Now register the TCM vHost virtual I_T Nexus as active with the
|
* Now register the TCM vHost virtual I_T Nexus as active.
|
||||||
* call to __transport_register_session()
|
|
||||||
*/
|
*/
|
||||||
__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);
|
tv_nexus->tvn_se_sess, tv_nexus);
|
||||||
tpg->tpg_nexus = tv_nexus;
|
tpg->tpg_nexus = tv_nexus;
|
||||||
mutex_unlock(&tpg->tpg_mutex);
|
mutex_unlock(&tpg->tpg_mutex);
|
||||||
|
@ -1956,10 +1956,9 @@ static int vhost_scsi_make_nexus(struct vhost_scsi_tpg *tpg,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Now register the TCM vhost virtual I_T Nexus as active with the
|
* Now register the TCM vhost virtual I_T Nexus as active.
|
||||||
* call to __transport_register_session()
|
|
||||||
*/
|
*/
|
||||||
__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);
|
tv_nexus->tvn_se_sess, tv_nexus);
|
||||||
tpg->tpg_nexus = tv_nexus;
|
tpg->tpg_nexus = tv_nexus;
|
||||||
|
|
||||||
|
@ -1661,11 +1661,8 @@ static int scsiback_make_nexus(struct scsiback_tpg *tpg,
|
|||||||
name);
|
name);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
/*
|
/* Now register the TCM pvscsi virtual I_T Nexus as active. */
|
||||||
* Now register the TCM pvscsi virtual I_T Nexus as active with the
|
transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
|
||||||
* call to __transport_register_session()
|
|
||||||
*/
|
|
||||||
__transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
|
|
||||||
tv_nexus->tvn_se_sess, tv_nexus);
|
tv_nexus->tvn_se_sess, tv_nexus);
|
||||||
tpg->tpg_nexus = tv_nexus;
|
tpg->tpg_nexus = tv_nexus;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user