__attribute__ ((unused, alias(__stringify(name))))
#define THIS_MODULE (&__this_module)
-#define MOD_INC_USE_COUNT _MOD_INC_USE_COUNT(THIS_MODULE)
-#define MOD_DEC_USE_COUNT __MOD_DEC_USE_COUNT(THIS_MODULE)
/*
* The following license idents are currently accepted as indicating free
#define MODULE_ALIAS(alias)
#define MODULE_GENERIC_TABLE(gtype,name)
#define THIS_MODULE ((struct module *)0)
-#define MOD_INC_USE_COUNT do { } while (0)
-#define MOD_DEC_USE_COUNT do { } while (0)
#define MODULE_LICENSE(license)
#endif
#define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
/* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */
-static inline void __deprecated __MOD_INC_USE_COUNT(struct module *module)
-{
- __unsafe(module);
- /*
- * Yes, we ignore the retval here, that's why it's deprecated.
- */
- try_module_get(module);
-}
-
-static inline void __deprecated __MOD_DEC_USE_COUNT(struct module *module)
-{
- module_put(module);
-}
-
#define SET_MODULE_OWNER(dev) ((dev)->owner = THIS_MODULE)
struct obsolete_modparm {
struct obsolete_modparm __parm_##var __attribute__((section("__obsparm"))) = \
{ __stringify(var), type };
-#else
-#define MODULE_PARM(var,type)
-#endif
-
-/* People do this inside their init routines, when the module isn't
- "live" yet. They should no longer be doing that, but
- meanwhile... */
-static inline void __deprecated _MOD_INC_USE_COUNT(struct module *module)
+static inline void __deprecated MOD_INC_USE_COUNT(struct module *module)
{
__unsafe(module);
local_inc(&module->ref[get_cpu()].count);
put_cpu();
#else
- try_module_get(module);
+ (void)try_module_get(module);
#endif
}
+
+static inline void __deprecated MOD_DEC_USE_COUNT(struct module *module)
+{
+ module_put(module);
+}
+
+#define MOD_INC_USE_COUNT MOD_INC_USE_COUNT(THIS_MODULE)
+#define MOD_DEC_USE_COUNT MOD_DEC_USE_COUNT(THIS_MODULE)
+#else
+#define MODULE_PARM(var,type)
+#define MOD_INC_USE_COUNT do { } while (0)
+#define MOD_DEC_USE_COUNT do { } while (0)
+#endif
+
#define __MODULE_STRING(x) __stringify(x)
/*
goto free_newinfo_counters_untrans_unlock;
}
+ /* Get a reference in advance, we're not allowed fail later */
+ if (!try_module_get(t->me)) {
+ ret = -EBUSY;
+ goto free_newinfo_counters_untrans_unlock;
+ }
+
oldinfo = replace_table(t, tmp.num_counters, newinfo, &ret);
if (!oldinfo)
- goto free_newinfo_counters_untrans_unlock;
+ goto put_module;
/* Update module usage count based on number of rules */
duprintf("do_replace: oldnum=%u, initnum=%u, newnum=%u\n",
oldinfo->number, oldinfo->initial_entries, newinfo->number);
- if (t->me && (oldinfo->number <= oldinfo->initial_entries) &&
- (newinfo->number > oldinfo->initial_entries))
- __MOD_INC_USE_COUNT(t->me);
- else if (t->me && (oldinfo->number > oldinfo->initial_entries) &&
- (newinfo->number <= oldinfo->initial_entries))
- __MOD_DEC_USE_COUNT(t->me);
+ if ((oldinfo->number > oldinfo->initial_entries) ||
+ (newinfo->number <= oldinfo->initial_entries))
+ module_put(t->me);
+ if ((oldinfo->number > oldinfo->initial_entries) &&
+ (newinfo->number <= oldinfo->initial_entries))
+ module_put(t->me);
/* Get the old counters. */
get_counters(oldinfo, counters);
up(&arpt_mutex);
return 0;
+ put_module:
+ module_put(t->me);
free_newinfo_counters_untrans_unlock:
up(&arpt_mutex);
free_newinfo_counters_untrans:
goto free_newinfo_counters_untrans_unlock;
}
+ /* Get a reference in advance, we're not allowed fail later */
+ if (!try_module_get(t->me)) {
+ ret = -EBUSY;
+ goto free_newinfo_counters_untrans_unlock;
+ }
+
+
oldinfo = replace_table(t, tmp.num_counters, newinfo, &ret);
if (!oldinfo)
- goto free_newinfo_counters_untrans_unlock;
+ goto put_module;
/* Update module usage count based on number of rules */
duprintf("do_replace: oldnum=%u, initnum=%u, newnum=%u\n",
oldinfo->number, oldinfo->initial_entries, newinfo->number);
- if (t->me && (oldinfo->number <= oldinfo->initial_entries) &&
- (newinfo->number > oldinfo->initial_entries))
- __MOD_INC_USE_COUNT(t->me);
- else if (t->me && (oldinfo->number > oldinfo->initial_entries) &&
- (newinfo->number <= oldinfo->initial_entries))
- __MOD_DEC_USE_COUNT(t->me);
+ if ((oldinfo->number > oldinfo->initial_entries) ||
+ (newinfo->number <= oldinfo->initial_entries))
+ module_put(t->me);
+ if ((oldinfo->number > oldinfo->initial_entries) &&
+ (newinfo->number <= oldinfo->initial_entries))
+ module_put(t->me);
/* Get the old counters. */
get_counters(oldinfo, counters);
up(&ipt_mutex);
return 0;
+ put_module:
+ module_put(t->me);
free_newinfo_counters_untrans_unlock:
up(&ipt_mutex);
free_newinfo_counters_untrans:
goto free_newinfo_counters_untrans_unlock;
}
+ /* Get a reference in advance, we're not allowed fail later */
+ if (!try_module_get(t->me)) {
+ ret = -EBUSY;
+ goto free_newinfo_counters_untrans_unlock;
+ }
+
oldinfo = replace_table(t, tmp.num_counters, newinfo, &ret);
if (!oldinfo)
- goto free_newinfo_counters_untrans_unlock;
+ goto put_module;
/* Update module usage count based on number of rules */
duprintf("do_replace: oldnum=%u, initnum=%u, newnum=%u\n",
oldinfo->number, oldinfo->initial_entries, newinfo->number);
- if (t->me && (oldinfo->number <= oldinfo->initial_entries) &&
- (newinfo->number > oldinfo->initial_entries))
- __MOD_INC_USE_COUNT(t->me);
- else if (t->me && (oldinfo->number > oldinfo->initial_entries) &&
- (newinfo->number <= oldinfo->initial_entries))
- __MOD_DEC_USE_COUNT(t->me);
+ if ((oldinfo->number > oldinfo->initial_entries) ||
+ (newinfo->number <= oldinfo->initial_entries))
+ module_put(t->me);
+ if ((oldinfo->number > oldinfo->initial_entries) &&
+ (newinfo->number <= oldinfo->initial_entries))
+ module_put(t->me);
/* Get the old counters. */
get_counters(oldinfo, counters);
up(&ip6t_mutex);
return 0;
+ put_module:
+ module_put(t->me);
free_newinfo_counters_untrans_unlock:
up(&ip6t_mutex);
free_newinfo_counters_untrans: