Re: [v4l-dvb-maintainer] [patch, -git] drivers/media build fix for modular builds

Trent Piepho
2008-04-30T21:52:29Z

On Wed, 30 Apr 2008, Andrew Morton wrote:
> Does this make it feel better?
>
> --- a/drivers/media/video/tuner-core.c~a
> +++ a/drivers/media/video/tuner-core.c
> @@ -40,11 +40,11 @@
> typeof(&FUNCTION) __a = symbol_request(FUNCTION); \
> if (__a) { \
> __r = (int) __a(ARGS); \
> + symbol_put(FUNCTION); \
> } else { \
> printk(KERN_ERR "TUNER: Unable to find " \
> "symbol "#FUNCTION"()\n"); \
> } \
> - symbol_put(FUNCTION); \
> __r; \
> })

Should the symbol_put be done at all? When I wrote the code this is based
on, it would check if FUNCTION failed or not. If it failed, the symbol was
put. But if it worked, then one was returned a handle into FUNCTION's
module, and so the symbol was not put. If it was, the module's refcount
would be zero but the caller would have a handle into the module.

So if FUNCTION does anything that creates references to the module, and it
doesn't inc it's own refcount, then the symbol_put shouldn't be done.