From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Aneesh Kumar K. V" Subject: Re: [V9fs-developer] [PATCH 1/3] fs/9p: Update TLCREATE to allow create without open Date: Wed, 06 Oct 2010 16:33:48 +0530 Message-ID: References: <1286298090-2422-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain Cc: v9fs-developer@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org To: Eric Van Hensbergen Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Wed, 06 Oct 2010 11:48:15 +0530, "Aneesh Kumar K. V" wrote: > On Tue, 5 Oct 2010 13:15:42 -0400, Eric Van Hensbergen wrote: > > Ouch. Protocol change. > > > > Also - not sure I understand what's going on here. Why does mknod go > > through TLCREATE, shouldn't we have our > > own protocol messages for mknod?// > > This is needed for the below mknod usage > > mknod("k2", S_IFREG) ; > > May be a better fix is to make sure we use TLMKNOD instead of TLCREATE in case we get a create without LOOKUP_OPEN flags set. So how about diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index 2f904a8..e89754f 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c @@ -55,6 +55,10 @@ static const struct inode_operations v9fs_file_inode_operations_dotl; static const struct inode_operations v9fs_symlink_inode_operations; static const struct inode_operations v9fs_symlink_inode_operations_dotl; +static int +v9fs_vfs_mknod_dotl(struct inode *dir, struct dentry *dentry, int omode, + dev_t rdev); + /** * unixmode2p9mode - convert unix mode bits to plan 9 * @v9ses: v9fs session information @@ -681,8 +685,14 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int omode, v9ses = v9fs_inode2v9ses(dir); if (nd && nd->flags & LOOKUP_OPEN) flags = nd->intent.open.flags - 1; - else - flags = O_RDWR; + else { + /* + * create call without LOOKUP_OPEN is due + * to mknod of regular files. So use mknod + * operation. + */ + return v9fs_vfs_mknod_dotl(dir, dentry, omode, 0); + } name = (char *) dentry->d_name.name; P9_DPRINTK(P9_DEBUG_VFS, "v9fs_vfs_create_dotl: name:%s flags:0x%x "