On Thu, 17 Nov 2011 20:19:06 -0300 Cristian Rodr__guez <crrodriguez@opensuse.org> wrote:
On 17/11/11 20:05, Andrew Morton wrote:
I assume that nobody has gone off and checked whether all current callers will survive this change. If they had, they'd have looked in drivers/char/ramoops.c and seen:
rounddown_pow_of_two(pdata->mem_size); rounddown_pow_of_two(pdata->record_size);
These operations are no-ops. It should be
pdata->mem_size = rounddown_pow_of_two(pdata->mem_size); pdata->record_size = rounddown_pow_of_two(pdata->record_size);
That we have this many warts using these interfaces is an indication that the interfaces aren't very good. Poorly documented, at least.
making that macro an inline function and annotating with __attribute__((warn_unused_result)) looks like a good start for me.
The problem is: * - this can be used to initialise global variables from constant data I'm surprised that this is true. Is gcc smart enough to actually do this? <tests it> --- a/fs/open.c~a +++ a/fs/open.c @@ -31,6 +31,10 @@ #include <linux/ima.h> #include <linux/dnotify.h> +#include <linux/log2.h> + +int blap = rounddown_pow_of_two(42); + #include "internal.h" int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, _ ooh, it worked. -- To unsubscribe, e-mail: opensuse-kernel+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-kernel+owner@opensuse.org