Messages in this thread | | | Date | Sat, 13 Apr 2013 10:53:50 -0700 | Subject | Re: [PATCH] module: Fix race condition between load and unload module | From | Linus Torvalds <> |
| |
On Sat, Apr 13, 2013 at 8:41 AM, Anatol Pomozov <anatol.pomozov@gmail.com> wrote: > > Does it make sense to move it to a separate function in kref.h? > > /** Useful when kref_get is racing with kref_put and refcounter might be 0 */ > int kref_get_not_zero(kref* ref) { > return atomic_inc_not_zero(&kref->refcount); > }
It turns out we have that, except it's called "unless_zero", because it uses "atomic_add_unless(x,1,0)", rather than the simplified "atomic_inc_not_zero(x)".
> or maybe instead change default behavior of kref_get() to > atomic_inc_not_zero and force callers check the return value from > kref_get()?
That would be painful, and _most_ users should have a preexisting refcount. So it's probably better in the long run to just keep the warning (but perhaps fix it to be SMP-safe). So I think the part of your patch that made kref_get() use atomic_inc_return() is probably a good idea regardless.
Also, I changed my patch to be minimal, and not change other users of kobject_get(). So other users (not kset_find_obj()) will continue to get the warning, and kset_find_obj() uses the safe version. So this is what I'm planning on committing as the minimal patch and marking for stable. The rest (including that atomic_inc_return() in kref_get) would be cleanup.
Can you give this a quick test?
Linus [unhandled content-type:application/octet-stream] | |