Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp16434rdb; Mon, 4 Dec 2023 18:24:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IGxjRjfXBgDI8ZXe5xSuduPe1YeBj0D/9z7IRibmUANANg+SJTvZzoFVeOAnyeUBnl1C6kt X-Received: by 2002:a05:6358:5e14:b0:170:756:abc2 with SMTP id q20-20020a0563585e1400b001700756abc2mr5294594rwn.10.1701743089464; Mon, 04 Dec 2023 18:24:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701743089; cv=none; d=google.com; s=arc-20160816; b=Kub8ajXPO9DTR8tAw1zk2jHChLT7zih+HFLRHSS5MWMTzyo8ensBSFgokzsfo78gZC Ic4iejkMXBSVEcRw/uEX7+a3Nz/WrFiwaHORiRwHoRSz6whU6M7ZqA7clMw5m3KmdufP Dgch1SSNiXCQgCCHAvY6nHX5PQNspLBzeFKVjjmONLWr86R/L+nDxy+FFWKmWzeBBQd3 6c/hfWB4OMH4KH1rO8RF/j3lG+cGwcV+39ewQrEgJTNCCn25kP1wYI6tOw7E6aRsCqX4 35uTydDOimdM3009I+LX/ig2RxoJAHojo0pfNiIv0J4NCQCu/D7bwY2Pban6AmaY4p8l KUPQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1kXdQTzP9QbMwip9HhQkODeDCTy6uPz4pJDbGLrfwH4=; fh=DgGXwGbnyiv1Rvt/NkXbEKOXDvWVLBCb4IpCdacEJoI=; b=GefcupqoElNx1tb6lHALoKEJPXFzP7VricZuphianWcDizKGVUtMPdgnkZVEsYqhox //XXJ/YTp56hGYJNOcBK4QQ4aPJsFozW/80BNw2uT0XIgQ1e3/MOWFEEZ4pmfPOM952V f995WewydPfGFfJg0QAVBc1sAe4YMoFskrHvgAr+VLes3R7RkmgR/Oo7rS2lAYZJq19S 8+EeMC61pwWQLoQN/1FYs3CuHVH6/GeOm5gQZPRE9BNZ8fzg2XI4ofQGOuRRPZ6QThtN 2rpNO36APloPTr1UcrdhkHTFXYLoQ8pWGH0TVmh8bORk+UpePosx5Cssn6m1keabXCbs pR2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.org.uk header.s=zeniv-20220401 header.b=TIN2rLHw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id nh9-20020a17090b364900b002865ae767cesi6509096pjb.172.2023.12.04.18.24.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 18:24:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.org.uk header.s=zeniv-20220401 header.b=TIN2rLHw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 699D0804C221; Mon, 4 Dec 2023 18:24:44 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344020AbjLECYT (ORCPT + 99 others); Mon, 4 Dec 2023 21:24:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343930AbjLECYQ (ORCPT ); Mon, 4 Dec 2023 21:24:16 -0500 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [IPv6:2a03:a000:7:0:5054:ff:fe1c:15ff]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C98610F; Mon, 4 Dec 2023 18:24:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=1kXdQTzP9QbMwip9HhQkODeDCTy6uPz4pJDbGLrfwH4=; b=TIN2rLHwJM9EnMlKGMZ3+UixZd 6ZAAU6BcSIeX1Tdupwr4sOYumjzoDu9npdMdeoScH5yBlbbhfLEYT1n1InaswtEJ3zlArIiMMzUBy S4H/KsWiEpKhcmSM5iL3HhGeGaiCqcAAR/Mf8Jo+0FsDuKi6xVfRhhJTi3BvqCLVfAtgeoVa/x6Lc dVIAByfTXF/n5im83qZjIenUOEhtJTpCj9Gmy8SO9v5sf/xlFVVkh+pTxztsYSptdaPYgcge97e72 bgPohg0HxHRGSknDY9P1ZiNLzishSSL0mQfQnbXILTVcbJkzHLezJvE+BftSVgQ2K5YrEpdZrF5Em Yxnre5sw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.96 #2 (Red Hat Linux)) id 1rAL6i-00792e-2T; Tue, 05 Dec 2023 02:24:20 +0000 From: Al Viro To: linux-arch@vger.kernel.org Cc: gus Gusenleitner Klaus , Al Viro , Thomas Gleixner , lkml , Ingo Molnar , "bp@alien8.de" , "dave.hansen@linux.intel.com" , "x86@kernel.org" , "David S. Miller" , "dsahern@kernel.org" , "kuba@kernel.org" , Paolo Abeni , Eric Dumazet Subject: [PATCH v2 6/9] f2fs: Avoid reading renamed directory if parent does not change Date: Tue, 5 Dec 2023 02:24:03 +0000 Message-Id: <20231205022418.1703007-12-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231205022418.1703007-1-viro@zeniv.linux.org.uk> References: <20231205022100.GB1674809@ZenIV> <20231205022418.1703007-1-viro@zeniv.linux.org.uk> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: Al Viro X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 04 Dec 2023 18:24:44 -0800 (PST) From: Jan Kara The VFS will not be locking moved directory if its parent does not change. Change f2fs rename code to avoid reading renamed directory if its parent does not change. Having it uninlined while we are reading it would cause trouble and we won't be able to rely upon ->i_rwsem on the directory being renamed in cases that do not alter its parent. Signed-off-by: Jan Kara Signed-off-by: Al Viro --- fs/f2fs/namei.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c index d0053b0284d8..fdc97df6bb85 100644 --- a/fs/f2fs/namei.c +++ b/fs/f2fs/namei.c @@ -963,6 +963,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir, struct f2fs_dir_entry *old_dir_entry = NULL; struct f2fs_dir_entry *old_entry; struct f2fs_dir_entry *new_entry; + bool old_is_dir = S_ISDIR(old_inode->i_mode); int err; if (unlikely(f2fs_cp_error(sbi))) @@ -1017,7 +1018,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir, goto out; } - if (S_ISDIR(old_inode->i_mode)) { + if (old_is_dir && old_dir != new_dir) { old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page); if (!old_dir_entry) { if (IS_ERR(old_dir_page)) @@ -1029,7 +1030,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir, if (new_inode) { err = -ENOTEMPTY; - if (old_dir_entry && !f2fs_empty_dir(new_inode)) + if (old_is_dir && !f2fs_empty_dir(new_inode)) goto out_dir; err = -ENOENT; @@ -1054,7 +1055,7 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir, inode_set_ctime_current(new_inode); f2fs_down_write(&F2FS_I(new_inode)->i_sem); - if (old_dir_entry) + if (old_is_dir) f2fs_i_links_write(new_inode, false); f2fs_i_links_write(new_inode, false); f2fs_up_write(&F2FS_I(new_inode)->i_sem); @@ -1074,12 +1075,12 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir, goto out_dir; } - if (old_dir_entry) + if (old_is_dir) f2fs_i_links_write(new_dir, true); } f2fs_down_write(&F2FS_I(old_inode)->i_sem); - if (!old_dir_entry || whiteout) + if (!old_is_dir || whiteout) file_lost_pino(old_inode); else /* adjust dir's i_pino to pass fsck check */ @@ -1105,8 +1106,8 @@ static int f2fs_rename(struct mnt_idmap *idmap, struct inode *old_dir, iput(whiteout); } - if (old_dir_entry) { - if (old_dir != new_dir && !whiteout) + if (old_is_dir) { + if (old_dir_entry && !whiteout) f2fs_set_link(old_inode, old_dir_entry, old_dir_page, new_dir); else -- 2.39.2