diff options
| author | Darrick J. Wong <djwong@kernel.org> | 2023-10-16 09:49:01 -0700 |
|---|---|---|
| committer | Darrick J. Wong <djwong@kernel.org> | 2023-10-18 11:46:19 -0700 |
| commit | 97e993830a1cdd86ad7d207308b9f55a00660edd (patch) | |
| tree | 36f4292ce96f5a738de9cb50bad045c6e42bb004 /fs/xfs/libxfs/xfs_rtbitmap.h | |
| parent | 312d61021b8947446aa9ec80b78b9230e8cb3691 (diff) | |
xfs: use accessor functions for bitmap words
Create get and set functions for rtbitmap words so that we can redefine
the ondisk format with a specific endianness. Note that this requires
the definition of a distinct type for ondisk rtbitmap words so that the
compiler can perform proper typechecking as we go back and forth.
In the upcoming rtgroups feature, we're going to fix the problem that
rtwords are written in host endian order, which means we'll need the
distinct rtword/rtword_raw types.
Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/xfs/libxfs/xfs_rtbitmap.h')
| -rw-r--r-- | fs/xfs/libxfs/xfs_rtbitmap.h | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/fs/xfs/libxfs/xfs_rtbitmap.h b/fs/xfs/libxfs/xfs_rtbitmap.h index 01eabb9b5516..ede24de74620 100644 --- a/fs/xfs/libxfs/xfs_rtbitmap.h +++ b/fs/xfs/libxfs/xfs_rtbitmap.h @@ -159,16 +159,39 @@ xfs_rbmblock_to_rtx( } /* Return a pointer to a bitmap word within a rt bitmap block. */ -static inline xfs_rtword_t * +static inline union xfs_rtword_raw * xfs_rbmblock_wordptr( struct xfs_buf *bp, unsigned int index) { - xfs_rtword_t *words = bp->b_addr; + union xfs_rtword_raw *words = bp->b_addr; return words + index; } +/* Convert an ondisk bitmap word to its incore representation. */ +static inline xfs_rtword_t +xfs_rtbitmap_getword( + struct xfs_buf *bp, + unsigned int index) +{ + union xfs_rtword_raw *word = xfs_rbmblock_wordptr(bp, index); + + return word->old; +} + +/* Set an ondisk bitmap word from an incore representation. */ +static inline void +xfs_rtbitmap_setword( + struct xfs_buf *bp, + unsigned int index, + xfs_rtword_t value) +{ + union xfs_rtword_raw *word = xfs_rbmblock_wordptr(bp, index); + + word->old = value; +} + /* * Convert a rt extent length and rt bitmap block number to a xfs_suminfo_t * offset within the rt summary file. |