On Aug 4, 2022, at 3:56 AM, Alexey Lyashkov <alexey.lyashkov@xxxxxxxxx> wrote: > > In order to generalize a journal handing, remove a e2fsck context > from generic structures like buffer_head, and device. > But fast commit code want a e2fsck context as well, so move it pointer > to journal struct. Missing Signed-off-by: line. Reviewed-by: Andreas Dilger <adilger@xxxxxxxxx> > --- > e2fsck/journal.c | 46 ++++++++++++++++++++--------------------- > lib/ext2fs/jfs_compat.h | 2 ++ > lib/support/jfs_user.h | 12 ----------- > 3 files changed, 25 insertions(+), 35 deletions(-) > > diff --git a/e2fsck/journal.c b/e2fsck/journal.c > index 682d82a4..728f5a24 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; > @@ -796,7 +797,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; > @@ -924,10 +925,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; > @@ -945,7 +947,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, > @@ -1186,9 +1188,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); > @@ -1203,9 +1204,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; > @@ -1231,14 +1231,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; > @@ -1425,7 +1425,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) && > @@ -1543,7 +1543,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 e11cf494..bfafae12 100644 > --- a/lib/ext2fs/jfs_compat.h > +++ b/lib/ext2fs/jfs_compat.h > @@ -41,6 +41,7 @@ typedef struct kdev_s *kdev_t; > > struct buffer_head; > struct inode; > +struct e2fsck_struct; > > typedef unsigned int gfp_t; > #define GFP_KERNEL 0 > @@ -98,6 +99,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/jfs_user.h b/lib/support/jfs_user.h > index b9c2fa54..bb392811 100644 > --- a/lib/support/jfs_user.h > +++ b/lib/support/jfs_user.h > @@ -40,11 +40,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; > @@ -55,21 +51,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; > }; > > -- > 2.31.1 > Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP