diff mbox

[11/11] target: move rcu call to the core target code

Message ID 1497649650-7605-12-git-send-email-mchristi@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Mike Christie June 16, 2017, 9:47 p.m. UTC
With the last patch to tcmu, there is no need to have each backend
module do their own rcu calls for freeing the device. This patch
moves it to target core.

Signed-off-by: Mike Christie <mchristi@redhat.com>
---
 drivers/target/target_core_device.c | 9 ++++++++-
 drivers/target/target_core_file.c   | 8 +-------
 drivers/target/target_core_iblock.c | 8 +-------
 drivers/target/target_core_pscsi.c  | 8 +-------
 drivers/target/target_core_user.c   | 8 +-------
 5 files changed, 12 insertions(+), 29 deletions(-)

Comments

Bart Van Assche June 21, 2017, 6:32 p.m. UTC | #1
On Fri, 2017-06-16 at 16:47 -0500, Mike Christie wrote: 
> +static void target_free_device_call_rcu(struct rcu_head *p)
> +{
> +	struct se_device *dev = container_of(p, struct se_device, rcu_head);
> +
> +	dev->transport->free_device(dev);
> +}

Hello Mike,

How about calling this function "target_free_device()" and renaming
"target_free_device()" into "target_destroy_device()"? I think that will make
the intention of both functions more clear. Otherwise this patch looks fine
to me.

Bart.--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mike Christie June 21, 2017, 6:42 p.m. UTC | #2
On 06/21/2017 01:32 PM, Bart Van Assche wrote:
> On Fri, 2017-06-16 at 16:47 -0500, Mike Christie wrote: 
>> +static void target_free_device_call_rcu(struct rcu_head *p)
>> +{
>> +	struct se_device *dev = container_of(p, struct se_device, rcu_head);
>> +
>> +	dev->transport->free_device(dev);
>> +}
> 
> Hello Mike,
> 
> How about calling this function "target_free_device()" and renaming
> "target_free_device()" into "target_destroy_device()"? I think that will make
> the intention of both functions more clear. Otherwise this patch looks fine
> to me.
> 

Oh yeah, nice. Will do.

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
index 9c45602..d2becd0 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -1059,6 +1059,13 @@  int target_configure_device(struct se_device *dev)
 	return ret;
 }
 
+static void target_free_device_call_rcu(struct rcu_head *p)
+{
+	struct se_device *dev = container_of(p, struct se_device, rcu_head);
+
+	dev->transport->free_device(dev);
+}
+
 void target_free_device(struct se_device *dev)
 {
 	struct se_hba *hba = dev->se_hba;
@@ -1087,7 +1094,7 @@  void target_free_device(struct se_device *dev)
 	if (dev->transport->free_prot)
 		dev->transport->free_prot(dev);
 
-	dev->transport->free_device(dev);
+	call_rcu(&dev->rcu_head, target_free_device_call_rcu);
 }
 
 int core_dev_setup_virtual_lun0(void)
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index 50f2355..c8c2207 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -227,19 +227,13 @@  static int fd_configure_device(struct se_device *dev)
 	return ret;
 }
 
-static void fd_dev_call_rcu(struct rcu_head *p)
+static void fd_free_device(struct se_device *dev)
 {
-	struct se_device *dev = container_of(p, struct se_device, rcu_head);
 	struct fd_dev *fd_dev = FD_DEV(dev);
 
 	kfree(fd_dev);
 }
 
-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);
diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c
index a5e16f7..bc36d7b 100644
--- a/drivers/target/target_core_iblock.c
+++ b/drivers/target/target_core_iblock.c
@@ -180,19 +180,13 @@  static int iblock_configure_device(struct se_device *dev)
 	return ret;
 }
 
-static void iblock_dev_call_rcu(struct rcu_head *p)
+static void iblock_free_device(struct se_device *dev)
 {
-	struct se_device *dev = container_of(p, struct se_device, rcu_head);
 	struct iblock_dev *ib_dev = IBLOCK_DEV(dev);
 
 	kfree(ib_dev);
 }
 
-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);
diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
index 7d944b2..b29518c 100644
--- a/drivers/target/target_core_pscsi.c
+++ b/drivers/target/target_core_pscsi.c
@@ -554,19 +554,13 @@  static int pscsi_configure_device(struct se_device *dev)
 	return -ENODEV;
 }
 
-static void pscsi_dev_call_rcu(struct rcu_head *p)
+static void pscsi_free_device(struct se_device *dev)
 {
-	struct se_device *dev = container_of(p, struct se_device, rcu_head);
 	struct pscsi_dev_virt *pdv = PSCSI_DEV(dev);
 
 	kfree(pdv);
 }
 
-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);
diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
index c53cbaf..624d9bb 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -1529,19 +1529,13 @@  static void tcmu_blocks_release(struct tcmu_dev *udev)
 	mutex_unlock(&udev->cmdr_lock);
 }
 
-static void tcmu_dev_call_rcu(struct rcu_head *p)
+static void tcmu_free_device(struct se_device *dev)
 {
-	struct se_device *dev = container_of(p, struct se_device, rcu_head);
 	struct tcmu_dev *udev = TCMU_DEV(dev);
 
 	kfree(udev);
 }
 
-static void tcmu_free_device(struct se_device *dev)
-{
-	call_rcu(&dev->rcu_head, tcmu_dev_call_rcu);
-}
-
 static void tcmu_destroy_device(struct se_device *dev)
 {
 	struct tcmu_dev *udev = TCMU_DEV(dev);