Commit 5c072127 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong

xfs: replace xfs_dir3_data_endp with xfs_dir3_data_end_offset

All the callers really want an offset into the buffer, so adopt
the helper to return that instead.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 9eedae10
...@@ -266,7 +266,7 @@ xfs_dir2_leaf_tail_p(struct xfs_da_geometry *geo, struct xfs_dir2_leaf *lp) ...@@ -266,7 +266,7 @@ xfs_dir2_leaf_tail_p(struct xfs_da_geometry *geo, struct xfs_dir2_leaf *lp)
#define XFS_READDIR_BUFSIZE (32768) #define XFS_READDIR_BUFSIZE (32768)
unsigned char xfs_dir3_get_dtype(struct xfs_mount *mp, uint8_t filetype); unsigned char xfs_dir3_get_dtype(struct xfs_mount *mp, uint8_t filetype);
void *xfs_dir3_data_endp(struct xfs_da_geometry *geo, unsigned int xfs_dir3_data_end_offset(struct xfs_da_geometry *geo,
struct xfs_dir2_data_hdr *hdr); struct xfs_dir2_data_hdr *hdr);
bool xfs_dir2_namecheck(const void *name, size_t length); bool xfs_dir2_namecheck(const void *name, size_t length);
......
...@@ -55,7 +55,6 @@ __xfs_dir3_data_check( ...@@ -55,7 +55,6 @@ __xfs_dir3_data_check(
int count; /* count of entries found */ int count; /* count of entries found */
xfs_dir2_data_hdr_t *hdr; /* data block header */ xfs_dir2_data_hdr_t *hdr; /* data block header */
xfs_dir2_data_free_t *dfp; /* bestfree entry */ xfs_dir2_data_free_t *dfp; /* bestfree entry */
void *endp; /* end of useful data */
int freeseen; /* mask of bestfrees seen */ int freeseen; /* mask of bestfrees seen */
xfs_dahash_t hash; /* hash of current name */ xfs_dahash_t hash; /* hash of current name */
int i; /* leaf index */ int i; /* leaf index */
...@@ -102,10 +101,9 @@ __xfs_dir3_data_check( ...@@ -102,10 +101,9 @@ __xfs_dir3_data_check(
default: default:
return __this_address; return __this_address;
} }
endp = xfs_dir3_data_endp(geo, hdr); end = xfs_dir3_data_end_offset(geo, hdr);
if (!endp) if (!end)
return __this_address; return __this_address;
end = endp - bp->b_addr;
/* /*
* Account for zero bestfree entries. * Account for zero bestfree entries.
...@@ -590,7 +588,7 @@ xfs_dir2_data_freescan_int( ...@@ -590,7 +588,7 @@ xfs_dir2_data_freescan_int(
memset(bf, 0, sizeof(*bf) * XFS_DIR2_DATA_FD_COUNT); memset(bf, 0, sizeof(*bf) * XFS_DIR2_DATA_FD_COUNT);
*loghead = 1; *loghead = 1;
end = xfs_dir3_data_endp(geo, addr) - addr; end = xfs_dir3_data_end_offset(geo, addr);
while (offset < end) { while (offset < end) {
struct xfs_dir2_data_unused *dup = addr + offset; struct xfs_dir2_data_unused *dup = addr + offset;
struct xfs_dir2_data_entry *dep = addr + offset; struct xfs_dir2_data_entry *dep = addr + offset;
...@@ -784,11 +782,11 @@ xfs_dir2_data_make_free( ...@@ -784,11 +782,11 @@ xfs_dir2_data_make_free(
{ {
xfs_dir2_data_hdr_t *hdr; /* data block pointer */ xfs_dir2_data_hdr_t *hdr; /* data block pointer */
xfs_dir2_data_free_t *dfp; /* bestfree pointer */ xfs_dir2_data_free_t *dfp; /* bestfree pointer */
char *endptr; /* end of data area */
int needscan; /* need to regen bestfree */ int needscan; /* need to regen bestfree */
xfs_dir2_data_unused_t *newdup; /* new unused entry */ xfs_dir2_data_unused_t *newdup; /* new unused entry */
xfs_dir2_data_unused_t *postdup; /* unused entry after us */ xfs_dir2_data_unused_t *postdup; /* unused entry after us */
xfs_dir2_data_unused_t *prevdup; /* unused entry before us */ xfs_dir2_data_unused_t *prevdup; /* unused entry before us */
unsigned int end;
struct xfs_dir2_data_free *bf; struct xfs_dir2_data_free *bf;
hdr = bp->b_addr; hdr = bp->b_addr;
...@@ -796,8 +794,8 @@ xfs_dir2_data_make_free( ...@@ -796,8 +794,8 @@ xfs_dir2_data_make_free(
/* /*
* Figure out where the end of the data area is. * Figure out where the end of the data area is.
*/ */
endptr = xfs_dir3_data_endp(args->geo, hdr); end = xfs_dir3_data_end_offset(args->geo, hdr);
ASSERT(endptr != NULL); ASSERT(end != 0);
/* /*
* If this isn't the start of the block, then back up to * If this isn't the start of the block, then back up to
...@@ -816,7 +814,7 @@ xfs_dir2_data_make_free( ...@@ -816,7 +814,7 @@ xfs_dir2_data_make_free(
* If this isn't the end of the block, see if the entry after * If this isn't the end of the block, see if the entry after
* us is free. * us is free.
*/ */
if ((char *)hdr + offset + len < endptr) { if (offset + len < end) {
postdup = postdup =
(xfs_dir2_data_unused_t *)((char *)hdr + offset + len); (xfs_dir2_data_unused_t *)((char *)hdr + offset + len);
if (be16_to_cpu(postdup->freetag) != XFS_DIR2_DATA_FREE_TAG) if (be16_to_cpu(postdup->freetag) != XFS_DIR2_DATA_FREE_TAG)
...@@ -1144,19 +1142,22 @@ xfs_dir2_data_use_free( ...@@ -1144,19 +1142,22 @@ xfs_dir2_data_use_free(
} }
/* Find the end of the entry data in a data/block format dir block. */ /* Find the end of the entry data in a data/block format dir block. */
void * unsigned int
xfs_dir3_data_endp( xfs_dir3_data_end_offset(
struct xfs_da_geometry *geo, struct xfs_da_geometry *geo,
struct xfs_dir2_data_hdr *hdr) struct xfs_dir2_data_hdr *hdr)
{ {
void *p;
switch (hdr->magic) { switch (hdr->magic) {
case cpu_to_be32(XFS_DIR3_BLOCK_MAGIC): case cpu_to_be32(XFS_DIR3_BLOCK_MAGIC):
case cpu_to_be32(XFS_DIR2_BLOCK_MAGIC): case cpu_to_be32(XFS_DIR2_BLOCK_MAGIC):
return xfs_dir2_block_leaf_p(xfs_dir2_block_tail_p(geo, hdr)); p = xfs_dir2_block_leaf_p(xfs_dir2_block_tail_p(geo, hdr));
return p - (void *)hdr;
case cpu_to_be32(XFS_DIR3_DATA_MAGIC): case cpu_to_be32(XFS_DIR3_DATA_MAGIC):
case cpu_to_be32(XFS_DIR2_DATA_MAGIC): case cpu_to_be32(XFS_DIR2_DATA_MAGIC):
return (char *)hdr + geo->blksize; return geo->blksize;
default: default:
return NULL; return 0;
} }
} }
...@@ -283,7 +283,7 @@ xfs_dir2_block_to_sf( ...@@ -283,7 +283,7 @@ xfs_dir2_block_to_sf(
* Loop over the active and unused entries. Stop when we reach the * Loop over the active and unused entries. Stop when we reach the
* leaf/tail portion of the block. * leaf/tail portion of the block.
*/ */
end = xfs_dir3_data_endp(args->geo, bp->b_addr) - bp->b_addr; end = xfs_dir3_data_end_offset(args->geo, bp->b_addr);
sfep = xfs_dir2_sf_firstentry(sfp); sfep = xfs_dir2_sf_firstentry(sfp);
while (offset < end) { while (offset < end) {
struct xfs_dir2_data_unused *dup = bp->b_addr + offset; struct xfs_dir2_data_unused *dup = bp->b_addr + offset;
......
...@@ -190,7 +190,7 @@ xchk_dir_rec( ...@@ -190,7 +190,7 @@ xchk_dir_rec(
struct xfs_dir2_data_entry *dent; struct xfs_dir2_data_entry *dent;
struct xfs_buf *bp; struct xfs_buf *bp;
struct xfs_dir2_leaf_entry *ent; struct xfs_dir2_leaf_entry *ent;
void *endp; unsigned int end;
unsigned int iter_off; unsigned int iter_off;
xfs_ino_t ino; xfs_ino_t ino;
xfs_dablk_t rec_bno; xfs_dablk_t rec_bno;
...@@ -245,8 +245,8 @@ xchk_dir_rec( ...@@ -245,8 +245,8 @@ xchk_dir_rec(
/* Make sure we got a real directory entry. */ /* Make sure we got a real directory entry. */
iter_off = mp->m_dir_inode_ops->data_entry_offset; iter_off = mp->m_dir_inode_ops->data_entry_offset;
endp = xfs_dir3_data_endp(mp->m_dir_geo, bp->b_addr); end = xfs_dir3_data_end_offset(mp->m_dir_geo, bp->b_addr);
if (!endp) { if (!end) {
xchk_fblock_set_corrupt(ds->sc, XFS_DATA_FORK, rec_bno); xchk_fblock_set_corrupt(ds->sc, XFS_DATA_FORK, rec_bno);
goto out_relse; goto out_relse;
} }
...@@ -254,7 +254,7 @@ xchk_dir_rec( ...@@ -254,7 +254,7 @@ xchk_dir_rec(
struct xfs_dir2_data_entry *dep = bp->b_addr + iter_off; struct xfs_dir2_data_entry *dep = bp->b_addr + iter_off;
struct xfs_dir2_data_unused *dup = bp->b_addr + iter_off; struct xfs_dir2_data_unused *dup = bp->b_addr + iter_off;
if (iter_off >= endp - bp->b_addr) { if (iter_off >= end) {
xchk_fblock_set_corrupt(ds->sc, XFS_DATA_FORK, rec_bno); xchk_fblock_set_corrupt(ds->sc, XFS_DATA_FORK, rec_bno);
goto out_relse; goto out_relse;
} }
...@@ -393,7 +393,7 @@ xchk_directory_data_bestfree( ...@@ -393,7 +393,7 @@ xchk_directory_data_bestfree(
/* Make sure the bestfrees are actually the best free spaces. */ /* Make sure the bestfrees are actually the best free spaces. */
offset = d_ops->data_entry_offset; offset = d_ops->data_entry_offset;
end = xfs_dir3_data_endp(mp->m_dir_geo, bp->b_addr) - bp->b_addr; end = xfs_dir3_data_end_offset(mp->m_dir_geo, bp->b_addr);
/* Iterate the entries, stopping when we hit or go past the end. */ /* Iterate the entries, stopping when we hit or go past the end. */
while (offset < end) { while (offset < end) {
......
...@@ -175,7 +175,7 @@ xfs_dir2_block_getdents( ...@@ -175,7 +175,7 @@ xfs_dir2_block_getdents(
* Each object is a real entry (dep) or an unused one (dup). * Each object is a real entry (dep) or an unused one (dup).
*/ */
offset = dp->d_ops->data_entry_offset; offset = dp->d_ops->data_entry_offset;
end = xfs_dir3_data_endp(geo, bp->b_addr) - bp->b_addr; end = xfs_dir3_data_end_offset(geo, bp->b_addr);
while (offset < end) { while (offset < end) {
struct xfs_dir2_data_unused *dup = bp->b_addr + offset; struct xfs_dir2_data_unused *dup = bp->b_addr + offset;
struct xfs_dir2_data_entry *dep = bp->b_addr + offset; struct xfs_dir2_data_entry *dep = bp->b_addr + offset;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment