From patchwork Tue Sep 19 09:02:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Dilger X-Patchwork-Id: 1836554 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org (client-ip=150.107.74.76; helo=gandalf.ozlabs.org; envelope-from=srs0=zn4r=fd=vger.kernel.org=linux-ext4-owner@ozlabs.org; receiver=patchwork.ozlabs.org) Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RqbKB3F15z1ync for ; Tue, 19 Sep 2023 19:02:38 +1000 (AEST) Received: from gandalf.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKB2lpjz4xQS for ; Tue, 19 Sep 2023 19:02:38 +1000 (AEST) Received: by gandalf.ozlabs.org (Postfix) id 4RqbKB2dXGz4xQT; Tue, 19 Sep 2023 19:02:38 +1000 (AEST) Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: gandalf.ozlabs.org; dmarc=none (p=none dis=none) header.from=dilger.ca Authentication-Results: gandalf.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=ozlabs.org) Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKB1bQ6z4xQS for ; Tue, 19 Sep 2023 19:02:38 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230498AbjISJCl (ORCPT ); Tue, 19 Sep 2023 05:02:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231167AbjISJCk (ORCPT ); Tue, 19 Sep 2023 05:02:40 -0400 Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B669114 for ; Tue, 19 Sep 2023 02:02:33 -0700 (PDT) Received: from shw-obgw-4001a.ext.cloudfilter.net ([10.228.9.142]) by cmsmtp with ESMTP id iE0mqXQGt6NwhiWcqqy4Wo; Tue, 19 Sep 2023 09:02:32 +0000 Received: from webber.adilger.int ([70.77.221.9]) by cmsmtp with ESMTP id iWcpqDHfQHFsOiWcpqzzIK; Tue, 19 Sep 2023 09:02:32 +0000 X-Authority-Analysis: v=2.4 cv=XZqaca15 c=1 sm=1 tr=0 ts=650963a8 a=2Y6h5+ypAxmHcsumz2f7Og==:117 a=2Y6h5+ypAxmHcsumz2f7Og==:17 a=pGLkceISAAAA:8 a=RPJ6JBhKAAAA:8 a=LXVQ_-qJVfS9U6ybf7IA:9 a=fa_un-3J20JGBB2Tu-mn:22 From: Andreas Dilger To: tytso@mit.edu Cc: linux-ext4@vger.kernel.org, Alexey Lyashkov , Andreas Dilger Subject: [PATCH 1/7] [v2] lib: move jfs_user.h into libsupport Date: Tue, 19 Sep 2023 03:02:21 -0600 Message-Id: <20230919090227.25363-1-adilger@dilger.ca> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CMAE-Envelope: MS4xfFYc3gxTaho3nkmPr1CblqLqqJF3LEPPijSsraY6Y8dVop2yYVKUhegYX+iEDldy+zUPiS9T9EiMCZZMkGzkIy02QXFuKMsZZxdICRr0el0u8GTCWBRs 6ziNfbvcIAfsAy0qQC2RvwzQ//+9qukFkWXjM+oed/JT7yY3VDuJC6FC1vsEbVQXMzGi8ImUz9Pwk7SHpDHb0rQCHxaA0xYYHTLRAxYz2dPT7VIdWn7F2XT1 lTE6di4hMydrYnoH6DLBUkMg5InRkLg9GLyyFQxUzGzUwAEeNzv7j2DauEAEzLue X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_PASS 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-ext4@vger.kernel.org From: Alexey Lyashkov The jfs_user.h header used in both debugfs and e2fsck, so lib/support is better place for it. Move a header into new place and rename to jbd2_user.h to avoid confusion with JFS filesystem files. Signed-off-by: Alexey Lyashkov Reviewed-by: Andreas Dilger --- debugfs/Makefile.in | 16 +++++++--------- debugfs/debugfs.c | 2 +- debugfs/journal.h | 2 +- debugfs/logdump.c | 2 +- e2fsck/Makefile.in | 8 ++++---- e2fsck/journal.c | 2 +- e2fsck/recovery.c | 2 +- e2fsck/revoke.c | 2 +- e2fsck/unix.c | 2 +- lib/ext2fs/Makefile.in | 18 ++++++++---------- e2fsck/jfs_user.h => lib/support/jbd2_user.h | 0 misc/Makefile.in | 12 +++++------- 12 files changed, 31 insertions(+), 37 deletions(-) rename e2fsck/jfs_user.h => lib/support/jbd2_user.h (100%) diff --git a/debugfs/Makefile.in b/debugfs/Makefile.in index 67f8d0b6..1ced0c78 100644 --- a/debugfs/Makefile.in +++ b/debugfs/Makefile.in @@ -47,9 +47,7 @@ STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBSS) \ $(DEPSTATIC_LIBCOM_ERR) $(DEPSTATIC_LIBUUID) \ $(DEPSTATIC_LIBE2P) -# This nastiness is needed because of jfs_user.h hackery; when we finally -# clean up this mess, we should be able to drop it -LOCAL_CFLAGS = -I$(srcdir)/../e2fsck -DDEBUGFS +LOCAL_CFLAGS = -DDEBUGFS DEPEND_CFLAGS = -I$(srcdir) .c.o: @@ -186,7 +184,7 @@ debugfs.o: $(srcdir)/debugfs.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \ $(top_srcdir)/lib/support/dqblk_v2.h \ $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/version.h \ - $(srcdir)/../e2fsck/jfs_user.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \ + $(top_srcdir)/lib/support/jbd2_user.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \ $(top_srcdir)/lib/ext2fs/compiler.h $(top_srcdir)/lib/support/plausible.h util.o: $(srcdir)/util.c $(top_builddir)/lib/config.h \ @@ -277,7 +275,7 @@ logdump.o: $(srcdir)/logdump.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/ext2fs/bitops.h $(srcdir)/../misc/create_inode.h \ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \ $(top_srcdir)/lib/support/dqblk_v2.h \ - $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/../e2fsck/jfs_user.h \ + $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/lib/support/jbd2_user.h \ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ $(top_srcdir)/lib/ext2fs/fast_commit.h @@ -382,7 +380,7 @@ quota.o: $(srcdir)/quota.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/support/quotaio_tree.h journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \ $(top_builddir)/lib/dirpaths.h $(srcdir)/journal.h \ - $(srcdir)/../e2fsck/jfs_user.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ + $(top_srcdir)/lib/support/jbd2_user.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \ $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ @@ -390,7 +388,7 @@ journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \ $(top_srcdir)/lib/ext2fs/compiler.h -revoke.o: $(srcdir)/../e2fsck/revoke.c $(srcdir)/../e2fsck/jfs_user.h \ +revoke.o: $(srcdir)/../e2fsck/revoke.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ @@ -400,7 +398,7 @@ revoke.o: $(srcdir)/../e2fsck/revoke.c $(srcdir)/../e2fsck/jfs_user.h \ $(top_srcdir)/lib/ext2fs/bitops.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \ $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \ $(top_srcdir)/lib/ext2fs/compiler.h -recovery.o: $(srcdir)/../e2fsck/recovery.c $(srcdir)/../e2fsck/jfs_user.h \ +recovery.o: $(srcdir)/../e2fsck/recovery.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ @@ -423,4 +421,4 @@ do_journal.o: $(srcdir)/do_journal.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/support/quotaio_tree.h \ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ - $(srcdir)/journal.h $(srcdir)/../e2fsck/jfs_user.h + $(srcdir)/journal.h $(top_srcdir)/lib/support/jbd2_user.h diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c index 9b6321dc..742bf794 100644 --- a/debugfs/debugfs.c +++ b/debugfs/debugfs.c @@ -37,7 +37,7 @@ extern char *optarg; #include #include "../version.h" -#include "jfs_user.h" +#include "support/jbd2_user.h" #include "support/plausible.h" #ifndef BUFSIZ diff --git a/debugfs/journal.h b/debugfs/journal.h index 10b638eb..9c11f4f1 100644 --- a/debugfs/journal.h +++ b/debugfs/journal.h @@ -12,7 +12,7 @@ * any later version. */ -#include "jfs_user.h" +#include "support/jbd2_user.h" /* journal.c */ errcode_t ext2fs_open_journal(ext2_filsys fs, journal_t **j); diff --git a/debugfs/logdump.c b/debugfs/logdump.c index 6b0133e0..908a3f35 100644 --- a/debugfs/logdump.c +++ b/debugfs/logdump.c @@ -32,7 +32,7 @@ extern char *optarg; #include "debugfs.h" #include "blkid/blkid.h" -#include "jfs_user.h" +#include "support/jbd2_user.h" #if __GNUC_PREREQ (4, 6) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" diff --git a/e2fsck/Makefile.in b/e2fsck/Makefile.in index fbb7b156..6034b91e 100644 --- a/e2fsck/Makefile.in +++ b/e2fsck/Makefile.in @@ -383,7 +383,7 @@ pass5.o: $(srcdir)/pass5.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ $(srcdir)/problem.h journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \ - $(top_builddir)/lib/dirpaths.h $(srcdir)/jfs_user.h $(srcdir)/e2fsck.h \ + $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/jbd2_user.h $(srcdir)/e2fsck.h \ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \ @@ -396,7 +396,7 @@ journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(srcdir)/problem.h -recovery.o: $(srcdir)/recovery.c $(srcdir)/jfs_user.h \ +recovery.o: $(srcdir)/recovery.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(srcdir)/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ @@ -410,7 +410,7 @@ recovery.o: $(srcdir)/recovery.c $(srcdir)/jfs_user.h \ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ $(top_srcdir)/lib/ext2fs/kernel-jbd.h -revoke.o: $(srcdir)/revoke.c $(srcdir)/jfs_user.h \ +revoke.o: $(srcdir)/revoke.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(srcdir)/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ @@ -464,7 +464,7 @@ unix.o: $(srcdir)/unix.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/support/quotaio_tree.h \ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ - $(srcdir)/problem.h $(srcdir)/jfs_user.h \ + $(srcdir)/problem.h $(top_srcdir)/lib/support/jbd2_user.h \ $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/version.h dirinfo.o: $(srcdir)/dirinfo.c $(top_builddir)/lib/config.h \ $(top_builddir)/lib/dirpaths.h $(srcdir)/e2fsck.h \ diff --git a/e2fsck/journal.c b/e2fsck/journal.c index 8ae89bf7..26927cde 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -23,7 +23,7 @@ #endif #define E2FSCK_INCLUDE_INLINE_FUNCS -#include "jfs_user.h" +#include "support/jbd2_user.h" #include "problem.h" #include "uuid/uuid.h" diff --git a/e2fsck/recovery.c b/e2fsck/recovery.c index 8ca35271..7fff6b80 100644 --- a/e2fsck/recovery.c +++ b/e2fsck/recovery.c @@ -11,7 +11,7 @@ */ #ifndef __KERNEL__ -#include "jfs_user.h" +#include "support/jbd2_user.h" #else #include #include diff --git a/e2fsck/revoke.c b/e2fsck/revoke.c index fa608788..77d269e3 100644 --- a/e2fsck/revoke.c +++ b/e2fsck/revoke.c @@ -78,7 +78,7 @@ */ #ifndef __KERNEL__ -#include "jfs_user.h" +#include "support/jbd2_user.h" #else #include #include diff --git a/e2fsck/unix.c b/e2fsck/unix.c index 853eb296..947e4ffa 100644 --- a/e2fsck/unix.c +++ b/e2fsck/unix.c @@ -55,7 +55,7 @@ extern int optind; #include "support/devname.h" #include "e2fsck.h" #include "problem.h" -#include "jfs_user.h" +#include "support/jbd2_user.h" #include "../version.h" /* Command line options */ diff --git a/lib/ext2fs/Makefile.in b/lib/ext2fs/Makefile.in index 1b6a74b8..4cee31f5 100644 --- a/lib/ext2fs/Makefile.in +++ b/lib/ext2fs/Makefile.in @@ -5,10 +5,8 @@ top_builddir = ../.. my_dir = lib/ext2fs INSTALL = @INSTALL@ MKDIR_P = @MKDIR_P@ -DEPEND_CFLAGS = -I$(top_srcdir)/debugfs -I$(srcdir)/../../e2fsck -DDEBUGFS -# This nastiness is needed because of jfs_user.h hackery; when we finally -# clean up this mess, we should be able to drop it -DEBUGFS_CFLAGS = -I$(srcdir)/../../e2fsck $(ALL_CFLAGS) -DDEBUGFS +DEPEND_CFLAGS = -I$(top_srcdir)/debugfs -DDEBUGFS +DEBUGFS_CFLAGS = $(ALL_CFLAGS) -DDEBUGFS @MCONFIG@ @@ -1229,7 +1227,7 @@ debugfs.o: $(top_srcdir)/debugfs/debugfs.c $(top_builddir)/lib/config.h \ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/debugfs/../version.h \ - $(srcdir)/../../e2fsck/jfs_user.h $(srcdir)/kernel-jbd.h \ + $(top_srcdir)/lib/support/jbd2_user.h $(srcdir)/kernel-jbd.h \ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h $(srcdir)/compiler.h \ $(top_srcdir)/lib/support/plausible.h util.o: $(top_srcdir)/debugfs/util.c $(top_builddir)/lib/config.h \ @@ -1319,7 +1317,7 @@ logdump.o: $(top_srcdir)/debugfs/logdump.c $(top_builddir)/lib/config.h \ $(srcdir)/hashmap.h $(srcdir)/bitops.h \ $(top_srcdir)/debugfs/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ - $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/../../e2fsck/jfs_user.h \ + $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/lib/support/jbd2_user.h \ $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h \ $(srcdir)/compiler.h $(srcdir)/fast_commit.h htree.o: $(top_srcdir)/debugfs/htree.c $(top_builddir)/lib/config.h \ @@ -1420,13 +1418,13 @@ create_inode.o: $(top_srcdir)/misc/create_inode.c \ $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/nls-enable.h journal.o: $(top_srcdir)/debugfs/journal.c $(top_builddir)/lib/config.h \ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/debugfs/journal.h \ - $(srcdir)/../../e2fsck/jfs_user.h $(srcdir)/ext2_fs.h \ + $(top_srcdir)/lib/support/jbd2_user.h $(srcdir)/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(srcdir)/ext2fs.h \ $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h $(srcdir)/ext2_io.h \ $(top_builddir)/lib/ext2fs/ext2_err.h $(srcdir)/ext2_ext_attr.h \ $(srcdir)/hashmap.h $(srcdir)/bitops.h $(srcdir)/kernel-jbd.h \ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h $(srcdir)/compiler.h -revoke.o: $(top_srcdir)/e2fsck/revoke.c $(top_srcdir)/e2fsck/jfs_user.h \ +revoke.o: $(top_srcdir)/e2fsck/revoke.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(srcdir)/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ $(srcdir)/ext2fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \ @@ -1434,7 +1432,7 @@ revoke.o: $(top_srcdir)/e2fsck/revoke.c $(top_srcdir)/e2fsck/jfs_user.h \ $(srcdir)/ext2_ext_attr.h $(srcdir)/hashmap.h $(srcdir)/bitops.h \ $(srcdir)/kernel-jbd.h $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h \ $(srcdir)/compiler.h -recovery.o: $(top_srcdir)/e2fsck/recovery.c $(top_srcdir)/e2fsck/jfs_user.h \ +recovery.o: $(top_srcdir)/e2fsck/recovery.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(srcdir)/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ $(srcdir)/ext2fs.h $(srcdir)/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \ @@ -1454,4 +1452,4 @@ do_journal.o: $(top_srcdir)/debugfs/do_journal.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/kernel-jbd.h \ $(srcdir)/jfs_compat.h $(srcdir)/kernel-list.h $(srcdir)/compiler.h \ - $(top_srcdir)/debugfs/journal.h $(srcdir)/../../e2fsck/jfs_user.h + $(top_srcdir)/debugfs/journal.h $(top_srcdir)/lib/support/jbd2_user.h diff --git a/e2fsck/jfs_user.h b/lib/support/jbd2_user.h similarity index 100% rename from e2fsck/jfs_user.h rename to lib/support/jbd2_user.h diff --git a/misc/Makefile.in b/misc/Makefile.in index e5420bbd..0c725521 100644 --- a/misc/Makefile.in +++ b/misc/Makefile.in @@ -124,10 +124,8 @@ DEPLIBS_E2P= $(LIBE2P) $(DEPLIBCOM_ERR) COMPILE_ET= _ET_DIR_OVERRIDE=$(srcdir)/../lib/et/et ../lib/et/compile_et -# This nastiness is needed because of jfs_user.h hackery; when we finally -# clean up this mess, we should be able to drop it -JOURNAL_CFLAGS = -I$(srcdir)/../e2fsck $(ALL_CFLAGS) -DDEBUGFS -DEPEND_CFLAGS = -I$(top_srcdir)/e2fsck +JOURNAL_CFLAGS = -I $(ALL_CFLAGS) -DDEBUGFS +DEPEND_CFLAGS = .c.o: $(E) " CC $<" @@ -879,7 +877,7 @@ check_fuzzer.o: $(srcdir)/check_fuzzer.c $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_srcdir)/lib/ext2fs/bitops.h journal.o: $(srcdir)/../debugfs/journal.c $(top_builddir)/lib/config.h \ $(top_builddir)/lib/dirpaths.h $(srcdir)/../debugfs/journal.h \ - $(top_srcdir)/e2fsck/jfs_user.h $(top_srcdir)/e2fsck/e2fsck.h \ + $(top_srcdir)/lib/support/jbd2_user.h $(top_srcdir)/e2fsck/e2fsck.h \ $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \ @@ -892,7 +890,7 @@ journal.o: $(srcdir)/../debugfs/journal.c $(top_builddir)/lib/config.h \ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ $(top_srcdir)/lib/ext2fs/kernel-jbd.h -revoke.o: $(srcdir)/../e2fsck/revoke.c $(srcdir)/../e2fsck/jfs_user.h \ +revoke.o: $(srcdir)/../e2fsck/revoke.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(srcdir)/../e2fsck/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ @@ -906,7 +904,7 @@ revoke.o: $(srcdir)/../e2fsck/revoke.c $(srcdir)/../e2fsck/jfs_user.h \ $(top_srcdir)/lib/ext2fs/fast_commit.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ $(top_srcdir)/lib/ext2fs/kernel-list.h $(top_srcdir)/lib/ext2fs/compiler.h \ $(top_srcdir)/lib/ext2fs/kernel-jbd.h -recovery.o: $(srcdir)/../e2fsck/recovery.c $(srcdir)/../e2fsck/jfs_user.h \ +recovery.o: $(srcdir)/../e2fsck/recovery.c $(top_srcdir)/lib/support/jbd2_user.h \ $(top_builddir)/lib/config.h $(top_builddir)/lib/dirpaths.h \ $(srcdir)/../e2fsck/e2fsck.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ From patchwork Tue Sep 19 09:02:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Dilger X-Patchwork-Id: 1836555 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org (client-ip=2404:9400:2221:ea00::3; helo=gandalf.ozlabs.org; envelope-from=srs0=zn4r=fd=vger.kernel.org=linux-ext4-owner@ozlabs.org; receiver=patchwork.ozlabs.org) Received: from gandalf.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RqbKF5YXYz1ync for ; Tue, 19 Sep 2023 19:02:41 +1000 (AEST) Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKF56HNz4xQS for ; Tue, 19 Sep 2023 19:02:41 +1000 (AEST) Received: by gandalf.ozlabs.org (Postfix) id 4RqbKF53y2z4xQT; Tue, 19 Sep 2023 19:02:41 +1000 (AEST) Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: gandalf.ozlabs.org; dmarc=none (p=none dis=none) header.from=dilger.ca Authentication-Results: gandalf.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=ozlabs.org) Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKF1nqyz4xQS for ; Tue, 19 Sep 2023 19:02:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231192AbjISJCp (ORCPT ); Tue, 19 Sep 2023 05:02:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231167AbjISJCm (ORCPT ); Tue, 19 Sep 2023 05:02:42 -0400 Received: from omta002.cacentral1.a.cloudfilter.net (omta002.cacentral1.a.cloudfilter.net [3.97.99.33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D7ACF114 for ; Tue, 19 Sep 2023 02:02:36 -0700 (PDT) Received: from shw-obgw-4001a.ext.cloudfilter.net ([10.228.9.142]) by cmsmtp with ESMTP id iE0mqXQGt6NwhiWcuqy4X0; Tue, 19 Sep 2023 09:02:36 +0000 Received: from webber.adilger.int ([70.77.221.9]) by cmsmtp with ESMTP id iWcpqDHfQHFsOiWctqzzIi; Tue, 19 Sep 2023 09:02:36 +0000 X-Authority-Analysis: v=2.4 cv=XZqaca15 c=1 sm=1 tr=0 ts=650963ac a=2Y6h5+ypAxmHcsumz2f7Og==:117 a=2Y6h5+ypAxmHcsumz2f7Og==:17 a=pGLkceISAAAA:8 a=RPJ6JBhKAAAA:8 a=dfo8dvEvvyXEL6sKrXEA:9 a=fa_un-3J20JGBB2Tu-mn:22 From: Andreas Dilger To: tytso@mit.edu Cc: linux-ext4@vger.kernel.org, Alexey Lyashkov , Andreas Dilger Subject: [PATCH 2/7] [v2] lib: move journal checksum code to libsupport Date: Tue, 19 Sep 2023 03:02:22 -0600 Message-Id: <20230919090227.25363-2-adilger@dilger.ca> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230919090227.25363-1-adilger@dilger.ca> References: <20230919090227.25363-1-adilger@dilger.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4xfCFrFAH+z6isUIhskf+mF6rYn24YdyRjD9fBCpSvkCykdGjFYHE9qqrNcBfhGMsN86HBvgA9GFigoH7Frs2W519/0q2zI+1fO7zJqmJnHirlHIIIUWZ4 pqA3xAjTIysqglNgiJh+g+UwBrXmTOEBnhnVDmM+30rmHngYpO4pH+2a+CuJjrVhjMDGICT/eTXhT5UIgQYRBfVF33DrNedTqh0hKKt/gCW9gTQZi1DqqKaA YHw+oCh3q/fnuA5k0iFVfH6saNfAcL/sB669kB6EUJntrMutp+mW3IXr7Y6AB12i X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_PASS 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-ext4@vger.kernel.org From: Alexey Lyashkov e2fsck and debugfs have their own copy journal checksum functions, kill duplicates and move into support library. Signed-off-by: Alexey Lyashkov Reviewed-by: Andreas Dilger --- debugfs/journal.c | 50 ---------------------------------- e2fsck/journal.c | 60 ++++------------------------------------- lib/support/Android.bp | 1 + lib/support/Makefile.in | 4 +++ lib/support/jbd2_user.h | 6 +++++ 5 files changed, 16 insertions(+), 105 deletions(-) diff --git a/debugfs/journal.c b/debugfs/journal.c index 5bac0d3b..bf199699 100644 --- a/debugfs/journal.c +++ b/debugfs/journal.c @@ -43,56 +43,6 @@ static int bh_count = 0; */ #undef USE_INODE_IO -/* Checksumming functions */ -static int ext2fs_journal_verify_csum_type(journal_t *j, - journal_superblock_t *jsb) -{ - if (!jbd2_journal_has_csum_v2or3(j)) - return 1; - - return jsb->s_checksum_type == JBD2_CRC32C_CHKSUM; -} - -static __u32 ext2fs_journal_sb_csum(journal_superblock_t *jsb) -{ - __u32 crc, old_crc; - - old_crc = jsb->s_checksum; - jsb->s_checksum = 0; - crc = ext2fs_crc32c_le(~0, (unsigned char *)jsb, - sizeof(journal_superblock_t)); - jsb->s_checksum = old_crc; - - return crc; -} - -static int ext2fs_journal_sb_csum_verify(journal_t *j, - journal_superblock_t *jsb) -{ - __u32 provided, calculated; - - if (!jbd2_journal_has_csum_v2or3(j)) - return 1; - - provided = ext2fs_be32_to_cpu(jsb->s_checksum); - calculated = ext2fs_journal_sb_csum(jsb); - - return provided == calculated; -} - -static errcode_t ext2fs_journal_sb_csum_set(journal_t *j, - journal_superblock_t *jsb) -{ - __u32 crc; - - if (!jbd2_journal_has_csum_v2or3(j)) - return 0; - - crc = ext2fs_journal_sb_csum(jsb); - jsb->s_checksum = ext2fs_cpu_to_be32(crc); - return 0; -} - /* Kernel compatibility functions for handling the journal. These allow us * to use the recovery.c file virtually unchanged from the kernel, so we * don't have to do much to keep kernel and user recovery in sync. diff --git a/e2fsck/journal.c b/e2fsck/journal.c index 26927cde..bc3c699a 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -38,56 +38,6 @@ static int bh_count = 0; */ #undef USE_INODE_IO -/* Checksumming functions */ -static int e2fsck_journal_verify_csum_type(journal_t *j, - journal_superblock_t *jsb) -{ - if (!jbd2_journal_has_csum_v2or3(j)) - return 1; - - return jsb->s_checksum_type == JBD2_CRC32C_CHKSUM; -} - -static __u32 e2fsck_journal_sb_csum(journal_superblock_t *jsb) -{ - __u32 crc, old_crc; - - old_crc = jsb->s_checksum; - jsb->s_checksum = 0; - crc = ext2fs_crc32c_le(~0, (unsigned char *)jsb, - sizeof(journal_superblock_t)); - jsb->s_checksum = old_crc; - - return crc; -} - -static int e2fsck_journal_sb_csum_verify(journal_t *j, - journal_superblock_t *jsb) -{ - __u32 provided, calculated; - - if (!jbd2_journal_has_csum_v2or3(j)) - return 1; - - provided = ext2fs_be32_to_cpu(jsb->s_checksum); - calculated = e2fsck_journal_sb_csum(jsb); - - return provided == calculated; -} - -static errcode_t e2fsck_journal_sb_csum_set(journal_t *j, - journal_superblock_t *jsb) -{ - __u32 crc; - - if (!jbd2_journal_has_csum_v2or3(j)) - return 0; - - crc = e2fsck_journal_sb_csum(jsb); - jsb->s_checksum = ext2fs_cpu_to_be32(crc); - return 0; -} - /* Kernel compatibility functions for handling the journal. These allow us * to use the recovery.c file virtually unchanged from the kernel, so we * don't have to do much to keep kernel and user recovery in sync. @@ -1347,8 +1297,8 @@ static errcode_t e2fsck_journal_load(journal_t *journal) jbd2_has_feature_checksum(journal)) return EXT2_ET_CORRUPT_JOURNAL_SB; - if (!e2fsck_journal_verify_csum_type(journal, jsb) || - !e2fsck_journal_sb_csum_verify(journal, jsb)) + if (!ext2fs_journal_verify_csum_type(journal, jsb) || + !ext2fs_journal_sb_csum_verify(journal, jsb)) return EXT2_ET_CORRUPT_JOURNAL_SB; if (jbd2_journal_has_csum_v2or3(journal)) @@ -1436,7 +1386,7 @@ static void e2fsck_journal_reset_super(e2fsck_t ctx, journal_superblock_t *jsb, for (i = 0; i < 4; i ++) new_seq ^= u.val[i]; jsb->s_sequence = htonl(new_seq); - e2fsck_journal_sb_csum_set(journal, jsb); + ext2fs_journal_sb_csum_set(journal, jsb); mark_buffer_dirty(journal->j_sb_buffer); ll_rw_block(REQ_OP_WRITE, 0, 1, &journal->j_sb_buffer); @@ -1476,7 +1426,7 @@ static void e2fsck_journal_release(e2fsck_t ctx, journal_t *journal, jsb->s_sequence = htonl(journal->j_tail_sequence); if (reset) jsb->s_start = 0; /* this marks the journal as empty */ - e2fsck_journal_sb_csum_set(journal, jsb); + ext2fs_journal_sb_csum_set(journal, jsb); mark_buffer_dirty(journal->j_sb_buffer); } brelse(journal->j_sb_buffer); @@ -1619,7 +1569,7 @@ no_has_journal: ctx->fs->super->s_state |= EXT2_ERROR_FS; ext2fs_mark_super_dirty(ctx->fs); journal->j_superblock->s_errno = 0; - e2fsck_journal_sb_csum_set(journal, journal->j_superblock); + ext2fs_journal_sb_csum_set(journal, journal->j_superblock); mark_buffer_dirty(journal->j_sb_buffer); } diff --git a/lib/support/Android.bp b/lib/support/Android.bp index af9b28df..260f4b31 100644 --- a/lib/support/Android.bp +++ b/lib/support/Android.bp @@ -30,6 +30,7 @@ cc_library { "quotaio.c", "quotaio_tree.c", "quotaio_v2.c", + "jbd2_user.c" ], shared_libs: [ "libext2fs", diff --git a/lib/support/Makefile.in b/lib/support/Makefile.in index b6229091..284fde85 100644 --- a/lib/support/Makefile.in +++ b/lib/support/Makefile.in @@ -14,6 +14,7 @@ MKDIR_P = @MKDIR_P@ all:: OBJS= cstring.o \ + jbd2_user.o \ mkquota.o \ plausible.o \ profile.o \ @@ -29,6 +30,7 @@ OBJS= cstring.o \ SRCS= $(srcdir)/argv_parse.c \ $(srcdir)/cstring.c \ + $(srcdir)/jbd2_user.c \ $(srcdir)/mkquota.c \ $(srcdir)/parse_qtype.c \ $(srcdir)/plausible.c \ @@ -110,6 +112,8 @@ argv_parse.o: $(srcdir)/argv_parse.c $(top_builddir)/lib/config.h \ $(top_builddir)/lib/dirpaths.h $(srcdir)/argv_parse.h cstring.o: $(srcdir)/cstring.c $(top_builddir)/lib/config.h \ $(top_builddir)/lib/dirpaths.h $(srcdir)/cstring.h +jbd2_user.o: $(srcdir)/jbd2_user.c $(top_builddir)/lib/config.h \ + $(srcdir)/jbd2_user.h mkquota.o: $(srcdir)/mkquota.c $(top_builddir)/lib/config.h \ $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ diff --git a/lib/support/jbd2_user.h b/lib/support/jbd2_user.h index 5928a8a8..22f8cb7e 100644 --- a/lib/support/jbd2_user.h +++ b/lib/support/jbd2_user.h @@ -251,6 +251,12 @@ _INLINE_ void jbd2_descriptor_block_csum_set(journal_t *j, #undef _INLINE_ #endif +/* Checksumming functions */ +int ext2fs_journal_verify_csum_type(journal_t *j, journal_superblock_t *jsb); +__u32 ext2fs_journal_sb_csum(journal_superblock_t *jsb); +int ext2fs_journal_sb_csum_verify(journal_t *j, journal_superblock_t *jsb); +errcode_t ext2fs_journal_sb_csum_set(journal_t *j, journal_superblock_t *jsb); + /* * Kernel compatibility functions are defined in journal.c */ From patchwork Tue Sep 19 09:02:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Dilger X-Patchwork-Id: 1836556 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org (client-ip=150.107.74.76; helo=gandalf.ozlabs.org; envelope-from=srs0=zn4r=fd=vger.kernel.org=linux-ext4-owner@ozlabs.org; receiver=patchwork.ozlabs.org) Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RqbKL1nwFz1ync for ; Tue, 19 Sep 2023 19:02:46 +1000 (AEST) Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKL1H8Bz4xQS for ; Tue, 19 Sep 2023 19:02:46 +1000 (AEST) Received: by gandalf.ozlabs.org (Postfix) id 4RqbKL1Clyz4xQT; Tue, 19 Sep 2023 19:02:46 +1000 (AEST) Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: gandalf.ozlabs.org; dmarc=none (p=none dis=none) header.from=dilger.ca Authentication-Results: gandalf.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=ozlabs.org) Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKL16rbz4xQS for ; Tue, 19 Sep 2023 19:02:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231137AbjISJCu (ORCPT ); Tue, 19 Sep 2023 05:02:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60096 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231214AbjISJCq (ORCPT ); Tue, 19 Sep 2023 05:02:46 -0400 Received: from omta001.cacentral1.a.cloudfilter.net (omta001.cacentral1.a.cloudfilter.net [3.97.99.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E732A115 for ; Tue, 19 Sep 2023 02:02:40 -0700 (PDT) Received: from shw-obgw-4001a.ext.cloudfilter.net ([10.228.9.142]) by cmsmtp with ESMTP id i7dPqdL1vLAoIiWcyq8H68; Tue, 19 Sep 2023 09:02:40 +0000 Received: from webber.adilger.int ([70.77.221.9]) by cmsmtp with ESMTP id iWcpqDHfQHFsOiWcxqzzJ3; Tue, 19 Sep 2023 09:02:40 +0000 X-Authority-Analysis: v=2.4 cv=XZqaca15 c=1 sm=1 tr=0 ts=650963b0 a=2Y6h5+ypAxmHcsumz2f7Og==:117 a=2Y6h5+ypAxmHcsumz2f7Og==:17 a=pGLkceISAAAA:8 a=RPJ6JBhKAAAA:8 a=Po-VWPXRGcvJT5Xng5YA:9 a=fa_un-3J20JGBB2Tu-mn:22 From: Andreas Dilger To: tytso@mit.edu Cc: linux-ext4@vger.kernel.org, Alexey Lyashkov , Andreas Dilger Subject: [PATCH 3/7] [v2] lib: kill e2fsck use of ctx->journal_io Date: Tue, 19 Sep 2023 03:02:23 -0600 Message-Id: <20230919090227.25363-3-adilger@dilger.ca> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230919090227.25363-1-adilger@dilger.ca> References: <20230919090227.25363-1-adilger@dilger.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4xfANi6FL8tqIbIXxuuyvKkxOrv5EJXEHK658yStNbgq222pe+9mG4WfUpaYqpCqDwkaszumJ1McN+ukZeY88c6FMOQgcRoX/N2UlKn+Ba3sA+GuIsm4sh PYFGMHbMmrbP460Z4TRvz4gkj8FOE9TAaiaMJ2ztsqB/udJ/FVHeB/ei62qDFAa+JOhdhGarVJV0VG2K1kq7EU0HiRC6v8wv7bv/sBMx2pak/4k/rhrNSl3R /MfA6TI1XrR+MvQZ5I/eXZS1WJoAdSjAjvhvXmyS8+0pGN9kmT/BhfH2stKJurg5 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_PASS 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-ext4@vger.kernel.org From: Alexey Lyashkov Replace e2fsck-specific code with generic one to use fs->journal_io. Signed-off-by: Alexey Lyashkov Reviewed-by: Andreas Dilger --- debugfs/journal.c | 34 -------------------------- e2fsck/e2fsck.c | 6 +---- e2fsck/e2fsck.h | 1 - e2fsck/journal.c | 53 +++++++---------------------------------- lib/support/jbd2_user.h | 2 ++ 5 files changed, 11 insertions(+), 85 deletions(-) diff --git a/debugfs/journal.c b/debugfs/journal.c index bf199699..8c84be25 100644 --- a/debugfs/journal.c +++ b/debugfs/journal.c @@ -590,40 +590,6 @@ static errcode_t ext2fs_journal_load(journal_t *journal) return 0; } -static void ext2fs_journal_release(ext2_filsys fs, journal_t *journal, - int reset, int drop) -{ - journal_superblock_t *jsb; - - if (drop) - mark_buffer_clean(journal->j_sb_buffer); - else if (fs->flags & EXT2_FLAG_RW) { - jsb = journal->j_superblock; - jsb->s_sequence = htonl(journal->j_tail_sequence); - if (reset) - jsb->s_start = 0; /* this marks the journal as empty */ - ext2fs_journal_sb_csum_set(journal, jsb); - mark_buffer_dirty(journal->j_sb_buffer); - } - brelse(journal->j_sb_buffer); - - if (fs && fs->journal_io) { - if (fs->io != fs->journal_io) - io_channel_close(fs->journal_io); - fs->journal_io = NULL; - free(fs->journal_name); - fs->journal_name = NULL; - } - -#ifndef USE_INODE_IO - if (journal->j_inode) - ext2fs_free_mem(&journal->j_inode); -#endif - if (journal->j_fs_dev) - ext2fs_free_mem(&journal->j_fs_dev); - ext2fs_free_mem(&journal); -} - /* * This function makes sure that the superblock fields regarding the * journal are consistent. diff --git a/e2fsck/e2fsck.c b/e2fsck/e2fsck.c index 1e295e3e..421ef4a9 100644 --- a/e2fsck/e2fsck.c +++ b/e2fsck/e2fsck.c @@ -83,11 +83,7 @@ errcode_t e2fsck_reset_context(e2fsck_t ctx) ext2fs_free_icount(ctx->inode_link_info); ctx->inode_link_info = 0; } - if (ctx->journal_io) { - if (ctx->fs && ctx->fs->io != ctx->journal_io) - io_channel_close(ctx->journal_io); - ctx->journal_io = 0; - } + if (ctx->fs && ctx->fs->dblist) { ext2fs_free_dblist(ctx->fs->dblist); ctx->fs->dblist = 0; diff --git a/e2fsck/e2fsck.h b/e2fsck/e2fsck.h index b8caa43b..d9e24341 100644 --- a/e2fsck/e2fsck.h +++ b/e2fsck/e2fsck.h @@ -380,7 +380,6 @@ struct e2fsck_struct { /* * ext3 journal support */ - io_channel journal_io; char *journal_name; /* diff --git a/e2fsck/journal.c b/e2fsck/journal.c index bc3c699a..367ec31d 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -86,7 +86,7 @@ struct buffer_head *getblk(kdev_t kdev, unsigned long long blocknr, if (kdev->k_dev == K_DEV_FS) bh->b_io = kdev->k_ctx->fs->io; else - bh->b_io = kdev->k_ctx->journal_io; + bh->b_io = kdev->k_ctx->fs->journal_io; bh->b_size = blocksize; bh->b_blocknr = blocknr; @@ -100,7 +100,7 @@ int sync_blockdev(kdev_t kdev) if (kdev->k_dev == K_DEV_FS) io = kdev->k_ctx->fs->io; else - io = kdev->k_ctx->journal_io; + io = kdev->k_ctx->fs->journal_io; return io_channel_flush(io) ? -EIO : 0; } @@ -156,11 +156,6 @@ void mark_buffer_dirty(struct buffer_head *bh) bh->b_dirty = 1; } -static void mark_buffer_clean(struct buffer_head * bh) -{ - bh->b_dirty = 0; -} - void brelse(struct buffer_head *bh) { if (bh->b_dirty) @@ -1028,7 +1023,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) io_ptr = inode_io_manager; #else journal->j_inode = j_inode; - ctx->journal_io = ctx->fs->io; + ctx->fs->journal_io = ctx->fs->io; if ((ret = jbd2_journal_bmap(journal, 0, &start)) != 0) { retval = (errcode_t) (-1 * ret); goto errout; @@ -1075,12 +1070,12 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) retval = io_ptr->open(journal_name, flags, - &ctx->journal_io); + &ctx->fs->journal_io); } if (retval) goto errout; - io_channel_set_blksize(ctx->journal_io, ctx->fs->blocksize); + io_channel_set_blksize(ctx->fs->journal_io, ctx->fs->blocksize); if (ext_journal) { blk64_t maxlen; @@ -1414,38 +1409,6 @@ static errcode_t e2fsck_journal_fix_corrupt_super(e2fsck_t ctx, return 0; } -static void e2fsck_journal_release(e2fsck_t ctx, journal_t *journal, - int reset, int drop) -{ - journal_superblock_t *jsb; - - if (drop) - mark_buffer_clean(journal->j_sb_buffer); - else if (!(ctx->options & E2F_OPT_READONLY)) { - jsb = journal->j_superblock; - jsb->s_sequence = htonl(journal->j_tail_sequence); - if (reset) - jsb->s_start = 0; /* this marks the journal as empty */ - ext2fs_journal_sb_csum_set(journal, jsb); - mark_buffer_dirty(journal->j_sb_buffer); - } - brelse(journal->j_sb_buffer); - - if (ctx->journal_io) { - if (ctx->fs && ctx->fs->io != ctx->journal_io) - io_channel_close(ctx->journal_io); - ctx->journal_io = 0; - } - -#ifndef USE_INODE_IO - if (journal->j_inode) - ext2fs_free_mem(&journal->j_inode); -#endif - if (journal->j_fs_dev) - ext2fs_free_mem(&journal->j_fs_dev); - ext2fs_free_mem(&journal); -} - /* * This function makes sure that the superblock fields regarding the * journal are consistent. @@ -1492,7 +1455,7 @@ errcode_t e2fsck_check_ext3_journal(e2fsck_t ctx) (!fix_problem(ctx, PR_0_JOURNAL_UNSUPP_VERSION, &pctx)))) retval = e2fsck_journal_fix_corrupt_super(ctx, journal, &pctx); - e2fsck_journal_release(ctx, journal, 0, 1); + ext2fs_journal_release(ctx->fs, journal, 0, 1); return retval; } @@ -1573,7 +1536,7 @@ no_has_journal: mark_buffer_dirty(journal->j_sb_buffer); } - e2fsck_journal_release(ctx, journal, reset, 0); + ext2fs_journal_release(ctx->fs, journal, reset, 0); return retval; } @@ -1622,7 +1585,7 @@ errout: jbd2_journal_destroy_revoke(journal); jbd2_journal_destroy_revoke_record_cache(); jbd2_journal_destroy_revoke_table_cache(); - e2fsck_journal_release(ctx, journal, 1, 0); + ext2fs_journal_release(ctx->fs, journal, 1, 0); return retval; } diff --git a/lib/support/jbd2_user.h b/lib/support/jbd2_user.h index 22f8cb7e..e4316f58 100644 --- a/lib/support/jbd2_user.h +++ b/lib/support/jbd2_user.h @@ -256,6 +256,8 @@ int ext2fs_journal_verify_csum_type(journal_t *j, journal_superblock_t *jsb); __u32 ext2fs_journal_sb_csum(journal_superblock_t *jsb); int ext2fs_journal_sb_csum_verify(journal_t *j, journal_superblock_t *jsb); errcode_t ext2fs_journal_sb_csum_set(journal_t *j, journal_superblock_t *jsb); +void ext2fs_journal_release(ext2_filsys fs, journal_t *journal, int reset, + int drop); /* * Kernel compatibility functions are defined in journal.c From patchwork Tue Sep 19 09:02:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Dilger X-Patchwork-Id: 1836557 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org (client-ip=2404:9400:2221:ea00::3; helo=gandalf.ozlabs.org; envelope-from=srs0=zn4r=fd=vger.kernel.org=linux-ext4-owner@ozlabs.org; receiver=patchwork.ozlabs.org) Received: from gandalf.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RqbKP4Y7sz1ync for ; Tue, 19 Sep 2023 19:02:49 +1000 (AEST) Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKP44qJz4xQM for ; Tue, 19 Sep 2023 19:02:49 +1000 (AEST) Received: by gandalf.ozlabs.org (Postfix) id 4RqbKP3xpnz4xQS; Tue, 19 Sep 2023 19:02:49 +1000 (AEST) Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: gandalf.ozlabs.org; dmarc=none (p=none dis=none) header.from=dilger.ca Authentication-Results: gandalf.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=ozlabs.org) Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbKP3nJcz4xQM for ; Tue, 19 Sep 2023 19:02:49 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231271AbjISJCx (ORCPT ); Tue, 19 Sep 2023 05:02:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231167AbjISJCv (ORCPT ); Tue, 19 Sep 2023 05:02:51 -0400 Received: from omta001.cacentral1.a.cloudfilter.net (omta001.cacentral1.a.cloudfilter.net [3.97.99.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0A87102 for ; Tue, 19 Sep 2023 02:02:44 -0700 (PDT) Received: from shw-obgw-4001a.ext.cloudfilter.net ([10.228.9.142]) by cmsmtp with ESMTP id i7dPqdL1vLAoIiWd2q8H6K; Tue, 19 Sep 2023 09:02:44 +0000 Received: from webber.adilger.int ([70.77.221.9]) by cmsmtp with ESMTP id iWcpqDHfQHFsOiWd2qzzJX; Tue, 19 Sep 2023 09:02:44 +0000 X-Authority-Analysis: v=2.4 cv=XZqaca15 c=1 sm=1 tr=0 ts=650963b4 a=2Y6h5+ypAxmHcsumz2f7Og==:117 a=2Y6h5+ypAxmHcsumz2f7Og==:17 a=pGLkceISAAAA:8 a=RPJ6JBhKAAAA:8 a=r0t2UcEzMhTVQyylJSYA:9 a=fa_un-3J20JGBB2Tu-mn:22 From: Andreas Dilger To: tytso@mit.edu Cc: linux-ext4@vger.kernel.org, Alexey Lyashkov , Andreas Dilger Subject: [PATCH 4/7] [v2] lib: remove e2fsck context from bh emulation Date: Tue, 19 Sep 2023 03:02:24 -0600 Message-Id: <20230919090227.25363-4-adilger@dilger.ca> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230919090227.25363-1-adilger@dilger.ca> References: <20230919090227.25363-1-adilger@dilger.ca> MIME-Version: 1.0 X-CMAE-Envelope: MS4xfCsoIkiw6p8TqytgAVEZfhC3i9tNA8WnIu+XHvZ88eu+TAY+xZr9klkXPsdRPFIf3Gq+BbVDJwKVpHKD5N6MkoEcMpFYPGjDGmXPeBm6NKmp/OYjUJTZ 2b3G1rjgHxDLulupgK3i7iZrifZQOjJP623Chf2KQaM7L47X70L9Ggupzxa73yBTsN+rw3z4oi3zK2U6glHmYDDICywnKEn1crAVvKogAi7DWTeS4fLfCxTV uoPafHmrPq/Kl9bgOyGZjkxX72ij+AIck6A1wimNzk+JK0cgRWWNF2jIAyFQLgaf X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_PASS 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-ext4@vger.kernel.org From: Alexey Lyashkov In order to generalize journal handing, remove the e2fsck context from generic structures like buffer_head, and device. But fast commit code wants an e2fsck context as well, so move the context pointer to journal struct. Signed-off-by: Alexey Lyashkov Reviewed-by: Andreas Dilger --- e2fsck/journal.c | 46 ++++++++++++++++++++--------------------- lib/ext2fs/jfs_compat.h | 2 ++ lib/support/jbd2_user.h | 12 ----------- 3 files changed, 25 insertions(+), 35 deletions(-) diff --git a/e2fsck/journal.c b/e2fsck/journal.c index 367ec31d..d6129ed1 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -58,7 +58,7 @@ int jbd2_journal_bmap(journal_t *journal, unsigned long block, return 0; } - retval= ext2fs_bmap2(inode->i_ctx->fs, inode->i_ino, + retval= ext2fs_bmap2(inode->i_fs, inode->i_ino, &inode->i_ext2, NULL, 0, (blk64_t) block, 0, &pblk); *phys = pblk; @@ -70,11 +70,12 @@ struct buffer_head *getblk(kdev_t kdev, unsigned long long blocknr, int blocksize) { struct buffer_head *bh; - int bufsize = sizeof(*bh) + kdev->k_ctx->fs->blocksize - + int bufsize = sizeof(*bh) + kdev->k_fs->blocksize - sizeof(bh->b_data); + errcode_t retval; - bh = e2fsck_allocate_memory(kdev->k_ctx, bufsize, "block buffer"); - if (!bh) + retval = ext2fs_get_memzero(bufsize, &bh); + if (retval) return NULL; if (journal_enable_debug >= 3) @@ -82,11 +83,11 @@ struct buffer_head *getblk(kdev_t kdev, unsigned long long blocknr, jfs_debug(4, "getblk for block %llu (%d bytes)(total %d)\n", blocknr, blocksize, bh_count); - bh->b_ctx = kdev->k_ctx; + bh->b_fs = kdev->k_fs; if (kdev->k_dev == K_DEV_FS) - bh->b_io = kdev->k_ctx->fs->io; + bh->b_io = kdev->k_fs->io; else - bh->b_io = kdev->k_ctx->fs->journal_io; + bh->b_io = kdev->k_fs->journal_io; bh->b_size = blocksize; bh->b_blocknr = blocknr; @@ -98,9 +99,9 @@ int sync_blockdev(kdev_t kdev) io_channel io; if (kdev->k_dev == K_DEV_FS) - io = kdev->k_ctx->fs->io; + io = kdev->k_fs->io; else - io = kdev->k_ctx->fs->journal_io; + io = kdev->k_fs->journal_io; return io_channel_flush(io) ? -EIO : 0; } @@ -120,7 +121,7 @@ void ll_rw_block(int rw, int op_flags EXT2FS_ATTR((unused)), int nr, bh->b_blocknr, 1, bh->b_data); if (retval) { - com_err(bh->b_ctx->device_name, retval, + com_err(bh->b_fs->device_name, retval, "while reading block %llu\n", bh->b_blocknr); bh->b_err = (int) retval; @@ -135,7 +136,7 @@ void ll_rw_block(int rw, int op_flags EXT2FS_ATTR((unused)), int nr, bh->b_blocknr, 1, bh->b_data); if (retval) { - com_err(bh->b_ctx->device_name, retval, + com_err(bh->b_fs->device_name, retval, "while writing block %llu\n", bh->b_blocknr); bh->b_err = (int) retval; @@ -223,7 +224,7 @@ static int process_journal_block(ext2_filsys fs, static int ext4_fc_replay_scan(journal_t *j, struct buffer_head *bh, int off, tid_t expected_tid) { - e2fsck_t ctx = j->j_fs_dev->k_ctx; + e2fsck_t ctx = j->j_ctx; struct e2fsck_fc_replay_state *state; int ret = JBD2_FC_REPLAY_CONTINUE; struct ext4_fc_add_range ext; @@ -805,7 +806,7 @@ static int ext4_fc_handle_del_range(e2fsck_t ctx, __u8 *val) static int ext4_fc_replay(journal_t *journal, struct buffer_head *bh, enum passtype pass, int off, tid_t expected_tid) { - e2fsck_t ctx = journal->j_fs_dev->k_ctx; + e2fsck_t ctx = journal->j_ctx; struct e2fsck_fc_replay_state *state = &ctx->fc_replay_state; int ret = JBD2_FC_REPLAY_CONTINUE; struct ext4_fc_tl tl; @@ -933,10 +934,11 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) } dev_journal = dev_fs+1; - dev_fs->k_ctx = dev_journal->k_ctx = ctx; + dev_fs->k_fs = dev_journal->k_fs = ctx->fs; dev_fs->k_dev = K_DEV_FS; dev_journal->k_dev = K_DEV_JOURNAL; + journal->j_ctx = ctx; journal->j_dev = dev_journal; journal->j_fs_dev = dev_fs; journal->j_inode = NULL; @@ -961,7 +963,7 @@ static errcode_t e2fsck_get_journal(e2fsck_t ctx, journal_t **ret_journal) goto errout; } - j_inode->i_ctx = ctx; + j_inode->i_fs = ctx->fs; j_inode->i_ino = sb->s_journal_inum; if ((retval = ext2fs_read_inode(ctx->fs, @@ -1203,9 +1205,8 @@ static errcode_t e2fsck_journal_fix_bad_inode(e2fsck_t ctx, } #define V1_SB_SIZE 0x0024 -static void clear_v2_journal_fields(journal_t *journal) +static void clear_v2_journal_fields(e2fsck_t ctx, journal_t *journal) { - e2fsck_t ctx = journal->j_dev->k_ctx; struct problem_context pctx; clear_problem_context(&pctx); @@ -1220,9 +1221,8 @@ static void clear_v2_journal_fields(journal_t *journal) } -static errcode_t e2fsck_journal_load(journal_t *journal) +static errcode_t e2fsck_journal_load(e2fsck_t ctx, journal_t *journal) { - e2fsck_t ctx = journal->j_dev->k_ctx; journal_superblock_t *jsb; struct buffer_head *jbh = journal->j_sb_buffer; struct problem_context pctx; @@ -1248,14 +1248,14 @@ static errcode_t e2fsck_journal_load(journal_t *journal) jsb->s_feature_incompat || jsb->s_feature_ro_compat || jsb->s_nr_users) - clear_v2_journal_fields(journal); + clear_v2_journal_fields(ctx, journal); break; case JBD2_SUPERBLOCK_V2: journal->j_format_version = 2; if (ntohl(jsb->s_nr_users) > 1 && uuid_is_null(ctx->fs->super->s_journal_uuid)) - clear_v2_journal_fields(journal); + clear_v2_journal_fields(ctx, journal); if (ntohl(jsb->s_nr_users) > 1) { fix_problem(ctx, PR_0_JOURNAL_UNSUPP_MULTIFS, &pctx); return EXT2_ET_JOURNAL_UNSUPP_VERSION; @@ -1442,7 +1442,7 @@ errcode_t e2fsck_check_ext3_journal(e2fsck_t ctx) return retval; } - retval = e2fsck_journal_load(journal); + retval = e2fsck_journal_load(ctx, journal); if (retval) { if ((retval == EXT2_ET_CORRUPT_JOURNAL_SB) || ((retval == EXT2_ET_UNSUPP_FEATURE) && @@ -1560,7 +1560,7 @@ static errcode_t recover_ext3_journal(e2fsck_t ctx) if (retval) return retval; - retval = e2fsck_journal_load(journal); + retval = e2fsck_journal_load(ctx, journal); if (retval) goto errout; diff --git a/lib/ext2fs/jfs_compat.h b/lib/ext2fs/jfs_compat.h index 0e96b56c..938ee600 100644 --- a/lib/ext2fs/jfs_compat.h +++ b/lib/ext2fs/jfs_compat.h @@ -37,6 +37,7 @@ typedef struct kdev_s *kdev_t; struct buffer_head; struct inode; +struct e2fsck_struct; typedef unsigned int gfp_t; #define GFP_KERNEL 0 @@ -94,6 +95,7 @@ struct journal_s struct jbd2_revoke_table_s *j_revoke_table[2]; tid_t j_failed_commit; __u32 j_csum_seed; + struct e2fsck_struct * j_ctx; int (*j_fc_replay_callback)(struct journal_s *journal, struct buffer_head *bh, enum passtype pass, int off, diff --git a/lib/support/jbd2_user.h b/lib/support/jbd2_user.h index e4316f58..73473663 100644 --- a/lib/support/jbd2_user.h +++ b/lib/support/jbd2_user.h @@ -41,11 +41,7 @@ #endif struct buffer_head { -#ifdef DEBUGFS ext2_filsys b_fs; -#else - e2fsck_t b_ctx; -#endif io_channel b_io; int b_size; int b_err; @@ -56,21 +52,13 @@ struct buffer_head { }; struct inode { -#ifdef DEBUGFS ext2_filsys i_fs; -#else - e2fsck_t i_ctx; -#endif ext2_ino_t i_ino; struct ext2_inode i_ext2; }; struct kdev_s { -#ifdef DEBUGFS ext2_filsys k_fs; -#else - e2fsck_t k_ctx; -#endif int k_dev; }; From patchwork Tue Sep 19 09:09:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Dilger X-Patchwork-Id: 1836563 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=ozlabs.org (client-ip=2404:9400:2221:ea00::3; helo=gandalf.ozlabs.org; envelope-from=srs0=zn4r=fd=vger.kernel.org=linux-ext4-owner@ozlabs.org; receiver=patchwork.ozlabs.org) Received: from gandalf.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RqbTR1NGSz1yhR for ; Tue, 19 Sep 2023 19:09:47 +1000 (AEST) Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbTQ6yrBz4wxP for ; Tue, 19 Sep 2023 19:09:46 +1000 (AEST) Received: by gandalf.ozlabs.org (Postfix) id 4RqbTQ6wSYz4xQ2; Tue, 19 Sep 2023 19:09:46 +1000 (AEST) Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: gandalf.ozlabs.org; dmarc=none (p=none dis=none) header.from=dilger.ca Authentication-Results: gandalf.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2620:137:e000::1:20; helo=out1.vger.email; envelope-from=linux-ext4-owner@vger.kernel.org; receiver=ozlabs.org) Received: from out1.vger.email (out1.vger.email [IPv6:2620:137:e000::1:20]) by gandalf.ozlabs.org (Postfix) with ESMTP id 4RqbTQ34wTz4wxP for ; Tue, 19 Sep 2023 19:09:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230145AbjISJJu (ORCPT ); Tue, 19 Sep 2023 05:09:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229821AbjISJJq (ORCPT ); Tue, 19 Sep 2023 05:09:46 -0400 Received: from omta001.cacentral1.a.cloudfilter.net (omta001.cacentral1.a.cloudfilter.net [3.97.99.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E8C2CBA for ; Tue, 19 Sep 2023 02:09:39 -0700 (PDT) Received: from shw-obgw-4004a.ext.cloudfilter.net ([10.228.9.227]) by cmsmtp with ESMTP id iUiBqeSiWLAoIiWjjq8HJR; Tue, 19 Sep 2023 09:09:39 +0000 Received: from webber.adilger.int ([70.77.221.9]) by cmsmtp with ESMTP id iWjhqEziq3fOSiWjiqAHxS; Tue, 19 Sep 2023 09:09:39 +0000 X-Authority-Analysis: v=2.4 cv=J8G5USrS c=1 sm=1 tr=0 ts=65096553 a=2Y6h5+ypAxmHcsumz2f7Og==:117 a=2Y6h5+ypAxmHcsumz2f7Og==:17 a=pGLkceISAAAA:8 a=RPJ6JBhKAAAA:8 a=GiWcz6MfNhDLV59xR1kA:9 a=fa_un-3J20JGBB2Tu-mn:22 From: Andreas Dilger To: tytso@mit.edu Cc: linux-ext4@vger.kernel.org, Alexey Lyashkov , Andreas Dilger Subject: [PATCH 5/7] [v2] lib: deduplicate buffer_head/kernel emulation Date: Tue, 19 Sep 2023 03:09:31 -0600 Message-Id: <20230919090933.25567-1-adilger@dilger.ca> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CMAE-Envelope: MS4xfFNf+XYlraaCSOwcWcjBVUnqA/gwoTP0GS4pIyiwIuHwc1IHR1X/PONSPh/x54R4VUWXwtco3S9hnm29C1Hq1GGi6gZy/626K5XauC9AkACTTn7d3swA qDZQV+pDfAehPKDRo4RTmS1dT1kLdNOIiuP3/26wDhqf3oYNo3BGsGD+msrpVeqBS5C8a4OgZPktr5j2ZTneNzbT7ZBGMVMPqYa7KpypZ4XL3yK1Z+1AZvTH QDn9mR2exhoY0I6CW7EkYxMvRVgKPDM+CinFbFuH81BQBm2N/JrHzt3wDNoJkD9j X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_PASS 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-ext4@vger.kernel.org From: Alexey Lyashkov Move buffer_head and device code into libsupport to allow it to be shared between debugfs and e2fsck. Signed-off-by: Alexey Lyashkov Reviewed-by: Andreas Dilger --- debugfs/journal.c | 147 ---------------------------------------------- e2fsck/journal.c | 143 -------------------------------------------- 2 files changed, 290 deletions(-) diff --git a/debugfs/journal.c b/debugfs/journal.c index 8c84be25..6e8dec35 100644 --- a/debugfs/journal.c +++ b/debugfs/journal.c @@ -26,8 +26,6 @@ #include "uuid/uuid.h" #include "journal.h" -static int bh_count = 0; - #if EXT2_FLAT_INCLUDES #include "blkid.h" #else @@ -47,151 +45,6 @@ static int bh_count = 0; * to use the recovery.c file virtually unchanged from the kernel, so we * don't have to do much to keep kernel and user recovery in sync. */ -int jbd2_journal_bmap(journal_t *journal, unsigned long block, - unsigned long long *phys) -{ -#ifdef USE_INODE_IO - *phys = block; - return 0; -#else - struct inode *inode = journal->j_inode; - errcode_t retval; - blk64_t pblk; - - if (!inode) { - *phys = block; - return 0; - } - - retval = ext2fs_bmap2(inode->i_fs, inode->i_ino, - &inode->i_ext2, NULL, 0, (blk64_t) block, - 0, &pblk); - *phys = pblk; - return (int) retval; -#endif -} - -struct buffer_head *getblk(kdev_t kdev, unsigned long long blocknr, - int blocksize) -{ - struct buffer_head *bh; - int bufsize = sizeof(*bh) + kdev->k_fs->blocksize - - sizeof(bh->b_data); - errcode_t retval; - - retval = ext2fs_get_memzero(bufsize, &bh); - if (retval) - return NULL; - - if (journal_enable_debug >= 3) - bh_count++; - jfs_debug(4, "getblk for block %llu (%d bytes)(total %d)\n", - blocknr, blocksize, bh_count); - - bh->b_fs = kdev->k_fs; - if (kdev->k_dev == K_DEV_FS) - bh->b_io = kdev->k_fs->io; - else - bh->b_io = kdev->k_fs->journal_io; - bh->b_size = blocksize; - bh->b_blocknr = blocknr; - - return bh; -} - -int sync_blockdev(kdev_t kdev) -{ - io_channel io; - - if (kdev->k_dev == K_DEV_FS) - io = kdev->k_fs->io; - else - io = kdev->k_fs->journal_io; - - return io_channel_flush(io) ? EIO : 0; -} - -void ll_rw_block(int rw, int op_flags EXT2FS_ATTR((unused)), int nr, - struct buffer_head *bhp[]) -{ - errcode_t retval; - struct buffer_head *bh; - - for (; nr > 0; --nr) { - bh = *bhp++; - if (rw == REQ_OP_READ && !bh->b_uptodate) { - jfs_debug(3, "reading block %llu/%p\n", - bh->b_blocknr, (void *) bh); - retval = io_channel_read_blk64(bh->b_io, - bh->b_blocknr, - 1, bh->b_data); - if (retval) { - com_err(bh->b_fs->device_name, retval, - "while reading block %llu\n", - bh->b_blocknr); - bh->b_err = (int) retval; - continue; - } - bh->b_uptodate = 1; - } else if (rw == REQ_OP_WRITE && bh->b_dirty) { - jfs_debug(3, "writing block %llu/%p\n", - bh->b_blocknr, - (void *) bh); - retval = io_channel_write_blk64(bh->b_io, - bh->b_blocknr, - 1, bh->b_data); - if (retval) { - com_err(bh->b_fs->device_name, retval, - "while writing block %llu\n", - bh->b_blocknr); - bh->b_err = (int) retval; - continue; - } - bh->b_dirty = 0; - bh->b_uptodate = 1; - } else { - jfs_debug(3, "no-op %s for block %llu\n", - rw == REQ_OP_READ ? "read" : "write", - bh->b_blocknr); - } - } -} - -void mark_buffer_dirty(struct buffer_head *bh) -{ - bh->b_dirty = 1; -} - -static void mark_buffer_clean(struct buffer_head *bh) -{ - bh->b_dirty = 0; -} - -void brelse(struct buffer_head *bh) -{ - if (bh->b_dirty) - ll_rw_block(REQ_OP_WRITE, 0, 1, &bh); - jfs_debug(3, "freeing block %llu/%p (total %d)\n", - bh->b_blocknr, (void *) bh, --bh_count); - ext2fs_free_mem(&bh); -} - -int buffer_uptodate(struct buffer_head *bh) -{ - return bh->b_uptodate; -} - -void mark_buffer_uptodate(struct buffer_head *bh, int val) -{ - bh->b_uptodate = val; -} - -void wait_on_buffer(struct buffer_head *bh) -{ - if (!bh->b_uptodate) - ll_rw_block(REQ_OP_READ, 0, 1, &bh); -} - static void ext2fs_clear_recover(ext2_filsys fs, int error) { diff --git a/e2fsck/journal.c b/e2fsck/journal.c index d6129ed1..02251956 100644 --- a/e2fsck/journal.c +++ b/e2fsck/journal.c @@ -27,8 +27,6 @@ #include "problem.h" #include "uuid/uuid.h" -static int bh_count = 0; - /* * Define USE_INODE_IO to use the inode_io.c / fileio.c codepaths. * This creates a larger static binary, and a smaller binary using @@ -42,147 +40,6 @@ static int bh_count = 0; * to use the recovery.c file virtually unchanged from the kernel, so we * don't have to do much to keep kernel and user recovery in sync. */ -int jbd2_journal_bmap(journal_t *journal, unsigned long block, - unsigned long long *phys) -{ -#ifdef USE_INODE_IO - *phys = block; - return 0; -#else - struct inode *inode = journal->j_inode; - errcode_t retval; - blk64_t pblk; - - if (!inode) { - *phys = block; - return 0; - } - - retval= ext2fs_bmap2(inode->i_fs, inode->i_ino, - &inode->i_ext2, NULL, 0, (blk64_t) block, - 0, &pblk); - *phys = pblk; - return -1 * ((int) retval); -#endif -} - -struct buffer_head *getblk(kdev_t kdev, unsigned long long blocknr, - int blocksize) -{ - struct buffer_head *bh; - int bufsize = sizeof(*bh) + kdev->k_fs->blocksize - - sizeof(bh->b_data); - errcode_t retval; - - retval = ext2fs_get_memzero(bufsize, &bh); - if (retval) - return NULL; - - if (journal_enable_debug >= 3) - bh_count++; - jfs_debug(4, "getblk for block %llu (%d bytes)(total %d)\n", - blocknr, blocksize, bh_count); - - bh->b_fs = kdev->k_fs; - if (kdev->k_dev == K_DEV_FS) - bh->b_io = kdev->k_fs->io; - else - bh->b_io = kdev->k_fs->journal_io; - bh->b_size = blocksize; - bh->b_blocknr = blocknr; - - return bh; -} - -int sync_blockdev(kdev_t kdev) -{ - io_channel io; - - if (kdev->k_dev == K_DEV_FS) - io = kdev->k_fs->io; - else - io = kdev->k_fs->journal_io; - - return io_channel_flush(io) ? -EIO : 0; -} - -void ll_rw_block(int rw, int op_flags EXT2FS_ATTR((unused)), int nr, - struct buffer_head *bhp[]) -{ - errcode_t retval; - struct buffer_head *bh; - - for (; nr > 0; --nr) { - bh = *bhp++; - if (rw == REQ_OP_READ && !bh->b_uptodate) { - jfs_debug(3, "reading block %llu/%p\n", - bh->b_blocknr, (void *) bh); - retval = io_channel_read_blk64(bh->b_io, - bh->b_blocknr, - 1, bh->b_data); - if (retval) { - com_err(bh->b_fs->device_name, retval, - "while reading block %llu\n", - bh->b_blocknr); - bh->b_err = (int) retval; - continue; - } - bh->b_uptodate = 1; - } else if (rw == REQ_OP_WRITE && bh->b_dirty) { - jfs_debug(3, "writing block %llu/%p\n", - bh->b_blocknr, - (void *) bh); - retval = io_channel_write_blk64(bh->b_io, - bh->b_blocknr, - 1, bh->b_data); - if (retval) { - com_err(bh->b_fs->device_name, retval, - "while writing block %llu\n", - bh->b_blocknr); - bh->b_err = (int) retval; - continue; - } - bh->b_dirty = 0; - bh->b_uptodate = 1; - } else { - jfs_debug(3, "no-op %s for block %llu\n", - rw == REQ_OP_READ ? "read" : "write", - bh->b_blocknr); - } - } -} - -void mark_buffer_dirty(struct buffer_head *bh) -{ - bh->b_dirty = 1; -} - -void brelse(struct buffer_head *bh) -{ - if (bh->b_dirty) - ll_rw_block(REQ_OP_WRITE, 0, 1, &bh); - jfs_debug(3, "freeing block %llu/%p (total %d)\n", - bh->b_blocknr, (void *) bh, --bh_count); - ext2fs_free_mem(&bh); -} - -int buffer_uptodate(struct buffer_head *bh) -{ - return bh->b_uptodate; -} - -void mark_buffer_uptodate(struct buffer_head *bh, int val) -{ - bh->b_uptodate = val; -} - -void wait_on_buffer(struct buffer_head *bh) -{ - if (!bh->b_uptodate) - ll_rw_block(REQ_OP_READ, 0, 1, &bh); -} - - static void e2fsck_clear_recover(e2fsck_t ctx, int error) { ext2fs_clear_feature_journal_needs_recovery(ctx->fs->super);