mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* Copyright (C) 2019 Oracle. All Rights Reserved. |
|
* Author: Darrick J. Wong <[email protected]> |
|
*/ |
|
#ifndef __XFS_SCRUB_ATTR_H__ |
|
#define __XFS_SCRUB_ATTR_H__ |
|
|
|
/* |
|
* Temporary storage for online scrub and repair of extended attributes. |
|
*/ |
|
struct xchk_xattr_buf { |
|
/* Size of @buf, in bytes. */ |
|
size_t sz; |
|
|
|
/* |
|
* Memory buffer -- either used for extracting attr values while |
|
* walking the attributes; or for computing attr block bitmaps when |
|
* checking the attribute tree. |
|
* |
|
* 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. |
|
*/ |
|
uint8_t buf[0]; |
|
}; |
|
|
|
/* A place to store attribute values. */ |
|
static inline uint8_t * |
|
xchk_xattr_valuebuf( |
|
struct xfs_scrub *sc) |
|
{ |
|
struct xchk_xattr_buf *ab = sc->buf; |
|
|
|
return ab->buf; |
|
} |
|
|
|
/* A bitmap of space usage computed by walking an attr leaf block. */ |
|
static inline unsigned long * |
|
xchk_xattr_usedmap( |
|
struct xfs_scrub *sc) |
|
{ |
|
struct xchk_xattr_buf *ab = sc->buf; |
|
|
|
return (unsigned long *)ab->buf; |
|
} |
|
|
|
/* A bitmap of free space computed by walking attr leaf block free info. */ |
|
static inline unsigned long * |
|
xchk_xattr_freemap( |
|
struct xfs_scrub *sc) |
|
{ |
|
return xchk_xattr_usedmap(sc) + |
|
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); |
|
} |
|
|
|
int xchk_setup_xattr_buf(struct xfs_scrub *sc, size_t value_size, |
|
xfs_km_flags_t flags); |
|
|
|
#endif /* __XFS_SCRUB_ATTR_H__ */
|
|
|