Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1639007imu; Tue, 6 Nov 2018 01:46:02 -0800 (PST) X-Google-Smtp-Source: AJdET5ePBQBigKcG50lNzDToiFXW/n+hSRPoHfRikxW443D5FvDPzl8zIfPMulzta0iLegFqKjCI X-Received: by 2002:a62:c42:: with SMTP id u63-v6mr25697589pfi.43.1541497562226; Tue, 06 Nov 2018 01:46:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541497562; cv=none; d=google.com; s=arc-20160816; b=mjV9yrTg6p5uyFprU7y6D4i0g49XKZK3xxV/LOggFF3iGC2SsVzmuOgEJTQCdVks4b pP6jTCYGoDhKkBdxGL5ENQiTWj1bHTmHrT4zSuPVdTLBu8yC+JmhB80iLm8B3bACnuGR l4gBTnNTA9sb4BcvEbkbF3Noe0ubfQnUO5Y6Ljamg8Q6fuMDogZDCGZ7UGxN0EJhxhVC wVg2VPAsK15u94J1F1BWBnr1wRZAhtcbo4WIUMdVABE83krjKlb9kiFbxfGrvJCg3kis Ng7a+8hlnedAcd2/yzGKWztjm4aay21vFhB4Vr8I0HPGkv+pBLhmoWniNEDYVWSQceGC tung== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:to:from:subject; bh=ne3QXoKhnVVut0a+GR6j/ECVhNQHHhvT4izlTvFywaQ=; b=k9FEZwJ9kYIXG6PFNoCvfGmEnumPQnFqjJj7nHc2XsNUqxPlwMjf14s5ENSXH+Vm6B 3/JlSrox3vrLIImuBTC8KEKGvdLJwkZKxKoXL7LDkdHyIJEQapweg65Rrva4M6KSMw2q ALRog6U7l5BXo3NyKSECzUwRhjddQKW2NTs0BFOkgzVpFOXUCqDh+uAKmIpqhW4tkbgl 0S/xCStgNqwQFVS2A4ov8jvXHYzt98T0P+gj5fBy82JuxrR1CF08E84d0v59vZrncVGP k1L9x5IAzdurJ/uDL88Khd7BkKPQgGD92qvGNmKwVcswad7lXfe0lrV8QZwbt485hNfT /sqA== 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=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a70si31166730pge.421.2018.11.06.01.45.47; Tue, 06 Nov 2018 01:46:02 -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=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387480AbeKFTI2 (ORCPT + 99 others); Tue, 6 Nov 2018 14:08:28 -0500 Received: from relay.sw.ru ([185.231.240.75]:59958 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729241AbeKFTI2 (ORCPT ); Tue, 6 Nov 2018 14:08:28 -0500 Received: from [172.16.25.169] (helo=localhost.localdomain) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1gJxtz-00037m-KI; Tue, 06 Nov 2018 12:44:03 +0300 Subject: [PATCH 5/6] fuse: Protect fuse_inode::nlookup with fuse_inode::lock From: Kirill Tkhai To: miklos@szeredi.hu, ktkhai@virtuozzo.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Date: Tue, 06 Nov 2018 12:44:03 +0300 Message-ID: <154149744356.18189.13444618369955494886.stgit@localhost.localdomain> In-Reply-To: <154149673368.18189.14752124997476502777.stgit@localhost.localdomain> References: <154149673368.18189.14752124997476502777.stgit@localhost.localdomain> User-Agent: StGit/0.18 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This continues previous patch and introduces the same protection for nlookup field. It goes as separate patch since it's separate logic change (sadly, but it looks impossible to split previous patch more then in this way). Signed-off-by: Kirill Tkhai --- fs/fuse/dir.c | 4 ++-- fs/fuse/inode.c | 4 ++-- fs/fuse/readdir.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 35f3b3d1e044..ac8519285327 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -222,9 +222,9 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) fuse_queue_forget(fc, forget, outarg.nodeid, 1); goto invalid; } - spin_lock(&fc->lock); + spin_lock(&fi->lock); fi->nlookup++; - spin_unlock(&fc->lock); + spin_unlock(&fi->lock); } kfree(forget); if (ret == -ENOMEM) diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 5f488b019cd9..b8092d49a4b2 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -327,9 +327,9 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid, } fi = get_fuse_inode(inode); - spin_lock(&fc->lock); + spin_lock(&fi->lock); fi->nlookup++; - spin_unlock(&fc->lock); + spin_unlock(&fi->lock); fuse_change_attributes(inode, attr, attr_valid, attr_version); return inode; diff --git a/fs/fuse/readdir.c b/fs/fuse/readdir.c index ab18b78f4755..574d03f8a573 100644 --- a/fs/fuse/readdir.c +++ b/fs/fuse/readdir.c @@ -213,9 +213,9 @@ static int fuse_direntplus_link(struct file *file, } fi = get_fuse_inode(inode); - spin_lock(&fc->lock); + spin_lock(&fi->lock); fi->nlookup++; - spin_unlock(&fc->lock); + spin_unlock(&fi->lock); forget_all_cached_acls(inode); fuse_change_attributes(inode, &o->attr,