xfs: rename buffer cache index variable b_bn

To stop external users from using b_bn as the disk address of the
buffer, rename it to b_rhash_key to indicate that it is the buffer
cache index, not the block number of the buffer. Code that needs the
disk address should use xfs_buf_daddr() to obtain it.

Do the rename and clean up any of the remaining internal b_bn users.
Also clean up any remaining b_bn cruft that is now unused.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
Dave Chinner 2021-08-18 18:48:54 -07:00 committed by Darrick J. Wong
parent 9343ee7690
commit 4c7f65aea7
2 changed files with 12 additions and 25 deletions

View File

@ -251,7 +251,7 @@ _xfs_buf_alloc(
return error; return error;
} }
bp->b_bn = map[0].bm_bn; bp->b_rhash_key = map[0].bm_bn;
bp->b_length = 0; bp->b_length = 0;
for (i = 0; i < nmaps; i++) { for (i = 0; i < nmaps; i++) {
bp->b_maps[i].bm_bn = map[i].bm_bn; bp->b_maps[i].bm_bn = map[i].bm_bn;
@ -459,7 +459,7 @@ _xfs_buf_obj_cmp(
*/ */
BUILD_BUG_ON(offsetof(struct xfs_buf_map, bm_bn) != 0); BUILD_BUG_ON(offsetof(struct xfs_buf_map, bm_bn) != 0);
if (bp->b_bn != map->bm_bn) if (bp->b_rhash_key != map->bm_bn)
return 1; return 1;
if (unlikely(bp->b_length != map->bm_len)) { if (unlikely(bp->b_length != map->bm_len)) {
@ -481,7 +481,7 @@ static const struct rhashtable_params xfs_buf_hash_params = {
.min_size = 32, /* empty AGs have minimal footprint */ .min_size = 32, /* empty AGs have minimal footprint */
.nelem_hint = 16, .nelem_hint = 16,
.key_len = sizeof(xfs_daddr_t), .key_len = sizeof(xfs_daddr_t),
.key_offset = offsetof(struct xfs_buf, b_bn), .key_offset = offsetof(struct xfs_buf, b_rhash_key),
.head_offset = offsetof(struct xfs_buf, b_rhash_head), .head_offset = offsetof(struct xfs_buf, b_rhash_head),
.automatic_shrinking = true, .automatic_shrinking = true,
.obj_cmpfn = _xfs_buf_obj_cmp, .obj_cmpfn = _xfs_buf_obj_cmp,
@ -853,7 +853,9 @@ xfs_buf_readahead_map(
/* /*
* Read an uncached buffer from disk. Allocates and returns a locked * Read an uncached buffer from disk. Allocates and returns a locked
* buffer containing the disk contents or nothing. * buffer containing the disk contents or nothing. Uncached buffers always have
* a cache index of XFS_BUF_DADDR_NULL so we can easily determine if the buffer
* is cached or uncached during fault diagnosis.
*/ */
int int
xfs_buf_read_uncached( xfs_buf_read_uncached(
@ -875,7 +877,7 @@ xfs_buf_read_uncached(
/* set up the buffer for a read IO */ /* set up the buffer for a read IO */
ASSERT(bp->b_map_count == 1); ASSERT(bp->b_map_count == 1);
bp->b_bn = XFS_BUF_DADDR_NULL; /* always null for uncached buffers */ bp->b_rhash_key = XFS_BUF_DADDR_NULL;
bp->b_maps[0].bm_bn = daddr; bp->b_maps[0].bm_bn = daddr;
bp->b_flags |= XBF_READ; bp->b_flags |= XBF_READ;
bp->b_ops = ops; bp->b_ops = ops;
@ -1513,7 +1515,7 @@ _xfs_buf_ioapply(
SHUTDOWN_CORRUPT_INCORE); SHUTDOWN_CORRUPT_INCORE);
return; return;
} }
} else if (bp->b_bn != XFS_BUF_DADDR_NULL) { } else if (bp->b_rhash_key != XFS_BUF_DADDR_NULL) {
struct xfs_mount *mp = bp->b_mount; struct xfs_mount *mp = bp->b_mount;
/* /*
@ -1523,7 +1525,8 @@ _xfs_buf_ioapply(
if (xfs_has_crc(mp)) { if (xfs_has_crc(mp)) {
xfs_warn(mp, xfs_warn(mp,
"%s: no buf ops on daddr 0x%llx len %d", "%s: no buf ops on daddr 0x%llx len %d",
__func__, bp->b_bn, bp->b_length); __func__, xfs_buf_daddr(bp),
bp->b_length);
xfs_hex_dump(bp->b_addr, xfs_hex_dump(bp->b_addr,
XFS_CORRUPTION_DUMP_LEN); XFS_CORRUPTION_DUMP_LEN);
dump_stack(); dump_stack();
@ -1793,7 +1796,7 @@ xfs_buftarg_drain(
xfs_buf_alert_ratelimited(bp, xfs_buf_alert_ratelimited(bp,
"XFS: Corruption Alert", "XFS: Corruption Alert",
"Corruption Alert: Buffer at daddr 0x%llx had permanent write failures!", "Corruption Alert: Buffer at daddr 0x%llx had permanent write failures!",
(long long)bp->b_bn); (long long)xfs_buf_daddr(bp));
} }
xfs_buf_rele(bp); xfs_buf_rele(bp);
} }

View File

@ -134,11 +134,7 @@ struct xfs_buf {
*/ */
struct rhash_head b_rhash_head; /* pag buffer hash node */ struct rhash_head b_rhash_head; /* pag buffer hash node */
/* xfs_daddr_t b_rhash_key; /* buffer cache index */
* b_bn is the cache index. Do not use directly, use b_maps[0].bm_bn
* for the buffer disk address instead.
*/
xfs_daddr_t b_bn;
int b_length; /* size of buffer in BBs */ int b_length; /* size of buffer in BBs */
atomic_t b_hold; /* reference count */ atomic_t b_hold; /* reference count */
atomic_t b_lru_ref; /* lru reclaim ref count */ atomic_t b_lru_ref; /* lru reclaim ref count */
@ -301,18 +297,6 @@ extern int xfs_buf_delwri_pushbuf(struct xfs_buf *, struct list_head *);
extern int xfs_buf_init(void); extern int xfs_buf_init(void);
extern void xfs_buf_terminate(void); extern void xfs_buf_terminate(void);
/*
* These macros use the IO block map rather than b_bn. b_bn is now really
* just for the buffer cache index for cached buffers. As IO does not use b_bn
* anymore, uncached buffers do not use b_bn at all and hence must modify the IO
* map directly. Uncached buffers are not allowed to be discontiguous, so this
* is safe to do.
*
* In future, uncached buffers will pass the block number directly to the io
* request function and hence these macros will go away at that point.
*/
#define XFS_BUF_SET_ADDR(bp, bno) ((bp)->b_maps[0].bm_bn = (xfs_daddr_t)(bno))
static inline xfs_daddr_t xfs_buf_daddr(struct xfs_buf *bp) static inline xfs_daddr_t xfs_buf_daddr(struct xfs_buf *bp)
{ {
return bp->b_maps[0].bm_bn; return bp->b_maps[0].bm_bn;