Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1743425ybt; Sat, 27 Jun 2020 19:07:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyyyHztWdUSR72+bOfo0NWNISxmcEDQcOSPsNGFtdJUqQQkWwJPcK+1y+x32SRNf4XgZr4J X-Received: by 2002:a17:906:7a46:: with SMTP id i6mr8262328ejo.475.1593310072567; Sat, 27 Jun 2020 19:07:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593310072; cv=none; d=google.com; s=arc-20160816; b=CwccO+f8to/BRQTI0gwxdtM4L+I5bm2OnMSQoEFXfmLwAiZEOtsqFhVJogrATGE3I6 0Qz9CXyM75BGBOu4Aku5R2S5zE6oYOSXFlKkZKeP5VK+8WOjf453i2TxMKzPtYfHD41b IaGKK59P/9inJI347o3ZAlggVnXt7jEKA0Evtniq663eRo7PqRb8s0VCD2iObqGXa11R rTKpY4hW3Y+Qke07ZL4EESpQnzYtgGjkttb0dMhmN3AdXBabKKTCM1PS0z6toWe5bKvK L3XKhvMk/lAxUsDmUCHl1QNcI2RTEYt+P5yz1xAQZu5j14s/b560WpvoYxhOVeu1Ordz 0SBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=PIOSXhGbPSOsj9TifcIxTeo3w7TT+1dYKha2qPx6CZo=; b=GoU0N/4b1KuDuZCQx3fNIyU40ffTKdl0n6v7pBGm1WDyxLC7S5XjNvZlOFQmWYvoX8 LQBTv97wTY72FEqbkOjWnPJlnMbrfcGro26tq/WvgbSQus0XhZWtpetVjU7uieQSa1uI /LwCJFKMl7V0wIXS2pH31vxnT/9IZoDGEXYUVrITeUSPYDmDLk41rNxBWMHc/kb/Wfoi yTXtlRcTPwpYqKCyjrxEaMaOwcamEeq+5Tt93s8T9UFyuXG1MOIQpoCNc1LKxmENd4+a PNGLCnenwLEUwat81UEA3sqI1ZDRIWrCgY7hhuhMjZdvs4G5yJBxeI7uVv9BJFtesbDU GIsw== 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 bf2si1981492edb.288.2020.06.27.19.07.30; Sat, 27 Jun 2020 19:07:52 -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 S1726439AbgF1CGZ (ORCPT + 99 others); Sat, 27 Jun 2020 22:06:25 -0400 Received: from foss.arm.com ([217.140.110.172]:58158 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725897AbgF1CGY (ORCPT ); Sat, 27 Jun 2020 22:06:24 -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 C41DB11B3; Sat, 27 Jun 2020 19:06:23 -0700 (PDT) Received: from entos-d05.shanghai.arm.com (entos-d05.shanghai.arm.com [10.169.40.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id ACCE33F73C; Sat, 27 Jun 2020 19:06:20 -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: [RFC PATCH 1/2] 9p: retrieve fid from file when file instance exist. Date: Sun, 28 Jun 2020 10:06:07 +0800 Message-Id: <20200628020608.36512-2-jianyong.wu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200628020608.36512-1-jianyong.wu@arm.com> References: <20200628020608.36512-1-jianyong.wu@arm.com> 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 will always retrieved from dentry no matter file instance exist or not when setattr. There will be some info related to open file instance dropped. so it's better to retrieve fid from file instance if file instance is passed to setattr. for example: fd=open("tmp", O_RDWR); ftruncate(fd, 10); the file context related with fd info will lost as fid will always be 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 | 5 ++++- fs/9p/vfs_inode_dotl.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index c9255d399917..010869389523 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c @@ -1100,7 +1100,10 @@ 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; + else + 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..28fb04cbeb1a 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c @@ -560,7 +560,10 @@ 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; + else + fid = v9fs_fid_lookup(dentry); if (IS_ERR(fid)) return PTR_ERR(fid); -- 2.17.1