From patchwork Wed Jan 12 17:36:48 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Fields X-Patchwork-Id: 474441 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p0CHaF4e025167 for ; Wed, 12 Jan 2011 17:36:55 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755399Ab1ALRgx (ORCPT ); Wed, 12 Jan 2011 12:36:53 -0500 Received: from fieldses.org ([174.143.236.118]:47788 "EHLO fieldses.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750741Ab1ALRgx (ORCPT ); Wed, 12 Jan 2011 12:36:53 -0500 Received: from bfields by fieldses.org with local (Exim 4.72) (envelope-from ) id 1Pd4cu-0002oh-Vc; Wed, 12 Jan 2011 12:36:52 -0500 From: "J. Bruce Fields" To: linux-nfs@vger.kernel.org Cc: "J. Bruce Fields" Subject: [PATCH 1/2] nfsd4: break lease on nfsd setattr Date: Wed, 12 Jan 2011 12:36:48 -0500 Message-Id: <1294853809-10732-2-git-send-email-bfields@redhat.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1294853809-10732-1-git-send-email-bfields@redhat.com> References: <1294853809-10732-1-git-send-email-bfields@redhat.com> Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 12 Jan 2011 17:36:55 +0000 (UTC) diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index f8919f5..839ed88 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -374,14 +374,6 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, goto out; } - /* - * If we are changing the size of the file, then - * we need to break all leases. - */ - host_err = break_lease(inode, O_WRONLY | O_NONBLOCK); - if (host_err) /* ENOMEM or EWOULDBLOCK */ - goto out_nfserr; - host_err = get_write_access(inode); if (host_err) goto out_nfserr; @@ -422,7 +414,11 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap, err = nfserr_notsync; if (!check_guard || guardtime == inode->i_ctime.tv_sec) { + host_err = break_lease(inode, O_WRONLY | O_NONBLOCK); + if (host_err) + goto out_nfserr; fh_lock(fhp); + host_err = notify_change(dentry, iap); err = nfserrno(host_err); fh_unlock(fhp);