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

Commit 92634706 authored by Mike Christie's avatar Mike Christie Committed by Nicholas Bellinger
Browse files

target: break up free_device callback



With this patch free_device is now used to free what is allocated in the
alloc_device callback and destroy_device tears down the resources that are
setup in the configure_device callback.

This patch will be needed in the next patch where tcmu needs
to be able to look up the device in the destroy callback.

Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
Reviewed-by: default avatarBart Van Assche <bart.vanassche@wdc.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 2d76443e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -974,6 +974,8 @@ void target_free_device(struct se_device *dev)
	if (dev->dev_flags & DF_CONFIGURED) {
		destroy_workqueue(dev->tmr_wq);

		dev->transport->destroy_device(dev);

		mutex_lock(&g_device_mutex);
		list_del(&dev->g_dev_node);
		mutex_unlock(&g_device_mutex);
+6 −1
Original line number Diff line number Diff line
@@ -236,6 +236,11 @@ static void fd_dev_call_rcu(struct rcu_head *p)
}

static void fd_free_device(struct se_device *dev)
{
	call_rcu(&dev->rcu_head, fd_dev_call_rcu);
}

static void fd_destroy_device(struct se_device *dev)
{
	struct fd_dev *fd_dev = FD_DEV(dev);

@@ -243,7 +248,6 @@ static void fd_free_device(struct se_device *dev)
		filp_close(fd_dev->fd_file, NULL);
		fd_dev->fd_file = NULL;
	}
	call_rcu(&dev->rcu_head, fd_dev_call_rcu);
}

static int fd_do_rw(struct se_cmd *cmd, struct file *fd,
@@ -826,6 +830,7 @@ static const struct target_backend_ops fileio_ops = {
	.detach_hba		= fd_detach_hba,
	.alloc_device		= fd_alloc_device,
	.configure_device	= fd_configure_device,
	.destroy_device		= fd_destroy_device,
	.free_device		= fd_free_device,
	.parse_cdb		= fd_parse_cdb,
	.set_configfs_dev_params = fd_set_configfs_dev_params,
+6 −2
Original line number Diff line number Diff line
@@ -189,6 +189,11 @@ static void iblock_dev_call_rcu(struct rcu_head *p)
}

static void iblock_free_device(struct se_device *dev)
{
	call_rcu(&dev->rcu_head, iblock_dev_call_rcu);
}

static void iblock_destroy_device(struct se_device *dev)
{
	struct iblock_dev *ib_dev = IBLOCK_DEV(dev);

@@ -196,8 +201,6 @@ static void iblock_free_device(struct se_device *dev)
		blkdev_put(ib_dev->ibd_bd, FMODE_WRITE|FMODE_READ|FMODE_EXCL);
	if (ib_dev->ibd_bio_set != NULL)
		bioset_free(ib_dev->ibd_bio_set);

	call_rcu(&dev->rcu_head, iblock_dev_call_rcu);
}

static unsigned long long iblock_emulate_read_cap_with_block_size(
@@ -858,6 +861,7 @@ static const struct target_backend_ops iblock_ops = {
	.detach_hba		= iblock_detach_hba,
	.alloc_device		= iblock_alloc_device,
	.configure_device	= iblock_configure_device,
	.destroy_device		= iblock_destroy_device,
	.free_device		= iblock_free_device,
	.parse_cdb		= iblock_parse_cdb,
	.set_configfs_dev_params = iblock_set_configfs_dev_params,
+6 −1
Original line number Diff line number Diff line
@@ -563,6 +563,11 @@ static void pscsi_dev_call_rcu(struct rcu_head *p)
}

static void pscsi_free_device(struct se_device *dev)
{
	call_rcu(&dev->rcu_head, pscsi_dev_call_rcu);
}

static void pscsi_destroy_device(struct se_device *dev)
{
	struct pscsi_dev_virt *pdv = PSCSI_DEV(dev);
	struct pscsi_hba_virt *phv = dev->se_hba->hba_ptr;
@@ -592,7 +597,6 @@ static void pscsi_free_device(struct se_device *dev)

		pdv->pdv_sd = NULL;
	}
	call_rcu(&dev->rcu_head, pscsi_dev_call_rcu);
}

static void pscsi_transport_complete(struct se_cmd *cmd, struct scatterlist *sg,
@@ -1084,6 +1088,7 @@ static const struct target_backend_ops pscsi_ops = {
	.pmode_enable_hba	= pscsi_pmode_enable_hba,
	.alloc_device		= pscsi_alloc_device,
	.configure_device	= pscsi_configure_device,
	.destroy_device		= pscsi_destroy_device,
	.free_device		= pscsi_free_device,
	.transport_complete	= pscsi_transport_complete,
	.parse_cdb		= pscsi_parse_cdb,
+6 −1
Original line number Diff line number Diff line
@@ -338,11 +338,15 @@ static void rd_dev_call_rcu(struct rcu_head *p)
}

static void rd_free_device(struct se_device *dev)
{
	call_rcu(&dev->rcu_head, rd_dev_call_rcu);
}

static void rd_destroy_device(struct se_device *dev)
{
	struct rd_dev *rd_dev = RD_DEV(dev);

	rd_release_device_space(rd_dev);
	call_rcu(&dev->rcu_head, rd_dev_call_rcu);
}

static struct rd_dev_sg_table *rd_get_sg_table(struct rd_dev *rd_dev, u32 page)
@@ -651,6 +655,7 @@ static const struct target_backend_ops rd_mcp_ops = {
	.detach_hba		= rd_detach_hba,
	.alloc_device		= rd_alloc_device,
	.configure_device	= rd_configure_device,
	.destroy_device		= rd_destroy_device,
	.free_device		= rd_free_device,
	.parse_cdb		= rd_parse_cdb,
	.set_configfs_dev_params = rd_set_configfs_dev_params,
Loading