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 Message-ID: <87ochplrzy.fsf@erwin.mina86.com> References: <3baf39971e1f49e98498f5d00e21df4302396252.1270835924.git.mina86@mina86.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Michal Nazarewicz , linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Davide Libenzi , Greg KH , Kyungmin Park , Marek Szyprowski , linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Thomas Gleixner Return-path: In-Reply-To: (Thomas Gleixner's message of "Sun, 11 Apr 2010 16:31:50 +0200 (CEST)") Sender: linux-usb-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-fsdevel.vger.kernel.org > 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 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 +------ooO--(_)--Ooo-- -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html