diff options
author | NeilBrown <neilb@suse.de> | 2010-03-16 00:14:51 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-05-21 12:37:29 -0400 |
commit | db1afffab0b5d9f6d31f8f4bea44c9cb3bc59351 (patch) | |
tree | 5ba8fd7a5018c0772d999b8c3aa945c0efb929e0 | |
parent | dd336c554d8926c3348a2d5f2a5ef5597f6d1a06 (diff) |
kref: remove kref_set
Of the three uses of kref_set in the kernel:
One really should be kref_put as the code is letting go of a
reference,
Two really should be kref_init because the kref is being
initialised.
This suggests that making kref_set available encourages bad code.
So fix the three uses and remove kref_set completely.
Signed-off-by: NeilBrown <neilb@suse.de>
Acked-by: Mimi Zohar <zohar@us.ibm.com>
Acked-by: Serge Hallyn <serue@us.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | include/linux/kref.h | 1 | ||||
-rw-r--r-- | kernel/user_namespace.c | 4 | ||||
-rw-r--r-- | lib/kref.c | 15 | ||||
-rw-r--r-- | security/integrity/ima/ima_iint.c | 4 |
4 files changed, 6 insertions, 18 deletions
diff --git a/include/linux/kref.h b/include/linux/kref.h index baf4b9e4b194..6cc38fc07ab7 100644 --- a/include/linux/kref.h +++ b/include/linux/kref.h | |||
@@ -21,7 +21,6 @@ struct kref { | |||
21 | atomic_t refcount; | 21 | atomic_t refcount; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | void kref_set(struct kref *kref, int num); | ||
25 | void kref_init(struct kref *kref); | 24 | void kref_init(struct kref *kref); |
26 | void kref_get(struct kref *kref); | 25 | void kref_get(struct kref *kref); |
27 | int kref_put(struct kref *kref, void (*release) (struct kref *kref)); | 26 | int kref_put(struct kref *kref, void (*release) (struct kref *kref)); |
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c index 076c7c8215b0..b2d70d38dff4 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c | |||
@@ -54,8 +54,8 @@ int create_user_ns(struct cred *new) | |||
54 | #endif | 54 | #endif |
55 | /* tgcred will be cleared in our caller bc CLONE_THREAD won't be set */ | 55 | /* tgcred will be cleared in our caller bc CLONE_THREAD won't be set */ |
56 | 56 | ||
57 | /* alloc_uid() incremented the userns refcount. Just set it to 1 */ | 57 | /* root_user holds a reference to ns, our reference can be dropped */ |
58 | kref_set(&ns->kref, 1); | 58 | put_user_ns(ns); |
59 | 59 | ||
60 | return 0; | 60 | return 0; |
61 | } | 61 | } |
diff --git a/lib/kref.c b/lib/kref.c index 6d19f690380b..d3d227a08a4b 100644 --- a/lib/kref.c +++ b/lib/kref.c | |||
@@ -16,23 +16,13 @@ | |||
16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
17 | 17 | ||
18 | /** | 18 | /** |
19 | * kref_set - initialize object and set refcount to requested number. | ||
20 | * @kref: object in question. | ||
21 | * @num: initial reference counter | ||
22 | */ | ||
23 | void kref_set(struct kref *kref, int num) | ||
24 | { | ||
25 | atomic_set(&kref->refcount, num); | ||
26 | smp_mb(); | ||
27 | } | ||
28 | |||
29 | /** | ||
30 | * kref_init - initialize object. | 19 | * kref_init - initialize object. |
31 | * @kref: object in question. | 20 | * @kref: object in question. |
32 | */ | 21 | */ |
33 | void kref_init(struct kref *kref) | 22 | void kref_init(struct kref *kref) |
34 | { | 23 | { |
35 | kref_set(kref, 1); | 24 | atomic_set(&kref->refcount, 1); |
25 | smp_mb(); | ||
36 | } | 26 | } |
37 | 27 | ||
38 | /** | 28 | /** |
@@ -72,7 +62,6 @@ int kref_put(struct kref *kref, void (*release)(struct kref *kref)) | |||
72 | return 0; | 62 | return 0; |
73 | } | 63 | } |
74 | 64 | ||
75 | EXPORT_SYMBOL(kref_set); | ||
76 | EXPORT_SYMBOL(kref_init); | 65 | EXPORT_SYMBOL(kref_init); |
77 | EXPORT_SYMBOL(kref_get); | 66 | EXPORT_SYMBOL(kref_get); |
78 | EXPORT_SYMBOL(kref_put); | 67 | EXPORT_SYMBOL(kref_put); |
diff --git a/security/integrity/ima/ima_iint.c b/security/integrity/ima/ima_iint.c index 2dc2d6594145..7625b85c2274 100644 --- a/security/integrity/ima/ima_iint.c +++ b/security/integrity/ima/ima_iint.c | |||
@@ -94,7 +94,7 @@ void iint_free(struct kref *kref) | |||
94 | iint->opencount); | 94 | iint->opencount); |
95 | iint->opencount = 0; | 95 | iint->opencount = 0; |
96 | } | 96 | } |
97 | kref_set(&iint->refcount, 1); | 97 | kref_init(&iint->refcount); |
98 | kmem_cache_free(iint_cache, iint); | 98 | kmem_cache_free(iint_cache, iint); |
99 | } | 99 | } |
100 | 100 | ||
@@ -133,7 +133,7 @@ static void init_once(void *foo) | |||
133 | iint->readcount = 0; | 133 | iint->readcount = 0; |
134 | iint->writecount = 0; | 134 | iint->writecount = 0; |
135 | iint->opencount = 0; | 135 | iint->opencount = 0; |
136 | kref_set(&iint->refcount, 1); | 136 | kref_init(&iint->refcount); |
137 | } | 137 | } |
138 | 138 | ||
139 | static int __init ima_iintcache_init(void) | 139 | static int __init ima_iintcache_init(void) |