xfs: replace xfs_dir3_data_endp with xfs_dir3_data_end_offset
authorChristoph Hellwig <hch@lst.de>
Fri, 8 Nov 2019 23:05:36 +0000 (15:05 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Mon, 11 Nov 2019 00:54:23 +0000 (16:54 -0800)
All the callers really want an offset into the buffer, so adopt
the helper to return that instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/libxfs/xfs_dir2.h
fs/xfs/libxfs/xfs_dir2_data.c
fs/xfs/libxfs/xfs_dir2_sf.c
fs/xfs/scrub/dir.c
fs/xfs/xfs_dir2_readdir.c

index a160f2d..3a4b98d 100644 (file)
@@ -266,7 +266,7 @@ xfs_dir2_leaf_tail_p(struct xfs_da_geometry *geo, struct xfs_dir2_leaf *lp)
 #define XFS_READDIR_BUFSIZE    (32768)
 
 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);
 bool xfs_dir2_namecheck(const void *name, size_t length);
 
index 8c72927..f5fa8b9 100644 (file)
@@ -55,7 +55,6 @@ __xfs_dir3_data_check(
        int                     count;          /* count of entries found */
        xfs_dir2_data_hdr_t     *hdr;           /* data block header */
        xfs_dir2_data_free_t    *dfp;           /* bestfree entry */
-       void                    *endp;          /* end of useful data */
        int                     freeseen;       /* mask of bestfrees seen */
        xfs_dahash_t            hash;           /* hash of current name */
        int                     i;              /* leaf index */
@@ -102,10 +101,9 @@ __xfs_dir3_data_check(
        default:
                return __this_address;
        }
-       endp = xfs_dir3_data_endp(geo, hdr);
-       if (!endp)
+       end = xfs_dir3_data_end_offset(geo, hdr);
+       if (!end)
                return __this_address;
-       end = endp - bp->b_addr;
 
        /*
         * Account for zero bestfree entries.
@@ -590,7 +588,7 @@ xfs_dir2_data_freescan_int(
        memset(bf, 0, sizeof(*bf) * XFS_DIR2_DATA_FD_COUNT);
        *loghead = 1;
 
-       end = xfs_dir3_data_endp(geo, addr) - addr;
+       end = xfs_dir3_data_end_offset(geo, addr);
        while (offset < end) {
                struct xfs_dir2_data_unused     *dup = addr + offset;
                struct xfs_dir2_data_entry      *dep = addr + offset;
@@ -784,11 +782,11 @@ xfs_dir2_data_make_free(
 {
        xfs_dir2_data_hdr_t     *hdr;           /* data block pointer */
        xfs_dir2_data_free_t    *dfp;           /* bestfree pointer */
-       char                    *endptr;        /* end of data area */
        int                     needscan;       /* need to regen bestfree */
        xfs_dir2_data_unused_t  *newdup;        /* new unused entry */
        xfs_dir2_data_unused_t  *postdup;       /* unused entry after us */
        xfs_dir2_data_unused_t  *prevdup;       /* unused entry before us */
+       unsigned int            end;
        struct xfs_dir2_data_free *bf;
 
        hdr = bp->b_addr;
@@ -796,8 +794,8 @@ xfs_dir2_data_make_free(
        /*
         * Figure out where the end of the data area is.
         */
-       endptr = xfs_dir3_data_endp(args->geo, hdr);
-       ASSERT(endptr != NULL);
+       end = xfs_dir3_data_end_offset(args->geo, hdr);
+       ASSERT(end != 0);
 
        /*
         * If this isn't the start of the block, then back up to
@@ -816,7 +814,7 @@ xfs_dir2_data_make_free(
         * If this isn't the end of the block, see if the entry after
         * us is free.
         */
-       if ((char *)hdr + offset + len < endptr) {
+       if (offset + len < end) {
                postdup =
                        (xfs_dir2_data_unused_t *)((char *)hdr + offset + len);
                if (be16_to_cpu(postdup->freetag) != XFS_DIR2_DATA_FREE_TAG)
@@ -1144,19 +1142,22 @@ corrupt:
 }
 
 /* Find the end of the entry data in a data/block format dir block. */
-void *
-xfs_dir3_data_endp(
+unsigned int
+xfs_dir3_data_end_offset(
        struct xfs_da_geometry          *geo,
        struct xfs_dir2_data_hdr        *hdr)
 {
+       void                            *p;
+
        switch (hdr->magic) {
        case cpu_to_be32(XFS_DIR3_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_DIR2_DATA_MAGIC):
-               return (char *)hdr + geo->blksize;
+               return geo->blksize;
        default:
-               return NULL;
+               return 0;
        }
 }
index a1aed58..bb6491a 100644 (file)
@@ -283,7 +283,7 @@ xfs_dir2_block_to_sf(
         * Loop over the active and unused entries.  Stop when we reach the
         * 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);
        while (offset < end) {
                struct xfs_dir2_data_unused     *dup = bp->b_addr + offset;
index f07f688..71967ca 100644 (file)
@@ -190,7 +190,7 @@ xchk_dir_rec(
        struct xfs_dir2_data_entry      *dent;
        struct xfs_buf                  *bp;
        struct xfs_dir2_leaf_entry      *ent;
-       void                            *endp;
+       unsigned int                    end;
        unsigned int                    iter_off;
        xfs_ino_t                       ino;
        xfs_dablk_t                     rec_bno;
@@ -245,8 +245,8 @@ xchk_dir_rec(
 
        /* Make sure we got a real directory entry. */
        iter_off = mp->m_dir_inode_ops->data_entry_offset;
-       endp = xfs_dir3_data_endp(mp->m_dir_geo, bp->b_addr);
-       if (!endp) {
+       end = xfs_dir3_data_end_offset(mp->m_dir_geo, bp->b_addr);
+       if (!end) {
                xchk_fblock_set_corrupt(ds->sc, XFS_DATA_FORK, rec_bno);
                goto out_relse;
        }
@@ -254,7 +254,7 @@ xchk_dir_rec(
                struct xfs_dir2_data_entry      *dep = 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);
                        goto out_relse;
                }
@@ -393,7 +393,7 @@ xchk_directory_data_bestfree(
 
        /* Make sure the bestfrees are actually the best free spaces. */
        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. */
        while (offset < end) {
index 4a29921..bf3a989 100644 (file)
@@ -175,7 +175,7 @@ xfs_dir2_block_getdents(
         * Each object is a real entry (dep) or an unused one (dup).
         */
        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) {
                struct xfs_dir2_data_unused     *dup = bp->b_addr + offset;
                struct xfs_dir2_data_entry      *dep = bp->b_addr + offset;