Messages in this thread | | | Date | Wed, 18 Oct 2006 09:13:19 -0600 | From | Matthew Wilcox <> | Subject | Re: dealing with excessive includes |
| |
On Wed, Oct 18, 2006 at 08:04:24AM -0700, Linus Torvalds wrote: > On Wed, 18 Oct 2006, Al Viro wrote: > > > > +#define lock_super(x) do { \ > > + struct super_block *sb = x; \ > > + get_fs_excl(); \ > > + mutex_lock(&sb->s_lock); \ > > +} while(0) > > Don't do this. The "x" passed in may be "sb", and then you end up with > bogus code.
For this one, I see a third way:
#define lock_super(sb) do { \ get_fs_excl(); \ mutex_lock(&(sb)->s_lock); \ } while (0)
It does have the disadvantage that you can pass *anything* that has an s_lock field in ... but I don't think that's a very likely thing to happen.
Or you could use _sb as the local variable, since it's a reserved identifier. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |