Doesn't this belong in 2.6.37.y as well? --b. On Wed, Jan 05, 2011 at 02:07:12PM +0000, tip-bot for NeilBrown wrote: > Commit-ID: 6bf4123760a5aece6e4829ce90b70b6ffd751d65 > Gitweb: http://git.kernel.org/tip/6bf4123760a5aece6e4829ce90b70b6ffd751d65 > Author: NeilBrown <neilb@xxxxxxx> > AuthorDate: Wed, 5 Jan 2011 12:50:16 +1100 > Committer: Ingo Molnar <mingo@xxxxxxx> > CommitDate: Wed, 5 Jan 2011 14:15:50 +0100 > > sched: Change wait_for_completion_*_timeout() to return a signed long > > wait_for_completion_*_timeout() can return: > > 0: if the wait timed out > -ve: if the wait was interrupted > +ve: if the completion was completed. > > As they currently return an 'unsigned long', the last two cases > are not easily distinguished which can easily result in buggy > code, as is the case for the recently added > wait_for_completion_interruptible_timeout() call in > net/sunrpc/cache.c > > So change them both to return 'long'. As MAX_SCHEDULE_TIMEOUT > is LONG_MAX, a large +ve return value should never overflow. > > Signed-off-by: NeilBrown <neilb@xxxxxxx> > Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx> > Cc: J. Bruce Fields <bfields@xxxxxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > LKML-Reference: <20110105125016.64ccab0e@xxxxxxxxxxxxxx> > Signed-off-by: Ingo Molnar <mingo@xxxxxxx> > --- > include/linux/completion.h | 8 ++++---- > kernel/sched.c | 4 ++-- > 2 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/include/linux/completion.h b/include/linux/completion.h > index 36d57f7..51494e6 100644 > --- a/include/linux/completion.h > +++ b/include/linux/completion.h > @@ -81,10 +81,10 @@ extern int wait_for_completion_interruptible(struct completion *x); > extern int wait_for_completion_killable(struct completion *x); > extern unsigned long wait_for_completion_timeout(struct completion *x, > unsigned long timeout); > -extern unsigned long wait_for_completion_interruptible_timeout( > - struct completion *x, unsigned long timeout); > -extern unsigned long wait_for_completion_killable_timeout( > - struct completion *x, unsigned long timeout); > +extern long wait_for_completion_interruptible_timeout( > + struct completion *x, unsigned long timeout); > +extern long wait_for_completion_killable_timeout( > + struct completion *x, unsigned long timeout); > extern bool try_wait_for_completion(struct completion *x); > extern bool completion_done(struct completion *x); > > diff --git a/kernel/sched.c b/kernel/sched.c > index f2f914e..114a0de 100644 > --- a/kernel/sched.c > +++ b/kernel/sched.c > @@ -4395,7 +4395,7 @@ EXPORT_SYMBOL(wait_for_completion_interruptible); > * This waits for either a completion of a specific task to be signaled or for a > * specified timeout to expire. It is interruptible. The timeout is in jiffies. > */ > -unsigned long __sched > +long __sched > wait_for_completion_interruptible_timeout(struct completion *x, > unsigned long timeout) > { > @@ -4428,7 +4428,7 @@ EXPORT_SYMBOL(wait_for_completion_killable); > * signaled or for a specified timeout to expire. It can be > * interrupted by a kill signal. The timeout is in jiffies. > */ > -unsigned long __sched > +long __sched > wait_for_completion_killable_timeout(struct completion *x, > unsigned long timeout) > { -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |