Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp1861239rwb; Fri, 19 Aug 2022 10:36:03 -0700 (PDT) X-Google-Smtp-Source: AA6agR7d4i/MhstdwVTZLTuBKQBOh3KlFzFt/ame9AzLm0wnKl4f/v4Iq7xPqXe1gKjhLu7vW7g5 X-Received: by 2002:a17:90b:1d0b:b0:1f5:72f:652c with SMTP id on11-20020a17090b1d0b00b001f5072f652cmr9517525pjb.38.1660930563480; Fri, 19 Aug 2022 10:36:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660930563; cv=none; d=google.com; s=arc-20160816; b=eKSzIPAFXqPWWX8mn/KWyJZ7ZIRtDgl+Sh7+yucu06nx2kpIsgDfBzTch2oOfm3/Oj 5H367T5TzXdvhVuyH/EApewsU71CG+2hQz4vM18S06F6rfRl5I+VmYsl7T9qAlqh908w UEa3iNOR6qgDI/FMM7HD3idD7wTtq2ExS8HUlbLwegtPARQLkoknHkBXWoROWxPghua4 nJiWe2dvriXa+ClcYr/uk4E6zvRPQOIxkGTYIRTV2PmiyYrOapIYerNwXgksohMvtVII u15VVu0TigXxtprhFQTnyv1XP7uQtfQGeDDdno9SDKHJPhI+ZWsabGHXb3+R9JuTq5WX hVCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=7t07gUzVBZCoQKkWCbxjxp2UNQqbjmv9LdU0C7RjGb4=; b=TkpCvgo37KRtvHyXO70VBQav7ToSRd5KlveH+C23UHjPCQ5FKQq9LS+IuGTpaatYyS utI3FGaf2n9XMlUovt+YrsblPM+ih/zVYkrvPnrRJlpGVUOVQQZMArLQp+SVEwp/ZFXs et2suurUktPMIkVxBfscfGI6SYpsNBAvRn1XUolpBiXeYZGzYYwH4P+nMj/Gem3gVJz3 PpjRQxitVuMlFToHDiwLI7Wogdhs0iCYKCcbYAVJcu+0xzYcTVmsYgTkUutJbBoQ4r3K I8mRNJCk8u1u+5AL61aD8AbdPBphpMgNl8j7A3cjbgvyOBBK3rcBlMFQ205iMAi5s+mI UzIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vFfUrYf0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k1-20020a170902ce0100b00170d34b95cdsi4458725plg.185.2022.08.19.10.35.52; Fri, 19 Aug 2022 10:36:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vFfUrYf0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352900AbiHSQ3C (ORCPT + 99 others); Fri, 19 Aug 2022 12:29:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353030AbiHSQ0C (ORCPT ); Fri, 19 Aug 2022 12:26:02 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B72510F689; Fri, 19 Aug 2022 09:03:48 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 207FAB82813; Fri, 19 Aug 2022 16:03:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6BBBCC433C1; Fri, 19 Aug 2022 16:03:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1660925025; bh=/4ZOjVGkzyskBJxw7fJOb8dioi+LGEMss3iRlveg4x0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vFfUrYf0fZ47w+GUEKYqBVoHiwKhuOZbz9I96qIKtDPe2xyKpAgQqBH9u6USYn6IF eZYL+6JJ+udhkN/t2zyh1H6zd/368ybox8u/WB4t+SCufpCYknr9MsmHoAmp76WH9P NNo6M0QBSfW0bDlaVrPlcU4PYnE40KleaVhEH+Sg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Li Lingfeng , Jan Kara , Theodore Tso , Sasha Levin Subject: [PATCH 5.10 360/545] ext4: recover csum seed of tmp_inode after migrating to extents Date: Fri, 19 Aug 2022 17:42:10 +0200 Message-Id: <20220819153845.495249814@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220819153829.135562864@linuxfoundation.org> References: <20220819153829.135562864@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Li Lingfeng [ Upstream commit 07ea7a617d6b278fb7acedb5cbe1a81ce2de7d0c ] When migrating to extents, the checksum seed of temporary inode need to be replaced by inode's, otherwise the inode checksums will be incorrect when swapping the inodes data. However, the temporary inode can not match it's checksum to itself since it has lost it's own checksum seed. mkfs.ext4 -F /dev/sdc mount /dev/sdc /mnt/sdc xfs_io -fc "pwrite 4k 4k" -c "fsync" /mnt/sdc/testfile chattr -e /mnt/sdc/testfile chattr +e /mnt/sdc/testfile umount /dev/sdc fsck -fn /dev/sdc ======== ... Pass 1: Checking inodes, blocks, and sizes Inode 13 passes checks, but checksum does not match inode. Fix? no ... ======== The fix is simple, save the checksum seed of temporary inode, and recover it after migrating to extents. Fixes: e81c9302a6c3 ("ext4: set csum seed in tmp inode while migrating to extents") Signed-off-by: Li Lingfeng Reviewed-by: Jan Kara Link: https://lore.kernel.org/r/20220617062515.2113438-1-lilingfeng3@huawei.com Signed-off-by: Theodore Ts'o Signed-off-by: Sasha Levin --- fs/ext4/migrate.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index 49912814f3d8..04320715d61f 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c @@ -417,7 +417,7 @@ int ext4_ext_migrate(struct inode *inode) struct inode *tmp_inode = NULL; struct migrate_struct lb; unsigned long max_entries; - __u32 goal; + __u32 goal, tmp_csum_seed; uid_t owner[2]; /* @@ -465,6 +465,7 @@ int ext4_ext_migrate(struct inode *inode) * the migration. */ ei = EXT4_I(inode); + tmp_csum_seed = EXT4_I(tmp_inode)->i_csum_seed; EXT4_I(tmp_inode)->i_csum_seed = ei->i_csum_seed; i_size_write(tmp_inode, i_size_read(inode)); /* @@ -575,6 +576,7 @@ int ext4_ext_migrate(struct inode *inode) * the inode is not visible to user space. */ tmp_inode->i_blocks = 0; + EXT4_I(tmp_inode)->i_csum_seed = tmp_csum_seed; /* Reset the extent details */ ext4_ext_tree_init(handle, tmp_inode); -- 2.35.1