[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <734A1725-FA62-47F2-845E-9F49D74E7661@dilger.ca>
Date: Mon, 18 Sep 2023 17:43:26 -0600
From: Andreas Dilger <adilger@...ger.ca>
To: Alexey Lyashkov <alexey.lyashkov@...il.com>
Cc: Ext4 Developers List <linux-ext4@...r.kernel.org>,
Theodore Ts'o <tytso@....edu>,
Artem Blagodarenko <artem.blagodarenko@...il.com>
Subject: Re: [PATCH 3/5] kill a ctx->journal_io
On Aug 4, 2022, at 3:56 AM, Alexey Lyashkov <alexey.lyashkov@...il.com> wrote:
>
> replace a e2fsck own code, with generic one to use
> an fs->journal_io.
Missing Signed-off-by: line, but otherwise looks fine.
Reviewed-by: Andreas Dilger <adilger@...ger.ca>
> ---
> debugfs/journal.c | 34 ---------------------------
> e2fsck/e2fsck.c | 6 +----
> e2fsck/e2fsck.h | 1 -
> e2fsck/journal.c | 53 +++++++-----------------------------------
> lib/support/jfs_user.c | 39 +++++++++++++++++++++++++++++++
> lib/support/jfs_user.h | 2 ++
> 6 files changed, 50 insertions(+), 85 deletions(-)
>
> diff --git a/debugfs/journal.c b/debugfs/journal.c
> index dac17800..202312fe 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 2db216f5..33334781 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 46a9bcb7..682d82a4 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)
> @@ -1011,7 +1006,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;
> @@ -1058,12 +1053,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;
> @@ -1397,38 +1392,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.
> @@ -1475,7 +1438,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;
> }
>
> @@ -1556,7 +1519,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;
> }
>
> @@ -1605,7 +1568,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/jfs_user.c b/lib/support/jfs_user.c
> index 4ff1b5c1..d8a2f842 100644
> --- a/lib/support/jfs_user.c
> +++ b/lib/support/jfs_user.c
> @@ -60,3 +60,42 @@ errcode_t ext2fs_journal_sb_csum_set(journal_t *j,
> return 0;
> }
>
> +
> +static void mark_buffer_clean(struct buffer_head * bh)
> +{
> + bh->b_dirty = 0;
> +}
> +
> +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);
> +}
> diff --git a/lib/support/jfs_user.h b/lib/support/jfs_user.h
> index 8bdbf85b..b9c2fa54 100644
> --- a/lib/support/jfs_user.h
> +++ b/lib/support/jfs_user.h
> @@ -217,6 +217,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
> --
> 2.31.1
>
Cheers, Andreas
Download attachment "signature.asc" of type "application/pgp-signature" (874 bytes)
Powered by blists - more mailing lists