Commit 7e56d9ea authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: remove xfs_buf parameter from inode scrub methods

Now that we no longer do raw inode buffer scrubbing, the bp parameter is
no longer used anywhere we're dealing with an inode, so remove it and
all the useless NULL parameters that go with it.
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
parent d0018ad8
...@@ -98,7 +98,7 @@ xfs_scrub_xattr_listent( ...@@ -98,7 +98,7 @@ xfs_scrub_xattr_listent(
if (flags & XFS_ATTR_INCOMPLETE) { if (flags & XFS_ATTR_INCOMPLETE) {
/* Incomplete attr key, just mark the inode for preening. */ /* Incomplete attr key, just mark the inode for preening. */
xfs_scrub_ino_set_preen(sx->sc, context->dp->i_ino, NULL); xfs_scrub_ino_set_preen(sx->sc, context->dp->i_ino);
return; return;
} }
......
...@@ -621,7 +621,7 @@ xfs_scrub_bmap( ...@@ -621,7 +621,7 @@ xfs_scrub_bmap(
goto out; goto out;
/* No CoW forks on non-reflink inodes/filesystems. */ /* No CoW forks on non-reflink inodes/filesystems. */
if (!xfs_is_reflink_inode(ip)) { if (!xfs_is_reflink_inode(ip)) {
xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino, NULL); xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino);
goto out; goto out;
} }
break; break;
...@@ -630,7 +630,7 @@ xfs_scrub_bmap( ...@@ -630,7 +630,7 @@ xfs_scrub_bmap(
goto out_check_rmap; goto out_check_rmap;
if (!xfs_sb_version_hasattr(&mp->m_sb) && if (!xfs_sb_version_hasattr(&mp->m_sb) &&
!xfs_sb_version_hasattr2(&mp->m_sb)) !xfs_sb_version_hasattr2(&mp->m_sb))
xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino, NULL); xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino);
break; break;
default: default:
ASSERT(whichfork == XFS_DATA_FORK); ASSERT(whichfork == XFS_DATA_FORK);
......
...@@ -213,12 +213,10 @@ xfs_scrub_block_set_preen( ...@@ -213,12 +213,10 @@ xfs_scrub_block_set_preen(
void void
xfs_scrub_ino_set_preen( xfs_scrub_ino_set_preen(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
xfs_ino_t ino, xfs_ino_t ino)
struct xfs_buf *bp)
{ {
sc->sm->sm_flags |= XFS_SCRUB_OFLAG_PREEN; sc->sm->sm_flags |= XFS_SCRUB_OFLAG_PREEN;
trace_xfs_scrub_ino_preen(sc, ino, bp ? bp->b_bn : 0, trace_xfs_scrub_ino_preen(sc, ino, __return_address);
__return_address);
} }
/* Record a corrupt block. */ /* Record a corrupt block. */
...@@ -249,22 +247,20 @@ xfs_scrub_block_xref_set_corrupt( ...@@ -249,22 +247,20 @@ xfs_scrub_block_xref_set_corrupt(
void void
xfs_scrub_ino_set_corrupt( xfs_scrub_ino_set_corrupt(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
xfs_ino_t ino, xfs_ino_t ino)
struct xfs_buf *bp)
{ {
sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT; sc->sm->sm_flags |= XFS_SCRUB_OFLAG_CORRUPT;
trace_xfs_scrub_ino_error(sc, ino, bp ? bp->b_bn : 0, __return_address); trace_xfs_scrub_ino_error(sc, ino, __return_address);
} }
/* Record a corruption while cross-referencing with an inode. */ /* Record a corruption while cross-referencing with an inode. */
void void
xfs_scrub_ino_xref_set_corrupt( xfs_scrub_ino_xref_set_corrupt(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
xfs_ino_t ino, xfs_ino_t ino)
struct xfs_buf *bp)
{ {
sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT; sc->sm->sm_flags |= XFS_SCRUB_OFLAG_XCORRUPT;
trace_xfs_scrub_ino_error(sc, ino, bp ? bp->b_bn : 0, __return_address); trace_xfs_scrub_ino_error(sc, ino, __return_address);
} }
/* Record corruption in a block indexed by a file fork. */ /* Record corruption in a block indexed by a file fork. */
...@@ -296,12 +292,10 @@ xfs_scrub_fblock_xref_set_corrupt( ...@@ -296,12 +292,10 @@ xfs_scrub_fblock_xref_set_corrupt(
void void
xfs_scrub_ino_set_warning( xfs_scrub_ino_set_warning(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
xfs_ino_t ino, xfs_ino_t ino)
struct xfs_buf *bp)
{ {
sc->sm->sm_flags |= XFS_SCRUB_OFLAG_WARNING; sc->sm->sm_flags |= XFS_SCRUB_OFLAG_WARNING;
trace_xfs_scrub_ino_warning(sc, ino, bp ? bp->b_bn : 0, trace_xfs_scrub_ino_warning(sc, ino, __return_address);
__return_address);
} }
/* Warn about a block indexed by a file fork that needs review. */ /* Warn about a block indexed by a file fork that needs review. */
......
...@@ -63,25 +63,22 @@ bool xfs_scrub_fblock_xref_process_error(struct xfs_scrub_context *sc, ...@@ -63,25 +63,22 @@ bool xfs_scrub_fblock_xref_process_error(struct xfs_scrub_context *sc,
void xfs_scrub_block_set_preen(struct xfs_scrub_context *sc, void xfs_scrub_block_set_preen(struct xfs_scrub_context *sc,
struct xfs_buf *bp); struct xfs_buf *bp);
void xfs_scrub_ino_set_preen(struct xfs_scrub_context *sc, xfs_ino_t ino, void xfs_scrub_ino_set_preen(struct xfs_scrub_context *sc, xfs_ino_t ino);
struct xfs_buf *bp);
void xfs_scrub_block_set_corrupt(struct xfs_scrub_context *sc, void xfs_scrub_block_set_corrupt(struct xfs_scrub_context *sc,
struct xfs_buf *bp); struct xfs_buf *bp);
void xfs_scrub_ino_set_corrupt(struct xfs_scrub_context *sc, xfs_ino_t ino, void xfs_scrub_ino_set_corrupt(struct xfs_scrub_context *sc, xfs_ino_t ino);
struct xfs_buf *bp);
void xfs_scrub_fblock_set_corrupt(struct xfs_scrub_context *sc, int whichfork, void xfs_scrub_fblock_set_corrupt(struct xfs_scrub_context *sc, int whichfork,
xfs_fileoff_t offset); xfs_fileoff_t offset);
void xfs_scrub_block_xref_set_corrupt(struct xfs_scrub_context *sc, void xfs_scrub_block_xref_set_corrupt(struct xfs_scrub_context *sc,
struct xfs_buf *bp); struct xfs_buf *bp);
void xfs_scrub_ino_xref_set_corrupt(struct xfs_scrub_context *sc, xfs_ino_t ino, void xfs_scrub_ino_xref_set_corrupt(struct xfs_scrub_context *sc,
struct xfs_buf *bp); xfs_ino_t ino);
void xfs_scrub_fblock_xref_set_corrupt(struct xfs_scrub_context *sc, void xfs_scrub_fblock_xref_set_corrupt(struct xfs_scrub_context *sc,
int whichfork, xfs_fileoff_t offset); int whichfork, xfs_fileoff_t offset);
void xfs_scrub_ino_set_warning(struct xfs_scrub_context *sc, xfs_ino_t ino, void xfs_scrub_ino_set_warning(struct xfs_scrub_context *sc, xfs_ino_t ino);
struct xfs_buf *bp);
void xfs_scrub_fblock_set_warning(struct xfs_scrub_context *sc, int whichfork, void xfs_scrub_fblock_set_warning(struct xfs_scrub_context *sc, int whichfork,
xfs_fileoff_t offset); xfs_fileoff_t offset);
......
...@@ -781,7 +781,7 @@ xfs_scrub_directory( ...@@ -781,7 +781,7 @@ xfs_scrub_directory(
/* Plausible size? */ /* Plausible size? */
if (sc->ip->i_d.di_size < xfs_dir2_sf_hdr_size(0)) { if (sc->ip->i_d.di_size < xfs_dir2_sf_hdr_size(0)) {
xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino, NULL); xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino);
goto out; goto out;
} }
......
...@@ -98,7 +98,6 @@ xfs_scrub_setup_inode( ...@@ -98,7 +98,6 @@ xfs_scrub_setup_inode(
STATIC void STATIC void
xfs_scrub_inode_extsize( xfs_scrub_inode_extsize(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
struct xfs_buf *bp,
struct xfs_dinode *dip, struct xfs_dinode *dip,
xfs_ino_t ino, xfs_ino_t ino,
uint16_t mode, uint16_t mode,
...@@ -149,7 +148,7 @@ xfs_scrub_inode_extsize( ...@@ -149,7 +148,7 @@ xfs_scrub_inode_extsize(
return; return;
bad: bad:
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} }
/* /*
...@@ -161,7 +160,6 @@ xfs_scrub_inode_extsize( ...@@ -161,7 +160,6 @@ xfs_scrub_inode_extsize(
STATIC void STATIC void
xfs_scrub_inode_cowextsize( xfs_scrub_inode_cowextsize(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
struct xfs_buf *bp,
struct xfs_dinode *dip, struct xfs_dinode *dip,
xfs_ino_t ino, xfs_ino_t ino,
uint16_t mode, uint16_t mode,
...@@ -205,14 +203,13 @@ xfs_scrub_inode_cowextsize( ...@@ -205,14 +203,13 @@ xfs_scrub_inode_cowextsize(
return; return;
bad: bad:
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} }
/* Make sure the di_flags make sense for the inode. */ /* Make sure the di_flags make sense for the inode. */
STATIC void STATIC void
xfs_scrub_inode_flags( xfs_scrub_inode_flags(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
struct xfs_buf *bp,
struct xfs_dinode *dip, struct xfs_dinode *dip,
xfs_ino_t ino, xfs_ino_t ino,
uint16_t mode, uint16_t mode,
...@@ -251,14 +248,13 @@ xfs_scrub_inode_flags( ...@@ -251,14 +248,13 @@ xfs_scrub_inode_flags(
return; return;
bad: bad:
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} }
/* Make sure the di_flags2 make sense for the inode. */ /* Make sure the di_flags2 make sense for the inode. */
STATIC void STATIC void
xfs_scrub_inode_flags2( xfs_scrub_inode_flags2(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
struct xfs_buf *bp,
struct xfs_dinode *dip, struct xfs_dinode *dip,
xfs_ino_t ino, xfs_ino_t ino,
uint16_t mode, uint16_t mode,
...@@ -295,14 +291,13 @@ xfs_scrub_inode_flags2( ...@@ -295,14 +291,13 @@ xfs_scrub_inode_flags2(
return; return;
bad: bad:
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} }
/* Scrub all the ondisk inode fields. */ /* Scrub all the ondisk inode fields. */
STATIC void STATIC void
xfs_scrub_dinode( xfs_scrub_dinode(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
struct xfs_buf *bp,
struct xfs_dinode *dip, struct xfs_dinode *dip,
xfs_ino_t ino) xfs_ino_t ino)
{ {
...@@ -333,7 +328,7 @@ xfs_scrub_dinode( ...@@ -333,7 +328,7 @@ xfs_scrub_dinode(
/* mode is recognized */ /* mode is recognized */
break; break;
default: default:
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
} }
...@@ -344,22 +339,22 @@ xfs_scrub_dinode( ...@@ -344,22 +339,22 @@ xfs_scrub_dinode(
* We autoconvert v1 inodes into v2 inodes on writeout, * We autoconvert v1 inodes into v2 inodes on writeout,
* so just mark this inode for preening. * so just mark this inode for preening.
*/ */
xfs_scrub_ino_set_preen(sc, ino, bp); xfs_scrub_ino_set_preen(sc, ino);
break; break;
case 2: case 2:
case 3: case 3:
if (dip->di_onlink != 0) if (dip->di_onlink != 0)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
if (dip->di_mode == 0 && sc->ip) if (dip->di_mode == 0 && sc->ip)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
if (dip->di_projid_hi != 0 && if (dip->di_projid_hi != 0 &&
!xfs_sb_version_hasprojid32bit(&mp->m_sb)) !xfs_sb_version_hasprojid32bit(&mp->m_sb))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
default: default:
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
return; return;
} }
...@@ -369,40 +364,40 @@ xfs_scrub_dinode( ...@@ -369,40 +364,40 @@ xfs_scrub_dinode(
*/ */
if (dip->di_uid == cpu_to_be32(-1U) || if (dip->di_uid == cpu_to_be32(-1U) ||
dip->di_gid == cpu_to_be32(-1U)) dip->di_gid == cpu_to_be32(-1U))
xfs_scrub_ino_set_warning(sc, ino, bp); xfs_scrub_ino_set_warning(sc, ino);
/* di_format */ /* di_format */
switch (dip->di_format) { switch (dip->di_format) {
case XFS_DINODE_FMT_DEV: case XFS_DINODE_FMT_DEV:
if (!S_ISCHR(mode) && !S_ISBLK(mode) && if (!S_ISCHR(mode) && !S_ISBLK(mode) &&
!S_ISFIFO(mode) && !S_ISSOCK(mode)) !S_ISFIFO(mode) && !S_ISSOCK(mode))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
case XFS_DINODE_FMT_LOCAL: case XFS_DINODE_FMT_LOCAL:
if (!S_ISDIR(mode) && !S_ISLNK(mode)) if (!S_ISDIR(mode) && !S_ISLNK(mode))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
case XFS_DINODE_FMT_EXTENTS: case XFS_DINODE_FMT_EXTENTS:
if (!S_ISREG(mode) && !S_ISDIR(mode) && !S_ISLNK(mode)) if (!S_ISREG(mode) && !S_ISDIR(mode) && !S_ISLNK(mode))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
case XFS_DINODE_FMT_BTREE: case XFS_DINODE_FMT_BTREE:
if (!S_ISREG(mode) && !S_ISDIR(mode)) if (!S_ISREG(mode) && !S_ISDIR(mode))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
case XFS_DINODE_FMT_UUID: case XFS_DINODE_FMT_UUID:
default: default:
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
} }
/* di_[amc]time.nsec */ /* di_[amc]time.nsec */
if (be32_to_cpu(dip->di_atime.t_nsec) >= NSEC_PER_SEC) if (be32_to_cpu(dip->di_atime.t_nsec) >= NSEC_PER_SEC)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
if (be32_to_cpu(dip->di_mtime.t_nsec) >= NSEC_PER_SEC) if (be32_to_cpu(dip->di_mtime.t_nsec) >= NSEC_PER_SEC)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
if (be32_to_cpu(dip->di_ctime.t_nsec) >= NSEC_PER_SEC) if (be32_to_cpu(dip->di_ctime.t_nsec) >= NSEC_PER_SEC)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
/* /*
* di_size. xfs_dinode_verify checks for things that screw up * di_size. xfs_dinode_verify checks for things that screw up
...@@ -411,19 +406,19 @@ xfs_scrub_dinode( ...@@ -411,19 +406,19 @@ xfs_scrub_dinode(
*/ */
isize = be64_to_cpu(dip->di_size); isize = be64_to_cpu(dip->di_size);
if (isize & (1ULL << 63)) if (isize & (1ULL << 63))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
/* Devices, fifos, and sockets must have zero size */ /* Devices, fifos, and sockets must have zero size */
if (!S_ISDIR(mode) && !S_ISREG(mode) && !S_ISLNK(mode) && isize != 0) if (!S_ISDIR(mode) && !S_ISREG(mode) && !S_ISLNK(mode) && isize != 0)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
/* Directories can't be larger than the data section size (32G) */ /* Directories can't be larger than the data section size (32G) */
if (S_ISDIR(mode) && (isize == 0 || isize >= XFS_DIR2_SPACE_SIZE)) if (S_ISDIR(mode) && (isize == 0 || isize >= XFS_DIR2_SPACE_SIZE))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
/* Symlinks can't be larger than SYMLINK_MAXLEN */ /* Symlinks can't be larger than SYMLINK_MAXLEN */
if (S_ISLNK(mode) && (isize == 0 || isize >= XFS_SYMLINK_MAXLEN)) if (S_ISLNK(mode) && (isize == 0 || isize >= XFS_SYMLINK_MAXLEN))
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
/* /*
* Warn if the running kernel can't handle the kinds of offsets * Warn if the running kernel can't handle the kinds of offsets
...@@ -432,7 +427,7 @@ xfs_scrub_dinode( ...@@ -432,7 +427,7 @@ xfs_scrub_dinode(
* overly large offsets, flag the inode for admin review. * overly large offsets, flag the inode for admin review.
*/ */
if (isize >= mp->m_super->s_maxbytes) if (isize >= mp->m_super->s_maxbytes)
xfs_scrub_ino_set_warning(sc, ino, bp); xfs_scrub_ino_set_warning(sc, ino);
/* di_nblocks */ /* di_nblocks */
if (flags2 & XFS_DIFLAG2_REFLINK) { if (flags2 & XFS_DIFLAG2_REFLINK) {
...@@ -447,15 +442,15 @@ xfs_scrub_dinode( ...@@ -447,15 +442,15 @@ xfs_scrub_dinode(
*/ */
if (be64_to_cpu(dip->di_nblocks) >= if (be64_to_cpu(dip->di_nblocks) >=
mp->m_sb.sb_dblocks + mp->m_sb.sb_rblocks) mp->m_sb.sb_dblocks + mp->m_sb.sb_rblocks)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} else { } else {
if (be64_to_cpu(dip->di_nblocks) >= mp->m_sb.sb_dblocks) if (be64_to_cpu(dip->di_nblocks) >= mp->m_sb.sb_dblocks)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} }
xfs_scrub_inode_flags(sc, bp, dip, ino, mode, flags); xfs_scrub_inode_flags(sc, dip, ino, mode, flags);
xfs_scrub_inode_extsize(sc, bp, dip, ino, mode, flags); xfs_scrub_inode_extsize(sc, dip, ino, mode, flags);
/* di_nextents */ /* di_nextents */
nextents = be32_to_cpu(dip->di_nextents); nextents = be32_to_cpu(dip->di_nextents);
...@@ -463,31 +458,31 @@ xfs_scrub_dinode( ...@@ -463,31 +458,31 @@ xfs_scrub_dinode(
switch (dip->di_format) { switch (dip->di_format) {
case XFS_DINODE_FMT_EXTENTS: case XFS_DINODE_FMT_EXTENTS:
if (nextents > fork_recs) if (nextents > fork_recs)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
case XFS_DINODE_FMT_BTREE: case XFS_DINODE_FMT_BTREE:
if (nextents <= fork_recs) if (nextents <= fork_recs)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
default: default:
if (nextents != 0) if (nextents != 0)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
} }
/* di_forkoff */ /* di_forkoff */
if (XFS_DFORK_APTR(dip) >= (char *)dip + mp->m_sb.sb_inodesize) if (XFS_DFORK_APTR(dip) >= (char *)dip + mp->m_sb.sb_inodesize)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
if (dip->di_anextents != 0 && dip->di_forkoff == 0) if (dip->di_anextents != 0 && dip->di_forkoff == 0)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
if (dip->di_forkoff == 0 && dip->di_aformat != XFS_DINODE_FMT_EXTENTS) if (dip->di_forkoff == 0 && dip->di_aformat != XFS_DINODE_FMT_EXTENTS)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
/* di_aformat */ /* di_aformat */
if (dip->di_aformat != XFS_DINODE_FMT_LOCAL && if (dip->di_aformat != XFS_DINODE_FMT_LOCAL &&
dip->di_aformat != XFS_DINODE_FMT_EXTENTS && dip->di_aformat != XFS_DINODE_FMT_EXTENTS &&
dip->di_aformat != XFS_DINODE_FMT_BTREE) dip->di_aformat != XFS_DINODE_FMT_BTREE)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
/* di_anextents */ /* di_anextents */
nextents = be16_to_cpu(dip->di_anextents); nextents = be16_to_cpu(dip->di_anextents);
...@@ -495,22 +490,22 @@ xfs_scrub_dinode( ...@@ -495,22 +490,22 @@ xfs_scrub_dinode(
switch (dip->di_aformat) { switch (dip->di_aformat) {
case XFS_DINODE_FMT_EXTENTS: case XFS_DINODE_FMT_EXTENTS:
if (nextents > fork_recs) if (nextents > fork_recs)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
case XFS_DINODE_FMT_BTREE: case XFS_DINODE_FMT_BTREE:
if (nextents <= fork_recs) if (nextents <= fork_recs)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
break; break;
default: default:
if (nextents != 0) if (nextents != 0)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} }
if (dip->di_version >= 3) { if (dip->di_version >= 3) {
if (be32_to_cpu(dip->di_crtime.t_nsec) >= NSEC_PER_SEC) if (be32_to_cpu(dip->di_crtime.t_nsec) >= NSEC_PER_SEC)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
xfs_scrub_inode_flags2(sc, bp, dip, ino, mode, flags, flags2); xfs_scrub_inode_flags2(sc, dip, ino, mode, flags, flags2);
xfs_scrub_inode_cowextsize(sc, bp, dip, ino, mode, flags, xfs_scrub_inode_cowextsize(sc, dip, ino, mode, flags,
flags2); flags2);
} }
} }
...@@ -579,18 +574,18 @@ xfs_scrub_inode_xref_bmap( ...@@ -579,18 +574,18 @@ xfs_scrub_inode_xref_bmap(
if (!xfs_scrub_should_check_xref(sc, &error, NULL)) if (!xfs_scrub_should_check_xref(sc, &error, NULL))
return; return;
if (nextents < be32_to_cpu(dip->di_nextents)) if (nextents < be32_to_cpu(dip->di_nextents))
xfs_scrub_ino_xref_set_corrupt(sc, sc->ip->i_ino, NULL); xfs_scrub_ino_xref_set_corrupt(sc, sc->ip->i_ino);
error = xfs_bmap_count_blocks(sc->tp, sc->ip, XFS_ATTR_FORK, error = xfs_bmap_count_blocks(sc->tp, sc->ip, XFS_ATTR_FORK,
&nextents, &acount); &nextents, &acount);
if (!xfs_scrub_should_check_xref(sc, &error, NULL)) if (!xfs_scrub_should_check_xref(sc, &error, NULL))
return; return;
if (nextents != be16_to_cpu(dip->di_anextents)) if (nextents != be16_to_cpu(dip->di_anextents))
xfs_scrub_ino_xref_set_corrupt(sc, sc->ip->i_ino, NULL); xfs_scrub_ino_xref_set_corrupt(sc, sc->ip->i_ino);
/* Check nblocks against the inode. */ /* Check nblocks against the inode. */
if (count + acount != be64_to_cpu(dip->di_nblocks)) if (count + acount != be64_to_cpu(dip->di_nblocks))
xfs_scrub_ino_xref_set_corrupt(sc, sc->ip->i_ino, NULL); xfs_scrub_ino_xref_set_corrupt(sc, sc->ip->i_ino);
} }
/* Cross-reference with the other btrees. */ /* Cross-reference with the other btrees. */
...@@ -634,8 +629,7 @@ xfs_scrub_inode_xref( ...@@ -634,8 +629,7 @@ xfs_scrub_inode_xref(
static void static void
xfs_scrub_inode_check_reflink_iflag( xfs_scrub_inode_check_reflink_iflag(
struct xfs_scrub_context *sc, struct xfs_scrub_context *sc,
xfs_ino_t ino, xfs_ino_t ino)
struct xfs_buf *bp)
{ {
struct xfs_mount *mp = sc->mp; struct xfs_mount *mp = sc->mp;
bool has_shared; bool has_shared;
...@@ -650,9 +644,9 @@ xfs_scrub_inode_check_reflink_iflag( ...@@ -650,9 +644,9 @@ xfs_scrub_inode_check_reflink_iflag(
XFS_INO_TO_AGBNO(mp, ino), &error)) XFS_INO_TO_AGBNO(mp, ino), &error))
return; return;
if (xfs_is_reflink_inode(sc->ip) && !has_shared) if (xfs_is_reflink_inode(sc->ip) && !has_shared)
xfs_scrub_ino_set_preen(sc, ino, bp); xfs_scrub_ino_set_preen(sc, ino);
else if (!xfs_is_reflink_inode(sc->ip) && has_shared) else if (!xfs_is_reflink_inode(sc->ip) && has_shared)
xfs_scrub_ino_set_corrupt(sc, ino, bp); xfs_scrub_ino_set_corrupt(sc, ino);
} }
/* Scrub an inode. */ /* Scrub an inode. */
...@@ -669,13 +663,13 @@ xfs_scrub_inode( ...@@ -669,13 +663,13 @@ xfs_scrub_inode(
* and a NULL inode, so flag the corruption error and return. * and a NULL inode, so flag the corruption error and return.
*/ */
if (!sc->ip) { if (!sc->ip) {
xfs_scrub_ino_set_corrupt(sc, sc->sm->sm_ino, NULL); xfs_scrub_ino_set_corrupt(sc, sc->sm->sm_ino);
return 0; return 0;
} }
/* Scrub the inode core. */ /* Scrub the inode core. */
xfs_inode_to_disk(sc->ip, &di, 0); xfs_inode_to_disk(sc->ip, &di, 0);
xfs_scrub_dinode(sc, NULL, &di, sc->ip->i_ino); xfs_scrub_dinode(sc, &di, sc->ip->i_ino);
if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT) if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
goto out; goto out;
...@@ -685,7 +679,7 @@ xfs_scrub_inode( ...@@ -685,7 +679,7 @@ xfs_scrub_inode(
* we scrubbed the dinode. * we scrubbed the dinode.
*/ */
if (S_ISREG(VFS_I(sc->ip)->i_mode)) if (S_ISREG(VFS_I(sc->ip)->i_mode))
xfs_scrub_inode_check_reflink_iflag(sc, sc->ip->i_ino, NULL); xfs_scrub_inode_check_reflink_iflag(sc, sc->ip->i_ino);
xfs_scrub_inode_xref(sc, sc->ip->i_ino, &di); xfs_scrub_inode_xref(sc, sc->ip->i_ino, &di);
out: out:
......
...@@ -219,7 +219,7 @@ xfs_scrub_quota( ...@@ -219,7 +219,7 @@ xfs_scrub_quota(
/* Look for problem extents. */ /* Look for problem extents. */
xfs_ilock(ip, XFS_ILOCK_EXCL); xfs_ilock(ip, XFS_ILOCK_EXCL);
if (ip->i_d.di_flags & XFS_DIFLAG_REALTIME) { if (ip->i_d.di_flags & XFS_DIFLAG_REALTIME) {
xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino, NULL); xfs_scrub_ino_set_corrupt(sc, sc->ip->i_ino);
goto out_unlock_inode; goto out_unlock_inode;
} }
max_dqid_off = ((xfs_dqid_t)-1) / qi->qi_dqperchunk; max_dqid_off = ((xfs_dqid_t)-1) / qi->qi_dqperchunk;
......
...@@ -116,8 +116,7 @@ xfs_scrub_xref_is_used_rt_space( ...@@ -116,8 +116,7 @@ xfs_scrub_xref_is_used_rt_space(
if (!xfs_scrub_should_check_xref(sc, &error, NULL)) if (!xfs_scrub_should_check_xref(sc, &error, NULL))
goto out_unlock; goto out_unlock;
if (is_free) if (is_free)
xfs_scrub_ino_xref_set_corrupt(sc, sc->mp->m_rbmip->i_ino, xfs_scrub_ino_xref_set_corrupt(sc, sc->mp->m_rbmip->i_ino);
NULL);
out_unlock: out_unlock:
xfs_iunlock(sc->mp->m_rbmip, XFS_ILOCK_SHARED | XFS_ILOCK_RTBITMAP); xfs_iunlock(sc->mp->m_rbmip, XFS_ILOCK_SHARED | XFS_ILOCK_RTBITMAP);
} }
...@@ -174,53 +174,32 @@ DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_error); ...@@ -174,53 +174,32 @@ DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_error);
DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_preen); DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_preen);
DECLARE_EVENT_CLASS(xfs_scrub_ino_error_class, DECLARE_EVENT_CLASS(xfs_scrub_ino_error_class,
TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, xfs_daddr_t daddr, TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, void *ret_ip),
void *ret_ip), TP_ARGS(sc, ino, ret_ip),
TP_ARGS(sc, ino, daddr, ret_ip),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(dev_t, dev) __field(dev_t, dev)
__field(xfs_ino_t, ino) __field(xfs_ino_t, ino)
__field(unsigned int, type) __field(unsigned int, type)
__field(xfs_agnumber_t, agno)
__field(xfs_agblock_t, bno)
__field(void *, ret_ip) __field(void *, ret_ip)
), ),
TP_fast_assign( TP_fast_assign(
xfs_fsblock_t fsbno;
xfs_agnumber_t agno;
xfs_agblock_t bno;
if (daddr) {
fsbno = XFS_DADDR_TO_FSB(sc->mp, daddr);
agno = XFS_FSB_TO_AGNO(sc->mp, fsbno);
bno = XFS_FSB_TO_AGBNO(sc->mp, fsbno);
} else {
agno = XFS_INO_TO_AGNO(sc->mp, ino);
bno = XFS_AGINO_TO_AGBNO(sc->mp,
XFS_INO_TO_AGINO(sc->mp, ino));
}
__entry->dev = sc->mp->m_super->s_dev; __entry->dev = sc->mp->m_super->s_dev;
__entry->ino = ino; __entry->ino = ino;
__entry->type = sc->sm->sm_type; __entry->type = sc->sm->sm_type;
__entry->agno = agno;
__entry->bno = bno;
__entry->ret_ip = ret_ip; __entry->ret_ip = ret_ip;
), ),
TP_printk("dev %d:%d ino 0x%llx type %u agno %u agbno %u ret_ip %pS", TP_printk("dev %d:%d ino 0x%llx type %u ret_ip %pS",
MAJOR(__entry->dev), MINOR(__entry->dev), MAJOR(__entry->dev), MINOR(__entry->dev),
__entry->ino, __entry->ino,
__entry->type, __entry->type,
__entry->agno,
__entry->bno,
__entry->ret_ip) __entry->ret_ip)
) )
#define DEFINE_SCRUB_INO_ERROR_EVENT(name) \ #define DEFINE_SCRUB_INO_ERROR_EVENT(name) \
DEFINE_EVENT(xfs_scrub_ino_error_class, name, \ DEFINE_EVENT(xfs_scrub_ino_error_class, name, \
TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, \ TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, \
xfs_daddr_t daddr, void *ret_ip), \ void *ret_ip), \
TP_ARGS(sc, ino, daddr, ret_ip)) TP_ARGS(sc, ino, ret_ip))
DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_error); DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_error);
DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_preen); DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_preen);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment