Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3918590imu; Mon, 10 Dec 2018 09:51:38 -0800 (PST) X-Google-Smtp-Source: AFSGD/Ws4oSuI5Nf+mlQwbBaEWL/6DOMeB+RhfkRlyK8rHPR3/x/r6v1IVawxVPQ/79NSUdSKkce X-Received: by 2002:a65:47ca:: with SMTP id f10mr11935833pgs.166.1544464298095; Mon, 10 Dec 2018 09:51:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544464298; cv=none; d=google.com; s=arc-20160816; b=aFR5PTCkH34Cngkol4MuZ6vwCOOG3HK0ZIgLSOaDiWZsXONcOGygqR8nNojxQsF7Q0 jLYUrzdNshrAHDth6h8AmxJnoo2jyFTGRMX9u6BqyzZm4y0DZASMWNf20W63PIcK/6PU gNtRc6Ved1CawdIwF6W8N3x/IhFi/yk1/8PGSKDO8GpxzP3LKAGzYfGUXOP/WiHzJ6/h SvQz2I//XIdm/7WUDA0qzPWM18Wh1LP7NJdY6Z9Q6vBXKTOYnNXP+HH/Cg/dD/AGhvpN aYLXoww/bIU/OTiWX8YpK5S9nZ/YRCwmvw/M62lnLlAohd8HdyhYiwQOqqn3WqTOmrRr tbRA== 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=BBQMQfaF+vw796fGyTUSy492niWtPwMVnQibM3+k620=; b=oflOTXfOR+EHf87eIAggMc6gspOP7YwlK6j9eQq76sZsXSXNw+BcD/hoJUF45CMDu9 rcq6y4h1XavMHWhZ49WLV+7FHsenYISJRdLf9XUluQoVc/4kEQ+9regECvnkZcHFcTXQ cqXFufSnscngLQawLKs9gAKX1bww2l4/g28dYuMlTBy6Lj6mh0msxwGaFBNdetzvGKoW UM7nAd67EUZwoAYg2nW7XwzlCIl1ZLyADIdmZCDbc7OnQW8kG9uiyqPHgk5uo+lQ6hK/ UO3HyqjUP7YH1T79gzm+3C+hHX48H44mdoOweLzuhNU0HVaw1jxH1wL5Mp/ncI3wVHYJ gRpg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w75si11118633pfd.55.2018.12.10.09.51.22; Mon, 10 Dec 2018 09:51:38 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728659AbeLJRNv (ORCPT + 99 others); Mon, 10 Dec 2018 12:13:51 -0500 Received: from mx1.redhat.com ([209.132.183.28]:45114 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728410AbeLJRNg (ORCPT ); Mon, 10 Dec 2018 12:13:36 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2ED6C2D7E8; Mon, 10 Dec 2018 17:13:36 +0000 (UTC) Received: from horse.redhat.com (unknown [10.18.25.234]) by smtp.corp.redhat.com (Postfix) with ESMTP id DBAC46012B; Mon, 10 Dec 2018 17:13:35 +0000 (UTC) Received: by horse.redhat.com (Postfix, from userid 10451) id D358222427F; Mon, 10 Dec 2018 12:13:30 -0500 (EST) From: Vivek Goyal To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: vgoyal@redhat.com, miklos@szeredi.hu, stefanha@redhat.com, dgilbert@redhat.com, sweil@redhat.com, swhiteho@redhat.com Subject: [PATCH 51/52] fuse: shared version cleanups Date: Mon, 10 Dec 2018 12:13:17 -0500 Message-Id: <20181210171318.16998-52-vgoyal@redhat.com> In-Reply-To: <20181210171318.16998-1-vgoyal@redhat.com> References: <20181210171318.16998-1-vgoyal@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 10 Dec 2018 17:13:36 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Miklos Szeredi Signed-off-by: Miklos Szeredi --- fs/fuse/dir.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 3aa214f9a28e..f9a91e782cf0 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -253,29 +253,36 @@ static bool fuse_dentry_version_mismatch(struct dentry *dentry) return fuse_version_mismatch(inode, READ_ONCE(fude->version)); } -static void fuse_set_version_ptr(struct inode *inode, - struct fuse_entryver_out *outver) +static s64 *fuse_version_ptr(struct inode *inode, + struct fuse_entryver_out *outver) { struct fuse_conn *fc = get_fuse_conn(inode); - struct fuse_inode *fi = get_fuse_inode(inode); - if (!fc->version_table || !outver->version_index) { - fi->version_ptr = NULL; - return; - } + if (!fc->version_table || !outver->version_index) + return NULL; + if (outver->version_index >= fc->version_table_size) { pr_warn_ratelimited("version index too large (%llu >= %llu)\n", outver->version_index, fc->version_table_size); - fi->version_ptr = NULL; - return; + return NULL; } - fi->version_ptr = fc->version_table + outver->version_index; + return fc->version_table + outver->version_index; +} - pr_info("fuse: version_ptr = %p\n", fi->version_ptr); - pr_info("fuse: version = %lli\n", fi->attr_version); - pr_info("fuse: current_version: %lli\n", *fi->version_ptr); +static void fuse_set_version_ptr(struct inode *inode, + struct fuse_entryver_out *outver) +{ + struct fuse_inode *fi = get_fuse_inode(inode); + + fi->version_ptr = fuse_version_ptr(inode, outver); + + if (fi->version_ptr) { + pr_info("fuse: version_ptr = %p\n", fi->version_ptr); + pr_info("fuse: version = %lli\n", fi->attr_version); + pr_info("fuse: current_version: %lli\n", *fi->version_ptr); + } } /* @@ -335,13 +342,16 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) if (!ret && !outarg.nodeid) ret = -ENOENT; if (!ret) { + s64 *new_version_ptr = fuse_version_ptr(inode, &outver); + fi = get_fuse_inode(inode); if (outarg.nodeid != get_node_id(inode)) { fuse_queue_forget(fc, forget, outarg.nodeid, 1); goto invalid; } - if (fi->version_ptr != fc->version_table + outver.version_index) - pr_warn("fuse_dentry_revalidate: version_ptr changed (%p -> %p)\n", fi->version_ptr, fc->version_table + outver.version_index); + if (fi->version_ptr != new_version_ptr) { + pr_warn("fuse_dentry_revalidate: version_ptr changed (%p -> %p)\n", fi->version_ptr, new_version_ptr); + } spin_lock(&fc->lock); fi->nlookup++; -- 2.13.6