Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp3118870rwb; Mon, 15 Aug 2022 18:34:53 -0700 (PDT) X-Google-Smtp-Source: AA6agR6kXaQnBhV+IwcD8ZsPETNkM5w6IKzNc7MLITunUkXyywLu2A1DNKk8GJMj2wKT4LoK8mAZ X-Received: by 2002:a17:902:694a:b0:16e:e270:1f84 with SMTP id k10-20020a170902694a00b0016ee2701f84mr19574262plt.89.1660613693017; Mon, 15 Aug 2022 18:34:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660613693; cv=none; d=google.com; s=arc-20160816; b=hUEGa6mU81oDXu2LiggKsU0Weh9DmlI2edss5H3Vmghprt0V38bNZEJzqY9IB3VvcV 62oxy3OGTRiKmeLeL2S7jCf9kFPyzZnQqg1pxHRQFeRyE4DOyIV3D8QoJxY79khvMTer T6XxGBWPBrXRERYWk9si7Aa32xq3X49amW5/neuGcHse03n0LiwibbywBpEmhIDYs0aV hDjPrZHiWqm/ANWv6qCWEmklO/V8BUeNSTThxrN9TRA5Jm1qr/CsoWU+VHPU5M63e585 RRjqwM1t203ykgx3wPTLZ3F0YpJJ6jhjxeRfIqhJ9aKDQkVfAYTFPMpITkByH4pe1nJN yodw== 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=J1R4WVjt59veuoznWmVpOMeiRiPNK/ZA9fJcgXktY1w=; b=h9bQKfGEwftBqGWAhwCjVL/5W0VT+DH7m5+cFZQ4feolnRm064nMpvCKhI7iyS6u9f 7KhoK77/Mnlc+T/o3D9gts+ZmqNRSFIGHw0njzilTc3DLWUn9AKD6qPmLAVM/wIU5JO0 mqTrKOouPQ09ZUA6OSVniC5kxoJOUlo3y+gG2tykhRuie6CmBKf1Ri5afDFdY7lEjiGb tyVR+MRq34B9PQilNQcSUoJbLJ2+ktldzmjqroa9ULh+w4NrqcadP6weoXjMAy7uBXhJ VMO/Pf+kfA3ZKh6IqVK+jYPVwzU6u9+T6nS+xxjJm4ACmRLmchjNOlIKAFcRJv29ym0d jl2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ghYc0UTU; 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 f2-20020a056a00238200b005350672fc52si3224502pfc.345.2022.08.15.18.34.42; Mon, 15 Aug 2022 18:34:53 -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=ghYc0UTU; 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 S241359AbiHPAgy (ORCPT + 99 others); Mon, 15 Aug 2022 20:36:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349565AbiHPAdP (ORCPT ); Mon, 15 Aug 2022 20:33:15 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BCD8187330; Mon, 15 Aug 2022 13:37:06 -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 BF377B80EA9; Mon, 15 Aug 2022 20:37:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0A169C433D6; Mon, 15 Aug 2022 20:37:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1660595823; bh=a8C17+QBJnjejyysABz5bNZ5faQmGaHCooqXTZSjmUQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ghYc0UTUyPoy4jfSRFxi0IYfs7zDNUHPCH5GfqSzdVdPGPBoEo9b1q2kmSBRTExzo 2xBeAq1LZlwiHo1qOOcspwsAXGOXBM+sskJWTCeGIpCQ1k62m622dcUYqtUAKCboQw N4cfYdt0XeyWEXU64QnbxSmRlkwrUvM5bcywDJWo= 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.19 0886/1157] ext4: recover csum seed of tmp_inode after migrating to extents Date: Mon, 15 Aug 2022 20:04:02 +0200 Message-Id: <20220815180514.871524441@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220815180439.416659447@linuxfoundation.org> References: <20220815180439.416659447@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 42f590518b4c..54e7d3c95fd7 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