Received: by 2002:a05:6358:5282:b0:b5:90e7:25cb with SMTP id g2csp3502058rwa; Tue, 23 Aug 2022 05:57:24 -0700 (PDT) X-Google-Smtp-Source: AA6agR5+WLKZLNDRRuFagCOWQjyEZ5cR62dwCVSsYyr98D51L1lDFgfPV+hmRbug742ZyOQr2mgk X-Received: by 2002:a63:1a09:0:b0:415:fa9a:ae57 with SMTP id a9-20020a631a09000000b00415fa9aae57mr20073945pga.181.1661259444080; Tue, 23 Aug 2022 05:57:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661259444; cv=none; d=google.com; s=arc-20160816; b=jzskrZOGJC1LlHPpWVjRt5qhWZNkqqb8FRvJn9k1XAvO/LbxY4sN+lCB9iqIyzB5A3 lOIJPPm07xQ6XhVY8n3BsgGCsyNQeIjrLPPCuD4F6wn+oPTioViGEQOcClRanK3292rS PtWt3rLTJy3mYuAHeZfqzSWHQcEFAp6FEfQoyS/AbQT9/61z1G+CUyUEVqOOrLnOPCWU GiA6hztiSWnR4P4XN2YFOt2Z8765UPRcVjFZ1lGm9Nkc8SbcmDxW4bwFcgdU18b6zFfb iYHuYjlibVZ7q8Yg4gF4vgHkRF354k4gTUdjtX2yT0rwlXojnIkpd5zV7v0FTZFsTYw8 Jb1A== 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=hJDDGySrhYYGrVJ1fHUyKsrFja/r8rQLehxHOFw1W+8=; b=M7LB+QJlWbtpol3UjpeZeg2oUTEoEj9ugyyfqjGLGvQ0me8L2GcOXPOujfa3WJiYrw Thhc/GnNwCzmgvi1XCl/hnrbOU7aWXtmnJSY/j+E9XvSrOb3kk0QOQWlFqJsV7OxtGDR W3cv8HdSexMcWUxoWCvvY80TuIhX5hMhyTDID4DPJAWZay6jj5d38QnDyQk7dc7e8Mii KK/1nPyXzYd/4mH1hLdl2wYxHY4H9v/enrf5OpLDM2CbbkYNXZS1qk0wfd98NqQ6xma6 nC6f8a7sWDZ7paIpLu3jegZljG9KnAt5U8uOGBt86nb3u4cbq82baWpjfh9+yAPt2p1q 0xhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=ETEc1aYT; 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 4-20020a631644000000b00429ead9bda6si14714582pgw.86.2022.08.23.05.57.13; Tue, 23 Aug 2022 05:57:24 -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=ETEc1aYT; 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 S1357705AbiHWLkR (ORCPT + 99 others); Tue, 23 Aug 2022 07:40:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49076 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350035AbiHWLdm (ORCPT ); Tue, 23 Aug 2022 07:33:42 -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 BB106C6CE9; Tue, 23 Aug 2022 02:27:03 -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 84A7BB81C66; Tue, 23 Aug 2022 09:27:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB54DC433C1; Tue, 23 Aug 2022 09:26:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1661246820; bh=u4vPOslWEQUuLCljqJhRpEZpjdHMmesnZcR9ZrcUPwU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ETEc1aYTXybXdl1pZ/2HeCyHQYG0iOjBLj3wYViKwIvJ6mSj8I211pcxzCi7mo4Cc ykFo4sOJBNL8EM+57imZ00IdIMunNGpn+LyGKScLFR58KpScySU1Zr2BPB7+D1R6P6 lIM5ufOIUrjs/n4i/ihbVnpQ2CBqRB3rfjzhGZpk= 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.4 200/389] ext4: recover csum seed of tmp_inode after migrating to extents Date: Tue, 23 Aug 2022 10:24:38 +0200 Message-Id: <20220823080123.991475102@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220823080115.331990024@linuxfoundation.org> References: <20220823080115.331990024@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 c5b2ea1a9372..1faa8e4ffb9d 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c @@ -435,7 +435,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]; /* @@ -483,6 +483,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)); /* @@ -593,6 +594,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