On Tue, 2008-07-08 at 23:03 +1000, Rusty Russell wrote: > > What about just killing the config option entirely? It' basically > > guarding a ~50 lines function + a sysctl variable. I think having > > modules but not CONFIG_KMOD is entirely unreasonable. > > I agree with Christoph here. Yeah, like I said, I wasn't sure why it's there anyway. > But as a patch series please: it's spread pretty wide. eg. first make it a > non-prompting CONFIG option, then remove the users, then finally kill it. Sure. > Some existing request_module users might be able to use > try_then_request_module, too... try_then_request_module seems buggy though. Or at least, doing something unexpected. Here's the macro, for reference: #define try_then_request_module(x, mod...) ((x) ?: (request_module(mod), (x))) I think it should be #define try_then_request_module(x, mod...) \ ((x) ?: ({request_module(mod); (x)})) the difference being that it returns the result of the second "x" when the first "x" fails. A potential user would be net/bridge/netfilter/ebtables.c: ret = find_inlist_lock_noload(head, name, error, mutex); if (!ret) { request_module("%s%s", prefix, name); ret = find_inlist_lock_noload(head, name, error, mutex); } which could then be written as ret = try_then_request_module( find_inlist_lock_noload(head, name, error, mutex), "%s%s", prefix, name); Also, in the case of MODULES=n, I think it should just be static inline void printf_check(char *name, ...) __attribute__((format(printf, 1, 2))) {}; #define try_then_request_module(x, mod...) \ ({ printf_check(mod); (x) }) so (x) is only evaluated once. A different variation you could make a case for is to not re-evaluate x if request_module fails, which would then automatically collapse the MODULES=n case: #define try_then_request_module(x, mod...) \ ({ typeof(x) __ret = (x); __ret ?: \ (request_module(mod) ? __r : (x)); }) johannes
Attachment:
signature.asc
Description: This is a digitally signed message part