FAILED: patch "[PATCH] dm table: fix missing dm_put_target_type() in" failed to apply to 4.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
dafa724bf582181d9a7d54f5cb4ca0bf8ef29269Mon Sep 17 00:00:00 2001
From: "tang.junhui" <[email protected]>
Date: Fri, 21 Oct 2016 09:35:32 +0800
Subject: [PATCH] dm table: fix missing dm_put_target_type() in
dm_table_add_target()
dm_get_target_type() was previously called so any error returned from dm_table_add_target() must first call dm_put_target_type(). Otherwise the DM target module's reference count will leak and the associated kernel module will be unable to be removed.
Also, leverage the fact that r is already -EINVAL and remove an extra newline.
drivers/md/dm-table.c +9 -15
@@ -695,37 +695,32 @@ int dm_table_add_target(struct dm_table *t, const char *type, tgt->type =dm_get_target_type (type);if (!tgt->type) { -DMERR ("%s: %s: unknown target type" ,dm_device_name (t->md), - type); +DMERR ("%s: %s: unknown target type" ,dm_device_name (t->md), type);return -EINVAL ; }if (dm_target_needs_singleton (tgt->type)) {if (t->num_targets) { -DMERR ("%s: target type %s must appear alone in table" , -dm_device_name (t->md), type); -return -EINVAL ; + tgt->error ="singleton target type must appear alone in table" ; + goto bad; } t->singleton = true; }if (dm_target_always_writeable (tgt->type) && !(t->mode &FMODE_WRITE )) { -DMERR ("%s: target type %s may not be included in read-only tables" , -dm_device_name (t->md), type); -return -EINVAL ; + tgt->error ="target type may not be included in a read-only table" ; + goto bad; }if (t->immutable_target_type) {if (t->immutable_target_type != tgt->type) { -DMERR ("%s: immutable target type %s cannot be mixed with other target types" , -dm_device_name (t->md), t->immutable_target_type->name); -return -EINVAL ; + tgt->error ="immutable target type cannot be mixed with other target types" ; + goto bad; } }else if (dm_target_is_immutable (tgt->type)) {if (t->num_targets) { -DMERR ("%s: immutable target type %s cannot be mixed with other target types" , -dm_device_name (t->md), tgt->type->name); -return -EINVAL ; + tgt->error ="immutable target type cannot be mixed with other target types" ; + goto bad; } t->immutable_target_type = tgt->type; }
@@ -740,7 +735,6 @@ int dm_table_add_target(struct dm_table *t, const char *type,*/ if (!adjoin (t, tgt)) { tgt->error ="Gap in table" ; - r = -EINVAL ; goto bad; }