Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx1.redhat.com ([209.132.183.28]:46249 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753436Ab2GaWUx (ORCPT ); Tue, 31 Jul 2012 18:20:53 -0400 Date: Tue, 31 Jul 2012 17:27:45 -0400 From: "J. Bruce Fields" To: Chuck Lever Cc: Steve Dickson , Jim Rees , linux-nfs@vger.kernel.org Subject: Re: [PATCH 4/4] rpc.gssd: don't call poll() twice a second. Message-ID: <20120731212744.GC1826@pad.fieldses.org> References: <20120731205931.GA32161@fieldses.org> <1343768449-32205-4-git-send-email-bfields@redhat.com> <9C74193E-FB49-48C3-A828-50EDE37C95AD@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <9C74193E-FB49-48C3-A828-50EDE37C95AD@oracle.com> Sender: linux-nfs-owner@vger.kernel.org List-ID: On Tue, Jul 31, 2012 at 02:23:36PM -0700, Chuck Lever wrote: > > On Jul 31, 2012, at 2:00 PM, J. Bruce Fields wrote: > > > From: "J. Bruce Fields" > > > > Use ppoll instead. > > > > (This breaks compatibility with kernels before 2.6.16 and glibc before > > 2.4). > > I think I prefer seeing this wrapped with some autoconf machinery to allow nfs-utils to continue to build on earlier systems. I was assuming we could drop support for older systems. If not, then'd I'd much prefer to go back to the self-pipe trick than to deal with autoconf and ifdef'ing out all this stuff. --b. > > > Signed-off-by: J. Bruce Fields > > --- > > utils/gssd/gssd_main_loop.c | 12 +++++------- > > 1 file changed, 5 insertions(+), 7 deletions(-) > > > > diff --git a/utils/gssd/gssd_main_loop.c b/utils/gssd/gssd_main_loop.c > > index 142c8c5..2d20fa2 100644 > > --- a/utils/gssd/gssd_main_loop.c > > +++ b/utils/gssd/gssd_main_loop.c > > @@ -186,13 +186,14 @@ gssd_run() > > struct sigaction dn_act = { > > .sa_handler = dir_notify_handler > > }; > > - sigset_t set; > > + sigset_t set, emptyset; > > > > sigemptyset(&dn_act.sa_mask); > > sigaction(DNOTIFY_SIGNAL, &dn_act, NULL); > > > > - /* just in case the signal is blocked... */ > > + sigemptyset(&emptyset); > > sigemptyset(&set); > > + /* just in case the signal is blocked... */ > > sigaddset(&set, DNOTIFY_SIGNAL); > > sigprocmask(SIG_UNBLOCK, &set, NULL); > > > > @@ -210,16 +211,13 @@ gssd_run() > > exit(1); > > } > > } > > - /* race condition here: dir_changed could be set before we > > - * enter the poll, and we'd never notice if it weren't for the > > - * timeout. */ > > - ret = poll(pollarray, pollsize, POLL_MILLISECS); > > + ret = ppoll(pollarray, pollsize, NULL, &emptyset); > > if (ret < 0) { > > if (errno != EINTR) > > printerr(0, > > "WARNING: error return from poll\n"); > > } else if (ret == 0) { > > - /* timeout */ > > + printerr(0, "WARNING: unexpected timeout\n"); > > } else { /* ret > 0 */ > > scan_poll_results(ret); > > } > > -- > > 1.7.9.5 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > > the body of a message to majordomo@vger.kernel.org > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > Chuck Lever > chuck[dot]lever[at]oracle[dot]com > > >