[dm-devel] Re: dm-emc hardware handler patches
Alasdair G Kergon
agk at redhat.com
Wed Dec 6 22:06:02 UTC 2006
On Tue, Dec 05, 2006 at 03:42:41PM -0500, goggin, edward wrote:
> --- a/drivers/md/dm-mpath.c
> +++ b/drivers/md/dm-mpath.c
> @@ -627,6 +627,7 @@ static int parse_hw_handler(struct arg_s
> struct hw_handler_type *hwht;
> unsigned hw_argc;
> struct dm_target *ti = m->ti;
> + struct mapped_device *md;
>
> static struct param _params[] = {
> {0, 1024, "invalid number of hardware handler args"},
How about this instead?
--- linux-2.6.19.orig/drivers/md/dm-hw-handler.h 2006-12-06 20:49:24.000000000 +0000
+++ linux-2.6.19/drivers/md/dm-hw-handler.h 2006-12-06 21:18:46.000000000 +0000
@@ -16,6 +16,7 @@
struct hw_handler_type;
struct hw_handler {
struct hw_handler_type *type;
+ struct mapped_device *md;
void *context;
};
Then each hw-handler wouldn't need its own code to store it and
we'd just have:
--- linux-2.6.19.orig/drivers/md/dm-mpath.c 2006-12-06 20:55:37.000000000 +0000
+++ linux-2.6.19/drivers/md/dm-mpath.c 2006-12-06 21:35:09.000000000 +0000
@@ -666,6 +666,9 @@ static int parse_hw_handler(struct arg_s
return -EINVAL;
}
+ m->hw_handler.md = dm_table_get_md(ti->table);
+ dm_put(m->hw_handler.md);
+
r = hwht->create(&m->hw_handler, hw_argc - 1, as->argv);
if (r) {
dm_put_hw_handler(hwht);
> + /*
> + * No need to hold a reference on the mapped device here
> + * since one is already held for the duration of the
> + * mapped device open.
> + */
I think it's stronger than that: a (self-)reference must not be held here,
or how would the reference count ever subsequently drop to zero?
Makes you wonder in what circumstances the dm_get() in dm_table_get_md()
is ever required.
Alasdair
--
agk at redhat.com
More information about the dm-devel
mailing list