From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF17BC5479D for ; Wed, 11 Jan 2023 04:59:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1FD998E0002; Tue, 10 Jan 2023 23:59:10 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 186A68E0001; Tue, 10 Jan 2023 23:59:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 027688E0002; Tue, 10 Jan 2023 23:59:09 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id E35B68E0001 for ; Tue, 10 Jan 2023 23:59:09 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id AB36FAEDD7 for ; Wed, 11 Jan 2023 04:59:08 +0000 (UTC) X-FDA: 80341313976.19.CA3415C Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [62.89.141.173]) by imf28.hostedemail.com (Postfix) with ESMTP id DF79FC000A for ; Wed, 11 Jan 2023 04:59:05 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=linux.org.uk header.s=zeniv-20220401 header.b=gwuZnr26; dmarc=pass (policy=none) header.from=zeniv.linux.org.uk; spf=none (imf28.hostedemail.com: domain of viro@ftp.linux.org.uk has no SPF policy when checking 62.89.141.173) smtp.mailfrom=viro@ftp.linux.org.uk ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673413146; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hwxTpnik4GFRaEfSysSXhVpKMkvUhYmc7DfBcKe47Q8=; b=tNRjoBEK8z0c96xA4Ep5vSUnw2OwUAQdanQIxbrKez6lt0gEzH21I5sfIwLgRoOa9W+bHx INf9GZtxjSA0WcLaR2s6bTdl8+KOu58j8iJduBfkzAUo2nsDzkUDf8zEiA02voNcyFuIxt WBpOCbYIqYZit0LZ5CGHq9HSa08BtCE= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=linux.org.uk header.s=zeniv-20220401 header.b=gwuZnr26; dmarc=pass (policy=none) header.from=zeniv.linux.org.uk; spf=none (imf28.hostedemail.com: domain of viro@ftp.linux.org.uk has no SPF policy when checking 62.89.141.173) smtp.mailfrom=viro@ftp.linux.org.uk ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673413146; a=rsa-sha256; cv=none; b=umt+BSCPgyzUOtz/pNu0myLs/+8HzCFcrzQY2sqhZultxeDJtySbRfZ7rIiew/C3SDtjbz BhOPJuUGuR9vwmJHYI08j6v7dXpvX0G9b/PSusrbnGKK3v+zCnOWcuWGCNZnBTUxTSlefj mN0EtVIGyih01bZV/+8W1cJ+dyKkloA= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=hwxTpnik4GFRaEfSysSXhVpKMkvUhYmc7DfBcKe47Q8=; b=gwuZnr26GfvdSwtTngWR0qosOP HUs1Cd/2fuK8Qmn4R+lCu65v90x3QDWE/O14fdzypvhBXSoYF4rbsU1ykCOH27b8Xj7rp2JRAnf60 hcESkI65xxGkW5d1dmkrRhX253+s2bBeRS8x9As4FZk1sJg0/i9tdrxE2gBIqXrCUpjSjFVQmD59P yWkZ1kvppP2R3edwG0o19wXOgbKokc9xs+7pjD3M1PsiLmk0yVgIe/2Wh3vCPRj++UHnAGs2zyx+w F7rqLOZOjVvXeWfpNOgnCiEvEkTI822rlxKyO8e/cKnXhKVhmdqatpDQdhRiuxoCcE4feBhtRD5Bd BQG8ySuw==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.96 #2 (Red Hat Linux)) id 1pFTCF-0017ZY-1R; Wed, 11 Jan 2023 04:58:43 +0000 Date: Wed, 11 Jan 2023 04:58:43 +0000 From: Al Viro To: Christoph Hellwig Cc: Matthew Wilcox , Andrew Morton , Chris Mason , Josef Bacik , David Sterba , Dave Kleikamp , Mark Fasheh , Joel Becker , Joseph Qi , Evgeniy Dushistov , linux-btrfs@vger.kernel.org, jfs-discussion@lists.sourceforge.net, ocfs2-devel@oss.oracle.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH 3/7] minix: don't flush page immediately for DIRSYNC directories Message-ID: References: <20230108165645.381077-1-hch@lst.de> <20230108165645.381077-4-hch@lst.de> <20230110082225.GB11947@lst.de> <20230111042641.GA15181@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230111042641.GA15181@lst.de> X-Rspamd-Queue-Id: DF79FC000A X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: ek1coed6z4htsz5zpco7ihwsfefg4i1a X-HE-Tag: 1673413145-526775 X-HE-Meta: U2FsdGVkX187C4LBbmkEWmpc44A1JSc2ObF6C1yFosynTdfdHzgL2K0ReFG6/wqJhHUHkKmd74NmOFgAaoTmG+opTHh6NrXtfJopFL1Ml636OVawRulnvB61fc7gGwGwAhX7XLAIxZKwwV41VKkkYVPwuYGUFl4XvK2Ps5nzeuJq3J2hAXDZBgTXMTa/XcnYVpswWxVV5VJGedP/hEMPNqib/q01GeS5ApqvX3pE6dAUxV85lsRRld7hGCb/VbUv8H5/l55QzexM8yjoTyXCvGuyBYWa+yN/iUvidg5Z/Jt2nZ0/UmLC3cZgy4pSXpyYk/79PDgta2c4ZPTASC4yqpSsFpBg1CvIsI3dXL56xP2QBpzQBwv+POn+YiCvCcGFbhysNRVDQzGw52e5FlKgxplkBxLOeVax5tTYBqQf5Sd/uULvLDYQXtsSJzb8YrVVfv288DuSms5Qmq4n8reVYJCUm3VeZ/vqdrzXIwjVxsw/UYgsct3DHQz4Wgl++W9j7HXD1GabSyEhvgAd02FBcbxWODuT3GDhS8LoE/ALzyyg8p8MGzZswCwmJKIULv3rnRgUKpD6d9FpHXgiOAz03gX2KCj0mHDqxwrHqKUKmES1EVaoRrmsyCV/PhIHiLxJk3rqmXyl4QSrgDFGlZjNRZJy+LfyS5oXt0jVO/SDgVS5duq+vr2y4hsbXvpqtCziYKoxaSCTuwcBsOTO/0a/l+hBIMQUEbR3FHjWXPFBtj5uebvvq6SSeQ+dtF/9qPjaKE0aZjx7mKDMJEU/SPeNL7uCeU18c+i4wFX01g0goe0VV73AbaU9oJxat716C+i79CpLengFUH6n0HbSLq8WV/21kd/xlzfFAaCVyCxKatJLtrvGEM2MKnO2wlq4jzwQViA7Jyc+Fd3inZbNrjR82UWRZdA8gRiv+LbU/bXvhA9RRuEUckfyU8opExd9mn2UFnWqgurWipLASql8uDn B16FM8mu vd45Kix3Zz8M/dMsMSyKRnmxGm9TdlVMwHpi2hAqdYY1MxTgXhArkXnWREVMDmZRtT7KFawmpT/K2ft7s5RgzgFTsScvICUgdvYvz X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Jan 11, 2023 at 05:26:41AM +0100, Christoph Hellwig wrote: > On Wed, Jan 11, 2023 at 02:20:41AM +0000, Al Viro wrote: > > More seriously, all those ..._set_link() need to return an error and their > > callers (..._rename()) need to deal with failures. > > That's actually what I did yesterday: > > http://git.infradead.org/users/hch/misc.git/shortlog/refs/heads/remove-write_one_page ext2 also has that bug. As well as "need to check for delete_entry errors" one (also in ext2_rename()). Completely untested patch follows: diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c index e5cbc27ba459..b38fab33cd0d 100644 --- a/fs/ext2/dir.c +++ b/fs/ext2/dir.c @@ -461,7 +461,7 @@ static int ext2_handle_dirsync(struct inode *dir) return err; } -void ext2_set_link(struct inode *dir, struct ext2_dir_entry_2 *de, +int ext2_set_link(struct inode *dir, struct ext2_dir_entry_2 *de, struct page *page, void *page_addr, struct inode *inode, int update_times) { @@ -480,7 +480,7 @@ void ext2_set_link(struct inode *dir, struct ext2_dir_entry_2 *de, dir->i_mtime = dir->i_ctime = current_time(dir); EXT2_I(dir)->i_flags &= ~EXT2_BTREE_FL; mark_inode_dirty(dir); - ext2_handle_dirsync(dir); + return ext2_handle_dirsync(dir); } /* diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h index 28de11a22e5f..95c083bb1b7c 100644 --- a/fs/ext2/ext2.h +++ b/fs/ext2/ext2.h @@ -734,7 +734,7 @@ extern int ext2_delete_entry(struct ext2_dir_entry_2 *dir, struct page *page, char *kaddr); extern int ext2_empty_dir (struct inode *); extern struct ext2_dir_entry_2 *ext2_dotdot(struct inode *dir, struct page **p, void **pa); -extern void ext2_set_link(struct inode *, struct ext2_dir_entry_2 *, struct page *, void *, +extern int ext2_set_link(struct inode *, struct ext2_dir_entry_2 *, struct page *, void *, struct inode *, int); static inline void ext2_put_page(struct page *page, void *page_addr) { diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index c056957221a2..5e3397680faa 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -370,8 +370,10 @@ static int ext2_rename (struct user_namespace * mnt_userns, err = PTR_ERR(new_de); goto out_dir; } - ext2_set_link(new_dir, new_de, new_page, page_addr, old_inode, 1); + err = ext2_set_link(new_dir, new_de, new_page, page_addr, old_inode, 1); ext2_put_page(new_page, page_addr); + if (err) + goto out_dir; new_inode->i_ctime = current_time(new_inode); if (dir_de) drop_nlink(new_inode); @@ -391,7 +393,9 @@ static int ext2_rename (struct user_namespace * mnt_userns, old_inode->i_ctime = current_time(old_inode); mark_inode_dirty(old_inode); - ext2_delete_entry(old_de, old_page, old_page_addr); + err = ext2_delete_entry(old_de, old_page, old_page_addr); + if (err) + goto out_dir; if (dir_de) { if (old_dir != new_dir)