summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2022-08-04 11:52:16 -0700
committerDarrick J. Wong <djwong@kernel.org>2022-11-09 19:07:19 -0800
commit3ea5f9859160ac93dfdfa1dd442c7c6828de3f38 (patch)
tree5e35e4a5ed9c296f09529a1bd02879a8692d2abe
parentee8208961e06e1f09c3452f376e1973b665d053a (diff)
xfs: remove unnecessary dstmap in xattr scrubber
Replace bitmap_and with bitmap_intersects in the xattr leaf block scrubber, since we only care if there's overlap between the used space bitmap and the free space bitmap. This means we don't need dstmap any more, and can thus reduce the memory requirements. Signed-off-by: Darrick J. Wong <djwong@kernel.org>
-rw-r--r--fs/xfs/scrub/attr.c7
-rw-r--r--fs/xfs/scrub/attr.h12
2 files changed, 4 insertions, 15 deletions
diff --git a/fs/xfs/scrub/attr.c b/fs/xfs/scrub/attr.c
index 7ca490d8ceba..e7c8fec3d453 100644
--- a/fs/xfs/scrub/attr.c
+++ b/fs/xfs/scrub/attr.c
@@ -36,10 +36,10 @@ xchk_setup_xattr_buf(
/*
* We need enough space to read an xattr value from the file or enough
- * space to hold three copies of the xattr free space bitmap. We don't
+ * space to hold two copies of the xattr free space bitmap. We don't
* need the buffer space for both purposes at the same time.
*/
- sz = 3 * sizeof(long) * BITS_TO_LONGS(sc->mp->m_attr_geo->blksize);
+ sz = 2 * sizeof(long) * BITS_TO_LONGS(sc->mp->m_attr_geo->blksize);
sz = max_t(size_t, sz, value_size);
/*
@@ -217,7 +217,6 @@ xchk_xattr_check_freemap(
struct xfs_attr3_icleaf_hdr *leafhdr)
{
unsigned long *freemap = xchk_xattr_freemap(sc);
- unsigned long *dstmap = xchk_xattr_dstmap(sc);
unsigned int mapsize = sc->mp->m_attr_geo->blksize;
int i;
@@ -231,7 +230,7 @@ xchk_xattr_check_freemap(
}
/* Look for bits that are set in freemap and are marked in use. */
- return bitmap_and(dstmap, freemap, map, mapsize) == 0;
+ return !bitmap_intersects(freemap, map, mapsize);
}
/*
diff --git a/fs/xfs/scrub/attr.h b/fs/xfs/scrub/attr.h
index 3590e10e3e62..be133e0da71b 100644
--- a/fs/xfs/scrub/attr.h
+++ b/fs/xfs/scrub/attr.h
@@ -21,8 +21,7 @@ struct xchk_xattr_buf {
* Each bitmap contains enough bits to track every byte in an attr
* block (rounded up to the size of an unsigned long). The attr block
* used space bitmap starts at the beginning of the buffer; the free
- * space bitmap follows immediately after; and we have a third buffer
- * for storing intermediate bitmap results.
+ * space bitmap follows immediately after.
*/
uint8_t buf[];
};
@@ -56,13 +55,4 @@ xchk_xattr_freemap(
BITS_TO_LONGS(sc->mp->m_attr_geo->blksize);
}
-/* A bitmap used to hold temporary results. */
-static inline unsigned long *
-xchk_xattr_dstmap(
- struct xfs_scrub *sc)
-{
- return xchk_xattr_freemap(sc) +
- BITS_TO_LONGS(sc->mp->m_attr_geo->blksize);
-}
-
#endif /* __XFS_SCRUB_ATTR_H__ */