From patchwork Fri Sep 26 08:21:03 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vitaly Mayatskih X-Patchwork-Id: 1630 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [127.0.0.1]) by ozlabs.org (Postfix) with ESMTP id 83D71DDF57 for ; Fri, 26 Sep 2008 18:21:25 +1000 (EST) X-Original-To: linuxppc-dev@ozlabs.org Delivered-To: linuxppc-dev@ozlabs.org Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.158]) by ozlabs.org (Postfix) with ESMTP id E50E2DDDE6 for ; Fri, 26 Sep 2008 18:21:08 +1000 (EST) Received: by fg-out-1718.google.com with SMTP id d23so613703fga.39 for ; Fri, 26 Sep 2008 01:21:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:message-id:from:to:cc :subject:in-reply-to:references:user-agent:mime-version:content-type; bh=fNBWP138u0dZnXqJ5GXVpk9cwz/LdJoyzPaY5sRZ6As=; b=RFUX2HnERLx0ahGlLrrSYtKg+yxbcD/E/5+pWD66Yxn6TiyhFvVYv9lkHulyoiFuvl 9XiYTCcUEB7vLIM2HTpiE0gUesozMNeGxILvKSGJip3KwIqV+r1ZUsQyTUUbN00sV7wV d8Z9gHOPrl3fraRhadwYbAQFfOHMlQxuxvvLQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=date:message-id:from:to:cc:subject:in-reply-to:references :user-agent:mime-version:content-type; b=IQ/WE5UqwIj+Yfi7xCtgbz1r0uApKRIq/ZmIELv5dMVdDjh1V1Z8jlga+7BzfM620V HOtLc59luXUlMdjSZuDXQAtT9jIgsHGnX5X48UU5CDiNEbllHB+BWlW/MhKu+quYw+RY ZvjdHU+mlGDcJMouq4fclZe/h3XNjQWnMWWf0= Received: by 10.86.95.20 with SMTP id s20mr1031858fgb.49.1222417266491; Fri, 26 Sep 2008 01:21:06 -0700 (PDT) Received: from gravicappa.englab.brq.redhat.com ( [62.40.79.66]) by mx.google.com with ESMTPS id d6sm3152162fga.2.2008.09.26.01.21.04 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 26 Sep 2008 01:21:05 -0700 (PDT) Date: Fri, 26 Sep 2008 10:21:03 +0200 Message-ID: From: Vitaly Mayatskikh To: David Howells Subject: Re: take in count O_NONBLOCK flag for rtas log In-Reply-To: <1545.1222377185@redhat.com> References: <1545.1222377185@redhat.com> User-Agent: Wanderlust/2.15.6 (Almost Unreal) Emacs/23.0 Mule/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Cc: linuxppc-dev@ozlabs.org, Vitaly Mayatskikh , Paul Mackerras X-BeenThere: linuxppc-dev@ozlabs.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@ozlabs.org At Thu, 25 Sep 2008 22:13:05 +0100, David Howells wrote: > > + if (!logging_enabled) { > > + spin_unlock_irqrestore(&rtasd_log_lock, s); > > + error = -ENODATA; > > + goto out; > > + } else > > + nvram_clear_error_log(); > > The 'else' here is unnecessary. It's preceded inside the curlies by a goto. Right... Signed-off-by: Vitaly Mayatskikh --- wbr, Vitaly diff --git a/arch/powerpc/platforms/pseries/rtasd.c b/arch/powerpc/platforms/pseries/rtasd.c index c9ffd8c..4f76e3b 100644 --- a/arch/powerpc/platforms/pseries/rtasd.c +++ b/arch/powerpc/platforms/pseries/rtasd.c @@ -295,19 +295,29 @@ static ssize_t rtas_log_read(struct file * file, char __user * buf, if (!tmp) return -ENOMEM; - spin_lock_irqsave(&rtasd_log_lock, s); /* if it's 0, then we know we got the last one (the one in NVRAM) */ - if (rtas_log_size == 0 && logging_enabled) - nvram_clear_error_log(); - spin_unlock_irqrestore(&rtasd_log_lock, s); + while (rtas_log_size == 0) { + if (file->f_flags & O_NONBLOCK) { + spin_unlock_irqrestore(&rtasd_log_lock, s); + error = -EAGAIN; + goto out; + } + if (!logging_enabled) { + spin_unlock_irqrestore(&rtasd_log_lock, s); + error = -ENODATA; + goto out; + } + nvram_clear_error_log(); - error = wait_event_interruptible(rtas_log_wait, rtas_log_size); - if (error) - goto out; + spin_unlock_irqrestore(&rtasd_log_lock, s); + error = wait_event_interruptible(rtas_log_wait, rtas_log_size); + if (error) + goto out; + spin_lock_irqsave(&rtasd_log_lock, s); + } - spin_lock_irqsave(&rtasd_log_lock, s); offset = rtas_error_log_buffer_max * (rtas_log_start & LOG_NUMBER_MASK); memcpy(tmp, &rtas_log_buf[offset], count);