vhost-scsi: Drop vhost_scsi_mutex use in port callouts
We are using the vhost_scsi_mutex to make sure vhost_scsi_port_link and vhost_scsi_port_unlink see if vhost_scsi_clear_endpoint has cleared tpg->vhost_scsi and it can't be freed while they are using. However, we currently set the tpg->vhost_scsi pointer while holding tv_tpg_mutex. So, we can just hold that while calling vhost_scsi_hotplug/hotunplug. We then don't need to hold the vhost_scsi_mutex while vhost_scsi_clear_endpoint is holding it and doing a flush which could cause the LUN map/unmap to have to wait on another device's flush. Signed-off-by: Mike Christie <michael.christie@oracle.com> Message-Id: <20230321020624.13323-7-michael.christie@oracle.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
ced9eb376a
commit
f5ed6f9e82
|
@ -2040,15 +2040,10 @@ static int vhost_scsi_port_link(struct se_portal_group *se_tpg,
|
|||
struct vhost_scsi_tpg *tpg = container_of(se_tpg,
|
||||
struct vhost_scsi_tpg, se_tpg);
|
||||
|
||||
mutex_lock(&vhost_scsi_mutex);
|
||||
|
||||
mutex_lock(&tpg->tv_tpg_mutex);
|
||||
tpg->tv_tpg_port_count++;
|
||||
mutex_unlock(&tpg->tv_tpg_mutex);
|
||||
|
||||
vhost_scsi_hotplug(tpg, lun);
|
||||
|
||||
mutex_unlock(&vhost_scsi_mutex);
|
||||
mutex_unlock(&tpg->tv_tpg_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2059,15 +2054,10 @@ static void vhost_scsi_port_unlink(struct se_portal_group *se_tpg,
|
|||
struct vhost_scsi_tpg *tpg = container_of(se_tpg,
|
||||
struct vhost_scsi_tpg, se_tpg);
|
||||
|
||||
mutex_lock(&vhost_scsi_mutex);
|
||||
|
||||
mutex_lock(&tpg->tv_tpg_mutex);
|
||||
tpg->tv_tpg_port_count--;
|
||||
mutex_unlock(&tpg->tv_tpg_mutex);
|
||||
|
||||
vhost_scsi_hotunplug(tpg, lun);
|
||||
|
||||
mutex_unlock(&vhost_scsi_mutex);
|
||||
mutex_unlock(&tpg->tv_tpg_mutex);
|
||||
}
|
||||
|
||||
static ssize_t vhost_scsi_tpg_attrib_fabric_prot_type_store(
|
||||
|
|
Loading…
Reference in New Issue