[Stgt-devel] [PATCH] Proof of Concept -> Separate thread init/tear-down from backing store open/close.

FUJITA Tomonori fujita.tomonori
Wed Jul 30 14:50:52 CEST 2008


On Wed, 30 Jul 2008 17:44:25 +1000
Mark Harvey <markh794 at gmail.com> wrote:

> Patch also included as an attachment - just in case.
> 
> >From 715e434fff633ff8f346d181aeae3f27c9564553 Mon Sep 17 00:00:00 2001
> From: Mark Harvey <markh794 at gmail.com>
> Date: Wed, 30 Jul 2008 17:27:28 +1000
> Subject: Separate thread init/tear-down from backing store open/close.
> 
> Fix segfault when lu created without a backing store.
>  - Devices defined as 'removable' are able to be configured without a backing
>    store defined.
>  - thread init via bs_init() which is called for all logical units
>  - thread tear-down via bs_exit() which is called for all logical units.
>  - bs_open() limited to opening backing store path (called when required).
>  - bs_close() limited to closing backing store fd (called when required).
> 
> Note: bs_aio and bs_mmap compile-tested only.
> 
> Signed-off-by: Mark Harvey <markh794 at gmail.com>
> ---
>  usr/bs_aio.c  |   25 +++++++++++++++++--------
>  usr/bs_mmap.c |   22 ++++++++++++----------
>  usr/bs_rdwr.c |   25 ++++++++++++++-----------
>  usr/bs_ssc.c  |   25 +++++++++++++------------
>  usr/target.c  |   15 ++++++++++++---
>  usr/tgtd.h    |    2 ++
>  6 files changed, 70 insertions(+), 44 deletions(-)

Thanks, looks nice.

We need to check the return value of bs_init but the rest is fine by
me (I've attached a patch).

Have you tested this?

If it works fine for ssc and mmc, I'll apply the patches.

=
From: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>
Subject: [PATCH] check the return value of bs_init in tgt_device_create

Signed-off-by: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>
---
 usr/target.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/usr/target.c b/usr/target.c
index 62f284c..70bf72a 100644
--- a/usr/target.c
+++ b/usr/target.c
@@ -485,21 +485,24 @@ int tgt_device_create(int tid, int dev_type, uint64_t lun, char *params,
  	if (lu->dev_type_template.lu_init) {
 		ret = lu->dev_type_template.lu_init(lu);
 		if (ret)
-			goto free_lu;
+			goto fail_lu_init;
 	}
 
-	if (lu->bst->bs_init)
-		lu->bst->bs_init(lu);
+	if (lu->bst->bs_init) {
+		ret = lu->bst->bs_init(lu);
+		if (ret)
+			goto fail_bs_init;
+	}
 
 	if (backing && !path && !lu->attrs.removable) {
 		ret = TGTADM_INVALID_REQUEST;
-		goto free_lu;
+		goto fail_bs_init;
 	}
 
 	if (backing && path) {
 		ret = tgt_device_path_update(target, lu, path);
 		if (ret)
-			goto free_lu;
+			goto fail_bs_init;
 	}
 
 	if (tgt_drivers[target->lid]->lu_create)
@@ -541,7 +544,10 @@ out:
 	if (path)
 		free(path);
 	return ret;
-free_lu:
+fail_bs_init:
+	if (lu->bst->bs_exit)
+		lu->bst->bs_exit(lu);
+fail_lu_init:
 	free(lu);
 	goto out;
 }
-- 
1.5.4.2





More information about the stgt mailing list