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 0E016C32793 for ; Wed, 18 Jan 2023 17:30:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C0E7C6B007D; Wed, 18 Jan 2023 12:30:50 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BC0F66B007E; Wed, 18 Jan 2023 12:30:50 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A112B6B0080; Wed, 18 Jan 2023 12:30:50 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 931B56B007D for ; Wed, 18 Jan 2023 12:30:50 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 542A01A0C11 for ; Wed, 18 Jan 2023 17:30:50 +0000 (UTC) X-FDA: 80368609860.18.A4CC513 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf23.hostedemail.com (Postfix) with ESMTP id AADB414001D for ; Wed, 18 Jan 2023 17:30:48 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=22EHDJ09; spf=none (imf23.hostedemail.com: domain of BATV+aec3eaf5b774c69d00f8+7087+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+aec3eaf5b774c69d00f8+7087+infradead.org+hch@bombadil.srs.infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1674063048; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IK5go+LYlZzyyL0UG1E7ybATwbkUdMWL1x4AyvlHUwI=; b=L76VtHGZ+jEh+c6pHP9Rd7fJMLRdAiq/y5kJ0GyG2QT9k2dogPtb6b5UNksDrW0PaKfjia KKvfDzXLNEpbPduiFdGj+EG7Cp/Y6EYWCUZYpY6xidO7FgA5O1EHs57XDdZXCIo4MfcfrO cs5PKOIhzzty7uv/xrWAzUjEDaP08wA= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=22EHDJ09; spf=none (imf23.hostedemail.com: domain of BATV+aec3eaf5b774c69d00f8+7087+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+aec3eaf5b774c69d00f8+7087+infradead.org+hch@bombadil.srs.infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1674063048; a=rsa-sha256; cv=none; b=P3pra1aqfj0QF5oP5jFFgs3zh1wwLPnz6kgmYakzjWLijpF2nWv501hxWH8yBXzHwY/Q1H yS9r4An0uZ1vUoGuz+Zk2HBj7C99STFs7X39x+3NUVpDs9DWlKz6tMke2K+iGoGEa8Mjbs ckt8ciwLjCqc/K4bix54YlwNUiFJ6pc= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=IK5go+LYlZzyyL0UG1E7ybATwbkUdMWL1x4AyvlHUwI=; b=22EHDJ091Mc3KuCstacxTn+6U1 TtnzRBznDgrz0So3oaYkMeFGRgj57zvpXYFUDSdqIZCgYRkHBvwHfNjsXzrP/xQqOVenmai+nAW05 fAdQseByMb+clpStiSc1jaAggo5QN6wpqlWBa4LFiuGeCZQTwywEGcNFv57TECBX0jtat3EobXTs3 AAuTXZlnaD8uWKiY541D53Z2S5GCsZPQrhEooQxpEasFeFqVjWXpIG4T+M4rZXyBOYzvSLrlcDucJ OM2qASNW5swyWRdm0BMqklqdwx4TTiiRsUbp0AvE/p/fb51scw/1RLWSo3a+Nh0FNvVDREyxuYrqN vC+yzHTQ==; Received: from [2001:4bb8:19a:2039:cce7:a1cd:f61c:a80d] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1pICGk-002298-Oz; Wed, 18 Jan 2023 17:30:39 +0000 From: Christoph Hellwig To: Andrew Morton , Mark Fasheh , Joel Becker , Joseph Qi , Evgeniy Dushistov , "Matthew Wilcox (Oracle)" Cc: ocfs2-devel@oss.oracle.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 3/7] minix: fix error handling in minix_set_link Date: Wed, 18 Jan 2023 18:30:23 +0100 Message-Id: <20230118173027.294869-4-hch@lst.de> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230118173027.294869-1-hch@lst.de> References: <20230118173027.294869-1-hch@lst.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: AADB414001D X-Stat-Signature: b1tdns9w5hb5ca1cn69k8r6mqczemk4x X-HE-Tag: 1674063048-254515 X-HE-Meta: U2FsdGVkX19idALKOo4NdaENvGIC1Uzim6xcTokZNcy+G6Ylflt4S6WqNKk6C4a2V2sFfstTBW404YBqLn4f6k43PZkBA7rJIkCkLgOlfRXYnITG8Yj2HHvWAbliYRA2iErux1rUpscrtzPwYrt6kSNTvEWtxSFi9EhfBxRFraHgYEo8QRCuXN79RQB0j3G1AKE5HjMzu9M42MVGRts9lt+xrsBJCDctzOQqYAfqLagjXijY+nQdlz6MlcZxV86DQavV45dNY58yN3NtDXAlAbhGZWpPCOVj5Sf1bNcAGAXWfyOow5XMmF6Ygob0hRMAsZl0GYkm/aAAVDeD38m0nULRNI/uSRWpNMVVjrEw05GnIL6A+MaEgzp18gJzVoNN5cs/cmFpNsGMVGQmCIy4J3cYAwUioFPSZGCGyw5Aa+PMuDYha3bKiRUqny0gjNSnu39dr/V3gyLBYVv9ZXG7vpstlnE2LEyrCOHfDgsZySgP2m53cuPwBEO7gCYpQv9nIJijfcZPOt++RsUbtmiTZqqJP/5/0Nlt6rV5bvBLZF3TgLj69fxrw9wVGHaaFhth/eeDWoL51WNAG9Z2g98oT4Srwk/G/V2JBQNvyy9UmRPVlPc1bMjMn9boAkEmvOINvQ5d6mLA9/l84VIynXZMdkmd/iylv3TvCt0O+4OL28AtJbQ0OulrAw+hlxErwmxHnG6eWfcwizQxtLKQba8MySeqyFiCj9+OpalOuYTTCOjoSSWu7q9J2LlNBEhnliCY/natw63HJ4sxu3K9B5zkPsl8aSgBDdTD7BTvkFyKxJ8tlfzVk+29gG8GWVehsVe4NrqNz4gvlO3chj734r2jNbcYANWf8PYI2PuC1W9FqXmtx28KfSeBZYRvUmRA3ZyE4ufH1rlpmG57+b8pTwkDdBMkcU6a01mtIYH7odOn/TpstJLhXIRSrHT6fccTX6l/1H1aZrQArumJFwplyyC N72EepOh 5nUqHy+wGcNKsGH9seaCTQWtSQqWM/mTghpUB7kQyORBhaOwaxKIoeJthfTS96rjuv0Qi4iqaSNXzDpq4iknAmgnZ3BEeXpDQrD4AGdG061uyfXqjAV9hPD8/tD2tptPfPENRSQZ1FTbdbal0ZU9goLYusrzLfGr33gVUUNjibFDu2brbhlslQrXED4N1Sy9L+JA0IA9wvN5fHM45DkswZo9Ujon45hcKQCc173QLPR111AI= 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: If minix_prepare_chunk fails, updating c/mtime and marking the dir inode dirty is wrong, as the inode hasn't been modified. Also propagate the error to the caller. Note that this moves the dir_put_page call later, but that matches other uses of this helper in the directory code. Signed-off-by: Christoph Hellwig --- fs/minix/dir.c | 22 ++++++++++++---------- fs/minix/minix.h | 3 ++- fs/minix/namei.c | 10 ++++++---- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/fs/minix/dir.c b/fs/minix/dir.c index 242e179aa1fbeb..34c1cdb5dc7d47 100644 --- a/fs/minix/dir.c +++ b/fs/minix/dir.c @@ -410,8 +410,8 @@ int minix_empty_dir(struct inode * inode) } /* Releases the page */ -void minix_set_link(struct minix_dir_entry *de, struct page *page, - struct inode *inode) +int minix_set_link(struct minix_dir_entry *de, struct page *page, + struct inode *inode) { struct inode *dir = page->mapping->host; struct minix_sb_info *sbi = minix_sb(dir->i_sb); @@ -420,19 +420,21 @@ void minix_set_link(struct minix_dir_entry *de, struct page *page, int err; lock_page(page); - err = minix_prepare_chunk(page, pos, sbi->s_dirsize); - if (err == 0) { - if (sbi->s_version == MINIX_V3) - ((minix3_dirent *) de)->inode = inode->i_ino; - else - de->inode = inode->i_ino; - err = dir_commit_chunk(page, pos, sbi->s_dirsize); - } else { + if (err) { unlock_page(page); + return err; } + if (sbi->s_version == MINIX_V3) + ((minix3_dirent *)de)->inode = inode->i_ino; + else + de->inode = inode->i_ino; + err = dir_commit_chunk(page, pos, sbi->s_dirsize); + if (err) + return err; dir->i_mtime = dir->i_ctime = current_time(dir); mark_inode_dirty(dir); + return 0; } struct minix_dir_entry * minix_dotdot (struct inode *dir, struct page **p) diff --git a/fs/minix/minix.h b/fs/minix/minix.h index 20217336802570..8f7a636bd1b241 100644 --- a/fs/minix/minix.h +++ b/fs/minix/minix.h @@ -69,7 +69,8 @@ extern int minix_add_link(struct dentry*, struct inode*); extern int minix_delete_entry(struct minix_dir_entry*, struct page*); extern int minix_make_empty(struct inode*, struct inode*); extern int minix_empty_dir(struct inode*); -extern void minix_set_link(struct minix_dir_entry*, struct page*, struct inode*); +int minix_set_link(struct minix_dir_entry *de, struct page *page, + struct inode *inode); extern struct minix_dir_entry *minix_dotdot(struct inode*, struct page**); extern ino_t minix_inode_by_name(struct dentry*); diff --git a/fs/minix/namei.c b/fs/minix/namei.c index 5fc696e032c543..bfbadd85d01032 100644 --- a/fs/minix/namei.c +++ b/fs/minix/namei.c @@ -223,10 +223,11 @@ static int minix_rename(struct user_namespace *mnt_userns, new_de = minix_find_entry(new_dentry, &new_page); if (!new_de) goto out_dir; - err = 0; - minix_set_link(new_de, new_page, old_inode); + err = minix_set_link(new_de, new_page, old_inode); kunmap(new_page); put_page(new_page); + if (err) + goto out_dir; new_inode->i_ctime = current_time(new_inode); if (dir_de) drop_nlink(new_inode); @@ -243,8 +244,9 @@ static int minix_rename(struct user_namespace *mnt_userns, mark_inode_dirty(old_inode); if (dir_de) { - minix_set_link(dir_de, dir_page, new_dir); - inode_dec_link_count(old_dir); + err = minix_set_link(dir_de, dir_page, new_dir); + if (!err) + inode_dec_link_count(old_dir); } out_dir: if (dir_de) { -- 2.39.0