On Wed, 24 Sep 2014 09:04:18 +0200 Ingo Molnar <mingo@xxxxxxxxxx> wrote: > > * NeilBrown <neilb@xxxxxxx> wrote: > > > @@ -859,6 +860,8 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); > > > > extern int bit_wait(struct wait_bit_key *); > > extern int bit_wait_io(struct wait_bit_key *); > > +extern int bit_wait_timeout(struct wait_bit_key *); > > +extern int bit_wait_io_timeout(struct wait_bit_key *); > > > > /** > > * wait_on_bit - wait for a bit to be cleared > > diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c > > index 15cab1a4f84e..380678b3cba4 100644 > > --- a/kernel/sched/wait.c > > +++ b/kernel/sched/wait.c > > @@ -343,6 +343,18 @@ int __sched out_of_line_wait_on_bit(void *word, int bit, > > } > > EXPORT_SYMBOL(out_of_line_wait_on_bit); > > > > +int __sched out_of_line_wait_on_bit_timeout( > > + void *word, int bit, wait_bit_action_f *action, > > + unsigned mode, unsigned long timeout) > > +{ > > + wait_queue_head_t *wq = bit_waitqueue(word, bit); > > + DEFINE_WAIT_BIT(wait, word, bit); > > + > > + wait.key.timeout = jiffies + timeout; > > + return __wait_on_bit(wq, &wait, action, mode); > > +} > > +EXPORT_SYMBOL(out_of_line_wait_on_bit_timeout); > > + > > int __sched > > __wait_on_bit_lock(wait_queue_head_t *wq, struct wait_bit_queue *q, > > wait_bit_action_f *action, unsigned mode) > > @@ -520,3 +532,27 @@ __sched int bit_wait_io(struct wait_bit_key *word) > > return 0; > > } > > EXPORT_SYMBOL(bit_wait_io); > > + > > +__sched int bit_wait_timeout(struct wait_bit_key *word) > > +{ > > + unsigned long now = ACCESS_ONCE(jiffies); > > + if (signal_pending_state(current->state, current)) > > + return 1; > > + if (time_after_eq(now, word->timeout)) > > + return -EAGAIN; > > + schedule_timeout(word->timeout - now); > > + return 0; > > +} > > +EXPORT_SYMBOL(bit_wait_timeout); > > + > > +__sched int bit_wait_io_timeout(struct wait_bit_key *word) > > +{ > > + unsigned long now = ACCESS_ONCE(jiffies); > > + if (signal_pending_state(current->state, current)) > > + return 1; > > + if (time_after_eq(now, word->timeout)) > > + return -EAGAIN; > > + io_schedule_timeout(word->timeout - now); > > + return 0; > > +} > > +EXPORT_SYMBOL(bit_wait_io_timeout); > > New scheduler APIs should be exported via EXPORT_SYMBOL_GPL(). > Fine with me. Trond, can you just edit that into the patch you have, or do you want me to re-send? Also maybe added Jeff's Acked-by: Jeff Layton <jlayton@xxxxxxxxxxxxxxx> to the NFS bits. Thanks, NeilBrown
Attachment:
signature.asc
Description: PGP signature