From patchwork Mon Sep 15 22:08:13 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "J. Bruce Fields" X-Patchwork-Id: 4911481 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 7092ABEEA5 for ; Mon, 15 Sep 2014 22:08:20 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 86C1A201FB for ; Mon, 15 Sep 2014 22:08:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1814620136 for ; Mon, 15 Sep 2014 22:08:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754910AbaIOWIR (ORCPT ); Mon, 15 Sep 2014 18:08:17 -0400 Received: from fieldses.org ([174.143.236.118]:56842 "EHLO fieldses.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754612AbaIOWIQ (ORCPT ); Mon, 15 Sep 2014 18:08:16 -0400 Received: from bfields by fieldses.org with local (Exim 4.76) (envelope-from ) id 1XTeRT-0001NU-8p; Mon, 15 Sep 2014 18:08:15 -0400 Date: Mon, 15 Sep 2014 18:08:13 -0400 From: "J. Bruce Fields" To: Jeff Layton Cc: linux-nfs@vger.kernel.org Subject: Re: [PATCH v2 1/5] lockd: move lockd's grace period handling into its own module Message-ID: <20140915220813.GC31157@fieldses.org> References: <1408473509-14010-1-git-send-email-jlayton@primarydata.com> <1408473509-14010-2-git-send-email-jlayton@primarydata.com> <20140828200059.GB25203@fieldses.org> <20140828202442.GC25203@fieldses.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20140828202442.GC25203@fieldses.org> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Thu, Aug 28, 2014 at 04:24:43PM -0400, J. Bruce Fields wrote: > On Thu, Aug 28, 2014 at 04:01:00PM -0400, J. Bruce Fields wrote: > > On Tue, Aug 19, 2014 at 02:38:25PM -0400, Jeff Layton wrote: > > > Currently, all of the grace period handling is part of lockd. Eventually > > > though we'd like to be able to build v4-only servers, at which point > > > we'll need to put all of this elsewhere. > > > > > > Move the code itself into fs/nfs_common and have it build a grace.ko > > > module. Then, rejigger the Kconfig options so that both nfsd and lockd > > > enable it automatically. > > > > Thanks, applying this one for 3.18 indepedently of the others. > > This code should also be fixed, though. > > Currently nfsd is recording the grace period as done when its own timer > runs out, but then it continuing to accept reclaims until lockd is also > done. I sat down to fix this today then decided there's not a real bug: All the grace_done upcall really does is throw away any previous clients that haven't reclaimed yet. It's legal to do that as soon as the correct amount of time has passed. It's actually OK to continue to allow the grace period to run past that point, the only requirement is that all reclaims precede all new opens, which the code still does enforce. So I think it might just be worth a little extra explanation. --b. --- 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 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index a298c3d..ca6f6ee 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -4122,8 +4122,23 @@ nfsd4_end_grace(struct nfsd_net *nn) dprintk("NFSD: end of grace period\n"); nn->grace_ended = true; + /* + * If the server goes down again right now, an NFSv4 + * client will still be allowed to reclaim after it comes back up, + * even if it hasn't yet had a chance to reclaim state this time. + */ nfsd4_record_grace_done(nn); + /* + * At this point, NFSv4 clients can still reclaim. But if the + * server crashes, any that have not yet reclaimed will be out + * of luck on the next boot. + */ locks_end_grace(&nn->nfsd4_manager); + /* + * At this point, and once lockd and/or any other containers + * exit their grace period, further reclaims aren't permitted + * and regular locking can resume. + */ } static time_t