mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 00:04:15 +08:00
66da11280f
Back in commit a55e073088
("xfs: only allow reaping of per-AG
blocks in xrep_reap_extents"), we removed from the reaping code the
ability to handle bmbt blocks. At the time, the reaping code only
walked single blocks, didn't correctly detect crosslinked blocks, and
the special casing made the function hard to understand. It was easier
to remove unneeded functionality prior to fixing all the bugs.
Now that we've fixed the problems, we want again the ability to reap
file metadata blocks. Reintroduce the per-file reaping functionality
atop the current implementation. We require that sc->sa is
uninitialized, so that we can use it to hold all the per-AG context for
a given extent.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
38 lines
911 B
C
38 lines
911 B
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Copyright (C) 2018-2023 Oracle. All Rights Reserved.
|
|
* Author: Darrick J. Wong <djwong@kernel.org>
|
|
*/
|
|
#ifndef __XFS_SCRUB_FSB_BITMAP_H__
|
|
#define __XFS_SCRUB_FSB_BITMAP_H__
|
|
|
|
/* Bitmaps, but for type-checked for xfs_fsblock_t */
|
|
|
|
struct xfsb_bitmap {
|
|
struct xbitmap64 fsbitmap;
|
|
};
|
|
|
|
static inline void xfsb_bitmap_init(struct xfsb_bitmap *bitmap)
|
|
{
|
|
xbitmap64_init(&bitmap->fsbitmap);
|
|
}
|
|
|
|
static inline void xfsb_bitmap_destroy(struct xfsb_bitmap *bitmap)
|
|
{
|
|
xbitmap64_destroy(&bitmap->fsbitmap);
|
|
}
|
|
|
|
static inline int xfsb_bitmap_set(struct xfsb_bitmap *bitmap,
|
|
xfs_fsblock_t start, xfs_filblks_t len)
|
|
{
|
|
return xbitmap64_set(&bitmap->fsbitmap, start, len);
|
|
}
|
|
|
|
static inline int xfsb_bitmap_walk(struct xfsb_bitmap *bitmap,
|
|
xbitmap64_walk_fn fn, void *priv)
|
|
{
|
|
return xbitmap64_walk(&bitmap->fsbitmap, fn, priv);
|
|
}
|
|
|
|
#endif /* __XFS_SCRUB_FSB_BITMAP_H__ */
|