On Wed, 26 Jan 2011 17:08:24 -0800 Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > On Thu, 27 Jan 2011 09:53:42 +0900 > KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote: > > > res_counter_read_u64 reads u64 value without lock. It's dangerous > > in 32bit environment. This patch adds lock. > > > > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> > > --- > > include/linux/res_counter.h | 13 ++++++++++++- > > kernel/res_counter.c | 2 +- > > 2 files changed, 13 insertions(+), 2 deletions(-) > > > > Index: mmotm-0125/include/linux/res_counter.h > > =================================================================== > > --- mmotm-0125.orig/include/linux/res_counter.h > > +++ mmotm-0125/include/linux/res_counter.h > > @@ -68,7 +68,18 @@ struct res_counter { > > * @pos: and the offset. > > */ > > > > -u64 res_counter_read_u64(struct res_counter *counter, int member); > > +u64 res_counter_read_u64_locked(struct res_counter *counter, int member); > > + > > +static inline u64 res_counter_read_u64(struct res_counter *counter, int member) > > +{ > > + unsigned long flags; > > + u64 ret; > > + > > + spin_lock_irqsave(&counter->lock, flags); > > + ret = res_counter_read_u64_locked(counter, member); > > + spin_unlock_irqrestore(&counter->lock, flags); > > + return ret; > > +} > > > > ssize_t res_counter_read(struct res_counter *counter, int member, > > const char __user *buf, size_t nbytes, loff_t *pos, > > Index: mmotm-0125/kernel/res_counter.c > > =================================================================== > > --- mmotm-0125.orig/kernel/res_counter.c > > +++ mmotm-0125/kernel/res_counter.c > > @@ -126,7 +126,7 @@ ssize_t res_counter_read(struct res_coun > > pos, buf, s - buf); > > } > > > > -u64 res_counter_read_u64(struct res_counter *counter, int member) > > +u64 res_counter_read_u64_locked(struct res_counter *counter, int member) > > { > > return *res_counter_member(counter, member); > > } > > We don't need the lock on 64-bit platforms! > All res_counter function doesn't handle 32/64 bit differences. So, I did in this style for now. > And there's zero benefit to inlining the spin_lock/unlock(), given that > the function will always be making a function call anyway. > Ok. > See i_size_read() for inspiration. > I hate res_counter ;) I'll update patch. Thanks, -Kame -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>