diff options
Diffstat (limited to 'drivers/xen/xen-scsiback.c')
| -rw-r--r-- | drivers/xen/xen-scsiback.c | 57 | 
1 files changed, 14 insertions, 43 deletions
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 954188b0b858..8b77e4c06e43 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c @@ -1010,12 +1010,6 @@ out_free:  	return err;  } -static void __scsiback_del_translation_entry(struct v2p_entry *entry) -{ -	list_del(&entry->l); -	kref_put(&entry->kref, scsiback_free_translation_entry); -} -  /*    Delete the translation entry specified  */ @@ -1024,18 +1018,20 @@ static int scsiback_del_translation_entry(struct vscsibk_info *info,  {  	struct v2p_entry *entry;  	unsigned long flags; -	int ret = 0;  	spin_lock_irqsave(&info->v2p_lock, flags);  	/* Find out the translation entry specified */  	entry = scsiback_chk_translation_entry(info, v);  	if (entry) -		__scsiback_del_translation_entry(entry); -	else -		ret = -ENOENT; +		list_del(&entry->l);  	spin_unlock_irqrestore(&info->v2p_lock, flags); -	return ret; + +	if (!entry) +		return -ENOENT; + +	kref_put(&entry->kref, scsiback_free_translation_entry); +	return 0;  }  static void scsiback_do_add_lun(struct vscsibk_info *info, const char *state, @@ -1239,14 +1235,19 @@ static void scsiback_release_translation_entry(struct vscsibk_info *info)  {  	struct v2p_entry *entry, *tmp;  	struct list_head *head = &(info->v2p_entry_lists); +	struct list_head tmp_list;  	unsigned long flags;  	spin_lock_irqsave(&info->v2p_lock, flags); -	list_for_each_entry_safe(entry, tmp, head, l) -		__scsiback_del_translation_entry(entry); +	list_cut_before(&tmp_list, head, head);  	spin_unlock_irqrestore(&info->v2p_lock, flags); + +	list_for_each_entry_safe(entry, tmp, &tmp_list, l) { +		list_del(&entry->l); +		kref_put(&entry->kref, scsiback_free_translation_entry); +	}  }  static void scsiback_remove(struct xenbus_device *dev) @@ -1406,11 +1407,6 @@ static void scsiback_drop_tport(struct se_wwn *wwn)  	kfree(tport);  } -static u32 scsiback_tpg_get_inst_index(struct se_portal_group *se_tpg) -{ -	return 1; -} -  static int scsiback_check_stop_free(struct se_cmd *se_cmd)  {  	return transport_generic_free_cmd(se_cmd, 0); @@ -1421,11 +1417,6 @@ static void scsiback_release_cmd(struct se_cmd *se_cmd)  	target_free_tag(se_cmd->se_sess, se_cmd);  } -static u32 scsiback_sess_get_index(struct se_session *se_sess) -{ -	return 0; -} -  static int scsiback_write_pending(struct se_cmd *se_cmd)  {  	/* Go ahead and process the write immediately */ @@ -1434,15 +1425,6 @@ static int scsiback_write_pending(struct se_cmd *se_cmd)  	return 0;  } -static void scsiback_set_default_node_attrs(struct se_node_acl *nacl) -{ -} - -static int scsiback_get_cmd_state(struct se_cmd *se_cmd) -{ -	return 0; -} -  static int scsiback_queue_data_in(struct se_cmd *se_cmd)  {  	struct vscsibk_pend *pending_req = container_of(se_cmd, @@ -1822,11 +1804,6 @@ static int scsiback_check_true(struct se_portal_group *se_tpg)  	return 1;  } -static int scsiback_check_false(struct se_portal_group *se_tpg) -{ -	return 0; -} -  static const struct target_core_fabric_ops scsiback_ops = {  	.module				= THIS_MODULE,  	.fabric_name			= "xen-pvscsi", @@ -1834,16 +1811,10 @@ static const struct target_core_fabric_ops scsiback_ops = {  	.tpg_get_tag			= scsiback_get_tag,  	.tpg_check_demo_mode		= scsiback_check_true,  	.tpg_check_demo_mode_cache	= scsiback_check_true, -	.tpg_check_demo_mode_write_protect = scsiback_check_false, -	.tpg_check_prod_mode_write_protect = scsiback_check_false, -	.tpg_get_inst_index		= scsiback_tpg_get_inst_index,  	.check_stop_free		= scsiback_check_stop_free,  	.release_cmd			= scsiback_release_cmd, -	.sess_get_index			= scsiback_sess_get_index,  	.sess_get_initiator_sid		= NULL,  	.write_pending			= scsiback_write_pending, -	.set_default_node_attributes	= scsiback_set_default_node_attrs, -	.get_cmd_state			= scsiback_get_cmd_state,  	.queue_data_in			= scsiback_queue_data_in,  	.queue_status			= scsiback_queue_status,  	.queue_tm_rsp			= scsiback_queue_tm_rsp,  |