Messages in this thread | | | From | Michal Nazarewicz <> | Subject | Re: [PATCHv2 2/8] fs/timerfd.c: make use of wait_event_interruptible_locked_irq() | Date | Sun, 11 Apr 2010 21:16:17 +0200 |
| |
> On Fri, 9 Apr 2010, Michal Nazarewicz wrote: >> diff --git a/fs/timerfd.c b/fs/timerfd.c >> index 1bfc95a..4d2c371 100644 >> --- a/fs/timerfd.c >> +++ b/fs/timerfd.c >> @@ -109,31 +109,13 @@ static ssize_t timerfd_read(struct file *file, char __user *buf, size_t count, >> struct timerfd_ctx *ctx = file->private_data; >> ssize_t res; >> u64 ticks = 0; >> - DECLARE_WAITQUEUE(wait, current); >> >> if (count < sizeof(ticks)) >> return -EINVAL; >> spin_lock_irq(&ctx->wqh.lock); >> res = -EAGAIN; >> - if (!ctx->ticks && !(file->f_flags & O_NONBLOCK)) { >> - __add_wait_queue(&ctx->wqh, &wait); >> - for (res = 0;;) { >> - set_current_state(TASK_INTERRUPTIBLE); >> - if (ctx->ticks) { >> - res = 0; >> - break; >> - } >> - if (signal_pending(current)) { >> - res = -ERESTARTSYS; >> - break; >> - } >> - spin_unlock_irq(&ctx->wqh.lock); >> - schedule(); >> - spin_lock_irq(&ctx->wqh.lock); >> - } >> - __remove_wait_queue(&ctx->wqh, &wait); >> - __set_current_state(TASK_RUNNING); >> - } >> + if (!(file->f_flags & O_NONBLOCK)) >> + wait_event_interruptible_locked_irq(ctx->wqh, ctx->ticks);
Thomas Gleixner <tglx@linutronix.de> writes: > With this change we return -EAGAIN instead of -ERESTARTSYS when the > wait got interrupted by a signal. That means instead of restarting the > syscall we return -EAGAIN to user space.
Stupid mistake, the following should fix it:
+ res = wait_event_interruptible_locked_irq(ctx->wqh, ctx->ticks);
Sorry about that.
I'll resubmit an updated patchset by the end of the week.
-- Best regards, _ _ .o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o ..o | Computer Science, Michal "mina86" Nazarewicz (o o) ooo +--<mina86-tlen.pl>--<jid:mina86-jabber.org>--ooO--(_)--Ooo--
| |