Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp2129558ybt; Fri, 3 Jul 2020 01:21:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwuvoPweTjbdt3DV9NL3uRVYNPcKnZr9GHDBfS0LJT8ecbRVYmP8krZzso0xPg/vx0RltFe X-Received: by 2002:aa7:c6d3:: with SMTP id b19mr37941035eds.207.1593764473351; Fri, 03 Jul 2020 01:21:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593764473; cv=none; d=google.com; s=arc-20160816; b=EuhcYr6bVzhSgd0L7kauFS4ahgDCzlcHSp7EPT74e1JCR8vBlby4uCzwnSdiMdxtdf 6mbJXSAbbzb5ilIA1ACPfWMx7/HtWlz3+vg9OfPOQz89f/Ez9QPaNa5mzchYsMFe/UlO Ia22VpbTSLGLUgRHS5j1buZBBVz6seAOm14tFIGZ7EbklKMhwfZQKF9mRoGCtN4DfIDy vMFUmov6gMrXZkMFop6Yk7I4B8+n0q5B4p99vcQX2NRZtbO1ZTiLI8kMJ4adMUwDVabU HLZfdQFn2E+6vl39ufs4XAo4uSTvTVTzRl03shyyrXzETNTr4ymgXuq5CJ7GgXw+61d6 9RSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=S+jj6pmhq+Qo0/27OwyJw2/ZaUJclqR3wT/4j8Ff0Kk=; b=UMVGfbN5usmdxVNc1h3avX3P+1shJTika8qe9Ve9grh03YkEBK0TrOfXwDPamBpf4S dpvmIh7LW+lc0VUUKgaYep/RIOsPAQS6bQi47qXX7nmuP41hRGpilzzjDOyLT4c3296O Fr/QTX7BHgfgtB61U9WsnsGxP0nKPSTqUkn5KUiY0itr88tKyj2QPf05r8a2JhWYNlSs DJBDcPFCQoT199v0F8k/OQBqmjR729yx/M+EwxjoC/OW+pdLVGsHOL0Ej3FpProjolXw auarmGkgROjhTFHnnAGBC7xSuMip7Ro0cd4X2oDFzWOsyT2vsmuoBRsXScMr1VSg02vl /png== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 36si8778185edp.290.2020.07.03.01.20.50; Fri, 03 Jul 2020 01:21:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726147AbgGCIUb (ORCPT + 99 others); Fri, 3 Jul 2020 04:20:31 -0400 Received: from foss.arm.com ([217.140.110.172]:36058 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725779AbgGCIUa (ORCPT ); Fri, 3 Jul 2020 04:20:30 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7FEA82F; Fri, 3 Jul 2020 01:20:30 -0700 (PDT) Received: from entos-d05.shanghai.arm.com (entos-d05.shanghai.arm.com [10.169.212.212]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 6624A3F73C; Fri, 3 Jul 2020 01:20:27 -0700 (PDT) From: Jianyong Wu To: ericvh@gmail.com, lucho@ionkov.net, asmadeus@codewreck.org, v9fs-developer@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org, Steve.Capper@arm.com, Kaly.Xin@arm.com, justin.he@arm.com, jianyong.wu@arm.com, wei.chen@arm.com Subject: [PATCH v3] 9p: retrieve fid from file when file instance exist. Date: Fri, 3 Jul 2020 16:20:18 +0800 Message-Id: <20200703082018.8160-1-jianyong.wu@arm.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In the current setattr implementation in 9p, fid is always retrieved from dentry no matter file instance exists or not. Thus, there may be some info related to opened file instance dropped. So it's better to retrieve fid from file instance when it has passed to setattr. for example: fd=open("tmp", O_RDWR); ftruncate(fd, 10); The file context related with the fd will be lost as fid is retrieved from dentry, then the backend can't get the info of file context. It is against the original intention of user and may lead to bug. Signed-off-by: Jianyong Wu --- fs/9p/vfs_inode.c | 7 ++++++- fs/9p/vfs_inode_dotl.c | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index c9255d399917..7cd4b67c345b 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c @@ -1100,7 +1100,12 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr) retval = -EPERM; v9ses = v9fs_dentry2v9ses(dentry); - fid = v9fs_fid_lookup(dentry); + if (iattr->ia_valid & ATTR_FILE) { + fid = iattr->ia_file->private_data; + WARN_ON(!fid); + } + if (!fid) + fid = v9fs_fid_lookup(dentry); if(IS_ERR(fid)) return PTR_ERR(fid); diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c index 60328b21c5fb..dc53fb6b3b31 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c @@ -560,7 +560,12 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr) p9attr.mtime_sec = iattr->ia_mtime.tv_sec; p9attr.mtime_nsec = iattr->ia_mtime.tv_nsec; - fid = v9fs_fid_lookup(dentry); + if (iattr->ia_valid & ATTR_FILE) { + fid = iattr->ia_file->private_data; + WARN_ON(!fid); + } + if (!fid) + fid = v9fs_fid_lookup(dentry); if (IS_ERR(fid)) return PTR_ERR(fid); -- 2.17.1