From patchwork Thu Jan 13 19:15:50 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 476611 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 p0DJT0PY006799 for ; Thu, 13 Jan 2011 19:29:01 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932929Ab1AMTQM (ORCPT ); Thu, 13 Jan 2011 14:16:12 -0500 Received: from mx2.netapp.com ([216.240.18.37]:18189 "EHLO mx2.netapp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932676Ab1AMTQM (ORCPT ); Thu, 13 Jan 2011 14:16:12 -0500 X-IronPort-AV: E=Sophos;i="4.60,318,1291622400"; d="scan'208";a="505147967" Received: from smtp1.corp.netapp.com ([10.57.156.124]) by mx2-out.netapp.com with ESMTP; 13 Jan 2011 11:15:56 -0800 Received: from heimdal.trondhjem.org.com (macintosh-108.local [10.58.52.99] (may be forged)) by smtp1.corp.netapp.com (8.13.1/8.13.1/NTAP-1.6) with ESMTP id p0DJFt77027147; Thu, 13 Jan 2011 11:15:56 -0800 (PST) From: Trond Myklebust To: Linus Torvalds Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] NFS: Fix NFSv3 exclusive open semantics Date: Thu, 13 Jan 2011 14:15:50 -0500 Message-Id: <1294946150-9248-1-git-send-email-Trond.Myklebust@netapp.com> X-Mailer: git-send-email 1.7.3.4 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]); Thu, 13 Jan 2011 19:29:01 +0000 (UTC) diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index abe4f0c..f9d6a37 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -1583,6 +1583,7 @@ static int nfs_create(struct inode *dir, struct dentry *dentry, int mode, { struct iattr attr; int error; + int open_flags = 0; dfprintk(VFS, "NFS: create(%s/%ld), %s\n", dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); @@ -1590,7 +1591,10 @@ static int nfs_create(struct inode *dir, struct dentry *dentry, int mode, attr.ia_mode = mode; attr.ia_valid = ATTR_MODE; - error = NFS_PROTO(dir)->create(dir, dentry, &attr, 0, NULL); + if ((nd->flags & LOOKUP_CREATE) != 0) + open_flags = nd->intent.open.flags; + + error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, NULL); if (error != 0) goto out_err; return 0;