Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx1.redhat.com ([209.132.183.28]:36954 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751601Ab3EUSnS (ORCPT ); Tue, 21 May 2013 14:43:18 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4LIhIUu032460 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 21 May 2013 14:43:18 -0400 Message-ID: <519BC044.8000808@RedHat.com> Date: Tue, 21 May 2013 14:43:16 -0400 From: Steve Dickson MIME-Version: 1.0 To: Steve Dickson CC: Bruce Fields , Linux NFS Mailing list Subject: Re: [PATCH] NFSD: Don't give out read delegations on exclusive creates References: <1368643909-8059-1-git-send-email-steved@redhat.com> In-Reply-To: <1368643909-8059-1-git-send-email-steved@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-nfs-owner@vger.kernel.org List-ID: Hey Bruce, Ping... ;-) I just pull from your for-3.11-incoming branch and notice it was not there... This really does help with exclusive creates not being delayed... So you might want to consider it... steved. On 15/05/13 14:51, Steve Dickson wrote: > When an exclusive create is done with the mode bits > set (aka open(testfile, O_CREAT | O_EXCL, 0777)) this > causes a OPEN op followed by a SETATTR op. When a > read delegation is given in the OPEN, it causes > the SETATTR to delay with EAGAIN until the > delegation is recalled. > > This patch caused exclusive creates to give out > a write delegation (which turn into no delegation) > which allows the SETATTR seamlessly succeed. > > Signed-off-by: Steve Dickson > --- > fs/nfsd/nfs4state.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c > index 316ec84..6b45d0e 100644 > --- a/fs/nfsd/nfs4state.c > +++ b/fs/nfsd/nfs4state.c > @@ -3035,8 +3035,16 @@ nfs4_open_delegation(struct net *net, struct svc_fh *fh, > goto out; > if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE) > flag = NFS4_OPEN_DELEGATE_WRITE; > - else > - flag = NFS4_OPEN_DELEGATE_READ; > + else { > + switch(open->op_createmode) { > + case NFS4_CREATE_EXCLUSIVE: > + case NFS4_CREATE_EXCLUSIVE4_1: > + flag = NFS4_OPEN_DELEGATE_WRITE; > + break; > + default: > + flag = NFS4_OPEN_DELEGATE_READ; > + } > + } > break; > default: > goto out; >