On 08 Apr 2021 at 06:31, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > Now that the scrub context stores a pointer to the file that was used to > invoke the scrub call, the struct xfs_inode pointer that we passed to > all the setup functions is no longer necessary. This is only ever used > if the caller wants us to scrub the metadata of the open file. > The changes made are straightforward. Reviewed-by: Chandan Babu R <chandanrlinux@xxxxxxxxx> > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- > fs/xfs/scrub/alloc.c | 5 ++-- > fs/xfs/scrub/attr.c | 5 ++-- > fs/xfs/scrub/bmap.c | 5 ++-- > fs/xfs/scrub/common.c | 13 ++++------- > fs/xfs/scrub/common.h | 53 +++++++++++++++++---------------------------- > fs/xfs/scrub/dir.c | 5 ++-- > fs/xfs/scrub/fscounters.c | 3 +-- > fs/xfs/scrub/ialloc.c | 5 ++-- > fs/xfs/scrub/inode.c | 5 ++-- > fs/xfs/scrub/parent.c | 5 ++-- > fs/xfs/scrub/quota.c | 5 ++-- > fs/xfs/scrub/refcount.c | 5 ++-- > fs/xfs/scrub/repair.c | 5 ++-- > fs/xfs/scrub/repair.h | 6 +++-- > fs/xfs/scrub/rmap.c | 5 ++-- > fs/xfs/scrub/rtbitmap.c | 5 ++-- > fs/xfs/scrub/scrub.c | 11 ++++----- > fs/xfs/scrub/scrub.h | 3 +-- > fs/xfs/scrub/symlink.c | 5 ++-- > 19 files changed, 61 insertions(+), 93 deletions(-) > > diff --git a/fs/xfs/scrub/alloc.c b/fs/xfs/scrub/alloc.c > index 73d924e47565..2720bd7fe53b 100644 > --- a/fs/xfs/scrub/alloc.c > +++ b/fs/xfs/scrub/alloc.c > @@ -21,10 +21,9 @@ > */ > int > xchk_setup_ag_allocbt( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > - return xchk_setup_ag_btree(sc, ip, false); > + return xchk_setup_ag_btree(sc, false); > } > > /* Free space btree scrubber. */ > diff --git a/fs/xfs/scrub/attr.c b/fs/xfs/scrub/attr.c > index 9faddb334a2c..552af0cf8482 100644 > --- a/fs/xfs/scrub/attr.c > +++ b/fs/xfs/scrub/attr.c > @@ -69,8 +69,7 @@ xchk_setup_xattr_buf( > /* Set us up to scrub an inode's extended attributes. */ > int > xchk_setup_xattr( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > int error; > > @@ -85,7 +84,7 @@ xchk_setup_xattr( > return error; > } > > - return xchk_setup_inode_contents(sc, ip, 0); > + return xchk_setup_inode_contents(sc, 0); > } > > /* Extended Attributes */ > diff --git a/fs/xfs/scrub/bmap.c b/fs/xfs/scrub/bmap.c > index 33559c3a4bc3..613e2aa7e4e7 100644 > --- a/fs/xfs/scrub/bmap.c > +++ b/fs/xfs/scrub/bmap.c > @@ -26,12 +26,11 @@ > /* Set us up with an inode's bmap. */ > int > xchk_setup_inode_bmap( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > int error; > > - error = xchk_get_inode(sc, ip); > + error = xchk_get_inode(sc); > if (error) > goto out; > > diff --git a/fs/xfs/scrub/common.c b/fs/xfs/scrub/common.c > index d8da0ea772bc..6457a6d7e867 100644 > --- a/fs/xfs/scrub/common.c > +++ b/fs/xfs/scrub/common.c > @@ -593,8 +593,7 @@ xchk_trans_alloc( > /* Set us up with a transaction and an empty context. */ > int > xchk_setup_fs( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > uint resblks; > > @@ -606,7 +605,6 @@ xchk_setup_fs( > int > xchk_setup_ag_btree( > struct xfs_scrub *sc, > - struct xfs_inode *ip, > bool force_log) > { > struct xfs_mount *mp = sc->mp; > @@ -624,7 +622,7 @@ xchk_setup_ag_btree( > return error; > } > > - error = xchk_setup_fs(sc, ip); > + error = xchk_setup_fs(sc); > if (error) > return error; > > @@ -652,11 +650,11 @@ xchk_checkpoint_log( > */ > int > xchk_get_inode( > - struct xfs_scrub *sc, > - struct xfs_inode *ip_in) > + struct xfs_scrub *sc) > { > struct xfs_imap imap; > struct xfs_mount *mp = sc->mp; > + struct xfs_inode *ip_in = XFS_I(file_inode(sc->filp)); > struct xfs_inode *ip = NULL; > int error; > > @@ -717,12 +715,11 @@ xchk_get_inode( > int > xchk_setup_inode_contents( > struct xfs_scrub *sc, > - struct xfs_inode *ip, > unsigned int resblks) > { > int error; > > - error = xchk_get_inode(sc, ip); > + error = xchk_get_inode(sc); > if (error) > return error; > > diff --git a/fs/xfs/scrub/common.h b/fs/xfs/scrub/common.h > index 5e2c6f693503..0410faf7d735 100644 > --- a/fs/xfs/scrub/common.h > +++ b/fs/xfs/scrub/common.h > @@ -72,48 +72,37 @@ bool xchk_should_check_xref(struct xfs_scrub *sc, int *error, > struct xfs_btree_cur **curpp); > > /* Setup functions */ > -int xchk_setup_fs(struct xfs_scrub *sc, struct xfs_inode *ip); > -int xchk_setup_ag_allocbt(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_ag_iallocbt(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_ag_rmapbt(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_ag_refcountbt(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_inode(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_inode_bmap(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_inode_bmap_data(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_directory(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_xattr(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_symlink(struct xfs_scrub *sc, > - struct xfs_inode *ip); > -int xchk_setup_parent(struct xfs_scrub *sc, > - struct xfs_inode *ip); > +int xchk_setup_fs(struct xfs_scrub *sc); > +int xchk_setup_ag_allocbt(struct xfs_scrub *sc); > +int xchk_setup_ag_iallocbt(struct xfs_scrub *sc); > +int xchk_setup_ag_rmapbt(struct xfs_scrub *sc); > +int xchk_setup_ag_refcountbt(struct xfs_scrub *sc); > +int xchk_setup_inode(struct xfs_scrub *sc); > +int xchk_setup_inode_bmap(struct xfs_scrub *sc); > +int xchk_setup_inode_bmap_data(struct xfs_scrub *sc); > +int xchk_setup_directory(struct xfs_scrub *sc); > +int xchk_setup_xattr(struct xfs_scrub *sc); > +int xchk_setup_symlink(struct xfs_scrub *sc); > +int xchk_setup_parent(struct xfs_scrub *sc); > #ifdef CONFIG_XFS_RT > -int xchk_setup_rt(struct xfs_scrub *sc, struct xfs_inode *ip); > +int xchk_setup_rt(struct xfs_scrub *sc); > #else > static inline int > -xchk_setup_rt(struct xfs_scrub *sc, struct xfs_inode *ip) > +xchk_setup_rt(struct xfs_scrub *sc) > { > return -ENOENT; > } > #endif > #ifdef CONFIG_XFS_QUOTA > -int xchk_setup_quota(struct xfs_scrub *sc, struct xfs_inode *ip); > +int xchk_setup_quota(struct xfs_scrub *sc); > #else > static inline int > -xchk_setup_quota(struct xfs_scrub *sc, struct xfs_inode *ip) > +xchk_setup_quota(struct xfs_scrub *sc) > { > return -ENOENT; > } > #endif > -int xchk_setup_fscounters(struct xfs_scrub *sc, struct xfs_inode *ip); > +int xchk_setup_fscounters(struct xfs_scrub *sc); > > void xchk_ag_free(struct xfs_scrub *sc, struct xchk_ag *sa); > int xchk_ag_init(struct xfs_scrub *sc, xfs_agnumber_t agno, > @@ -126,11 +115,9 @@ void xchk_ag_btcur_init(struct xfs_scrub *sc, struct xchk_ag *sa); > int xchk_count_rmap_ownedby_ag(struct xfs_scrub *sc, struct xfs_btree_cur *cur, > const struct xfs_owner_info *oinfo, xfs_filblks_t *blocks); > > -int xchk_setup_ag_btree(struct xfs_scrub *sc, struct xfs_inode *ip, > - bool force_log); > -int xchk_get_inode(struct xfs_scrub *sc, struct xfs_inode *ip_in); > -int xchk_setup_inode_contents(struct xfs_scrub *sc, struct xfs_inode *ip, > - unsigned int resblks); > +int xchk_setup_ag_btree(struct xfs_scrub *sc, bool force_log); > +int xchk_get_inode(struct xfs_scrub *sc); > +int xchk_setup_inode_contents(struct xfs_scrub *sc, unsigned int resblks); > void xchk_buffer_recheck(struct xfs_scrub *sc, struct xfs_buf *bp); > > /* > diff --git a/fs/xfs/scrub/dir.c b/fs/xfs/scrub/dir.c > index e7cc04b7454b..28dda391d5df 100644 > --- a/fs/xfs/scrub/dir.c > +++ b/fs/xfs/scrub/dir.c > @@ -22,10 +22,9 @@ > /* Set us up to scrub directories. */ > int > xchk_setup_directory( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > - return xchk_setup_inode_contents(sc, ip, 0); > + return xchk_setup_inode_contents(sc, 0); > } > > /* Directories */ > diff --git a/fs/xfs/scrub/fscounters.c b/fs/xfs/scrub/fscounters.c > index ec2064ed3c30..7b4386c78fbf 100644 > --- a/fs/xfs/scrub/fscounters.c > +++ b/fs/xfs/scrub/fscounters.c > @@ -116,8 +116,7 @@ xchk_fscount_warmup( > > int > xchk_setup_fscounters( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > struct xchk_fscounters *fsc; > int error; > diff --git a/fs/xfs/scrub/ialloc.c b/fs/xfs/scrub/ialloc.c > index 1644199c29a8..8d9f3fb0cd22 100644 > --- a/fs/xfs/scrub/ialloc.c > +++ b/fs/xfs/scrub/ialloc.c > @@ -29,10 +29,9 @@ > */ > int > xchk_setup_ag_iallocbt( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > - return xchk_setup_ag_btree(sc, ip, sc->flags & XCHK_TRY_HARDER); > + return xchk_setup_ag_btree(sc, sc->flags & XCHK_TRY_HARDER); > } > > /* Inode btree scrubber. */ > diff --git a/fs/xfs/scrub/inode.c b/fs/xfs/scrub/inode.c > index faf65eb5bd31..61f90b2c9430 100644 > --- a/fs/xfs/scrub/inode.c > +++ b/fs/xfs/scrub/inode.c > @@ -28,8 +28,7 @@ > */ > int > xchk_setup_inode( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > int error; > > @@ -37,7 +36,7 @@ xchk_setup_inode( > * Try to get the inode. If the verifiers fail, we try again > * in raw mode. > */ > - error = xchk_get_inode(sc, ip); > + error = xchk_get_inode(sc); > switch (error) { > case 0: > break; > diff --git a/fs/xfs/scrub/parent.c b/fs/xfs/scrub/parent.c > index 076c812ed18d..ab182a5cd0c0 100644 > --- a/fs/xfs/scrub/parent.c > +++ b/fs/xfs/scrub/parent.c > @@ -20,10 +20,9 @@ > /* Set us up to scrub parents. */ > int > xchk_setup_parent( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > - return xchk_setup_inode_contents(sc, ip, 0); > + return xchk_setup_inode_contents(sc, 0); > } > > /* Parent pointers */ > diff --git a/fs/xfs/scrub/quota.c b/fs/xfs/scrub/quota.c > index 343f96f48b82..acbb9839d42f 100644 > --- a/fs/xfs/scrub/quota.c > +++ b/fs/xfs/scrub/quota.c > @@ -37,8 +37,7 @@ xchk_quota_to_dqtype( > /* Set us up to scrub a quota. */ > int > xchk_setup_quota( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > xfs_dqtype_t dqtype; > int error; > @@ -53,7 +52,7 @@ xchk_setup_quota( > mutex_lock(&sc->mp->m_quotainfo->qi_quotaofflock); > if (!xfs_this_quota_on(sc->mp, dqtype)) > return -ENOENT; > - error = xchk_setup_fs(sc, ip); > + error = xchk_setup_fs(sc); > if (error) > return error; > sc->ip = xfs_quota_inode(sc->mp, dqtype); > diff --git a/fs/xfs/scrub/refcount.c b/fs/xfs/scrub/refcount.c > index dd672e6bbc75..744530a66c0c 100644 > --- a/fs/xfs/scrub/refcount.c > +++ b/fs/xfs/scrub/refcount.c > @@ -19,10 +19,9 @@ > */ > int > xchk_setup_ag_refcountbt( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > - return xchk_setup_ag_btree(sc, ip, false); > + return xchk_setup_ag_btree(sc, false); > } > > /* Reference count btree scrubber. */ > diff --git a/fs/xfs/scrub/repair.c b/fs/xfs/scrub/repair.c > index 61bc43418a2a..952c8eae16cb 100644 > --- a/fs/xfs/scrub/repair.c > +++ b/fs/xfs/scrub/repair.c > @@ -37,19 +37,18 @@ > */ > int > xrep_attempt( > - struct xfs_inode *ip, > struct xfs_scrub *sc) > { > int error = 0; > > - trace_xrep_attempt(ip, sc->sm, error); > + trace_xrep_attempt(XFS_I(file_inode(sc->filp)), sc->sm, error); > > xchk_ag_btcur_free(&sc->sa); > > /* Repair whatever's broken. */ > ASSERT(sc->ops->repair); > error = sc->ops->repair(sc); > - trace_xrep_done(ip, sc->sm, error); > + trace_xrep_done(XFS_I(file_inode(sc->filp)), sc->sm, error); > switch (error) { > case 0: > /* > diff --git a/fs/xfs/scrub/repair.h b/fs/xfs/scrub/repair.h > index fe77de01abe0..3bb152d52a07 100644 > --- a/fs/xfs/scrub/repair.h > +++ b/fs/xfs/scrub/repair.h > @@ -17,7 +17,7 @@ static inline int xrep_notsupported(struct xfs_scrub *sc) > > /* Repair helpers */ > > -int xrep_attempt(struct xfs_inode *ip, struct xfs_scrub *sc); > +int xrep_attempt(struct xfs_scrub *sc); > void xrep_failure(struct xfs_mount *mp); > int xrep_roll_ag_trans(struct xfs_scrub *sc); > bool xrep_ag_has_space(struct xfs_perag *pag, xfs_extlen_t nr_blocks, > @@ -64,8 +64,8 @@ int xrep_agi(struct xfs_scrub *sc); > > #else > > -static inline int xrep_attempt( > - struct xfs_inode *ip, > +static inline int > +xrep_attempt( > struct xfs_scrub *sc) > { > return -EOPNOTSUPP; > diff --git a/fs/xfs/scrub/rmap.c b/fs/xfs/scrub/rmap.c > index f4fcb4719f41..a4f17477c5d1 100644 > --- a/fs/xfs/scrub/rmap.c > +++ b/fs/xfs/scrub/rmap.c > @@ -21,10 +21,9 @@ > */ > int > xchk_setup_ag_rmapbt( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > - return xchk_setup_ag_btree(sc, ip, false); > + return xchk_setup_ag_btree(sc, false); > } > > /* Reverse-mapping scrubber. */ > diff --git a/fs/xfs/scrub/rtbitmap.c b/fs/xfs/scrub/rtbitmap.c > index 1fb12928d8ef..37c0e2266c85 100644 > --- a/fs/xfs/scrub/rtbitmap.c > +++ b/fs/xfs/scrub/rtbitmap.c > @@ -20,12 +20,11 @@ > /* Set us up with the realtime metadata locked. */ > int > xchk_setup_rt( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > int error; > > - error = xchk_setup_fs(sc, ip); > + error = xchk_setup_fs(sc); > if (error) > return error; > > diff --git a/fs/xfs/scrub/scrub.c b/fs/xfs/scrub/scrub.c > index 9f8be81baf16..3c893a2c9ac8 100644 > --- a/fs/xfs/scrub/scrub.c > +++ b/fs/xfs/scrub/scrub.c > @@ -468,8 +468,7 @@ xfs_scrub_metadata( > .agno = NULLAGNUMBER, > }, > }; > - struct xfs_inode *ip = XFS_I(file_inode(filp)); > - struct xfs_mount *mp = ip->i_mount; > + struct xfs_mount *mp = XFS_I(file_inode(filp))->i_mount; > int error = 0; > > sc.mp = mp; > @@ -477,7 +476,7 @@ xfs_scrub_metadata( > BUILD_BUG_ON(sizeof(meta_scrub_ops) != > (sizeof(struct xchk_meta_ops) * XFS_SCRUB_TYPE_NR)); > > - trace_xchk_start(ip, sm, error); > + trace_xchk_start(XFS_I(file_inode(filp)), sm, error); > > /* Forbidden if we are shut down or mounted norecovery. */ > error = -ESHUTDOWN; > @@ -507,7 +506,7 @@ xfs_scrub_metadata( > } > > /* Set up for the operation. */ > - error = sc.ops->setup(&sc, ip); > + error = sc.ops->setup(&sc); > if (error) > goto out_teardown; > > @@ -553,7 +552,7 @@ xfs_scrub_metadata( > * If it's broken, userspace wants us to fix it, and we haven't > * already tried to fix it, then attempt a repair. > */ > - error = xrep_attempt(ip, &sc); > + error = xrep_attempt(&sc); > if (error == -EAGAIN) { > /* > * Either the repair function succeeded or it couldn't > @@ -574,7 +573,7 @@ xfs_scrub_metadata( > out_teardown: > error = xchk_teardown(&sc, error); > out: > - trace_xchk_done(ip, sm, error); > + trace_xchk_done(XFS_I(file_inode(filp)), sm, error); > if (error == -EFSCORRUPTED || error == -EFSBADCRC) { > sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT; > error = 0; > diff --git a/fs/xfs/scrub/scrub.h b/fs/xfs/scrub/scrub.h > index 2a90642bac1a..389eb5217459 100644 > --- a/fs/xfs/scrub/scrub.h > +++ b/fs/xfs/scrub/scrub.h > @@ -18,8 +18,7 @@ enum xchk_type { > > struct xchk_meta_ops { > /* Acquire whatever resources are needed for the operation. */ > - int (*setup)(struct xfs_scrub *, > - struct xfs_inode *); > + int (*setup)(struct xfs_scrub *sc); > > /* Examine metadata for errors. */ > int (*scrub)(struct xfs_scrub *); > diff --git a/fs/xfs/scrub/symlink.c b/fs/xfs/scrub/symlink.c > index 8c1c3875b31d..ad7b85e248c7 100644 > --- a/fs/xfs/scrub/symlink.c > +++ b/fs/xfs/scrub/symlink.c > @@ -18,15 +18,14 @@ > /* Set us up to scrub a symbolic link. */ > int > xchk_setup_symlink( > - struct xfs_scrub *sc, > - struct xfs_inode *ip) > + struct xfs_scrub *sc) > { > /* Allocate the buffer without the inode lock held. */ > sc->buf = kvzalloc(XFS_SYMLINK_MAXLEN + 1, GFP_KERNEL); > if (!sc->buf) > return -ENOMEM; > > - return xchk_setup_inode_contents(sc, ip, 0); > + return xchk_setup_inode_contents(sc, 0); > } > > /* Symbolic links. */ -- chandan