From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 37/46] xfs: replace xfs_dir3_data_endp with xfs_dir3_data_end_offset
Date: Thu, 7 Nov 2019 17:04:11 -0800 [thread overview]
Message-ID: <20191108010411.GH6219@magnolia> (raw)
In-Reply-To: <20191107182410.12660-38-hch@lst.de>
On Thu, Nov 07, 2019 at 07:24:01PM +0100, Christoph Hellwig wrote:
> 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>
/me feels like he's been walked down the dirent^Wgarden path...
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/xfs/libxfs/xfs_dir2.h | 2 +-
> fs/xfs/libxfs/xfs_dir2_data.c | 29 +++++++++++++++--------------
> fs/xfs/libxfs/xfs_dir2_sf.c | 2 +-
> fs/xfs/scrub/dir.c | 10 +++++-----
> fs/xfs/xfs_dir2_readdir.c | 2 +-
> 5 files changed, 23 insertions(+), 22 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_dir2.h b/fs/xfs/libxfs/xfs_dir2.h
> index a160f2d4ff37..3a4b98d4973d 100644
> --- a/fs/xfs/libxfs/xfs_dir2.h
> +++ b/fs/xfs/libxfs/xfs_dir2.h
> @@ -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);
>
> diff --git a/fs/xfs/libxfs/xfs_dir2_data.c b/fs/xfs/libxfs/xfs_dir2_data.c
> index 8c729270f9f1..f5fa8b9187b0 100644
> --- a/fs/xfs/libxfs/xfs_dir2_data.c
> +++ b/fs/xfs/libxfs/xfs_dir2_data.c
> @@ -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 @@ xfs_dir2_data_use_free(
> }
>
> /* 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;
> }
> }
> diff --git a/fs/xfs/libxfs/xfs_dir2_sf.c b/fs/xfs/libxfs/xfs_dir2_sf.c
> index a1aed589dc8c..bb6491a3c473 100644
> --- a/fs/xfs/libxfs/xfs_dir2_sf.c
> +++ b/fs/xfs/libxfs/xfs_dir2_sf.c
> @@ -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;
> diff --git a/fs/xfs/scrub/dir.c b/fs/xfs/scrub/dir.c
> index 4cef21b9d336..7f03f0fb178a 100644
> --- a/fs/xfs/scrub/dir.c
> +++ b/fs/xfs/scrub/dir.c
> @@ -187,7 +187,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 offset;
> xfs_ino_t ino;
> xfs_dablk_t rec_bno;
> @@ -242,8 +242,8 @@ xchk_dir_rec(
>
> /* Make sure we got a real directory entry. */
> offset = 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;
> }
> @@ -251,7 +251,7 @@ xchk_dir_rec(
> struct xfs_dir2_data_entry *dep = bp->b_addr + offset;
> struct xfs_dir2_data_unused *dup = bp->b_addr + offset;
>
> - if (offset >= endp - bp->b_addr) {
> + if (offset >= end) {
> xchk_fblock_set_corrupt(ds->sc, XFS_DATA_FORK, rec_bno);
> goto out_relse;
> }
> @@ -390,7 +390,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) {
> diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c
> index c4314e9e3dd8..6d229aa93d01 100644
> --- a/fs/xfs/xfs_dir2_readdir.c
> +++ b/fs/xfs/xfs_dir2_readdir.c
> @@ -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;
> --
> 2.20.1
>
next prev parent reply other threads:[~2019-11-08 1:04 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-07 18:23 remove m_dirops v2 Christoph Hellwig
2019-11-07 18:23 ` [PATCH 01/46] xfs: move incore structures out of xfs_da_format.h Christoph Hellwig
2019-11-07 18:23 ` [PATCH 02/46] xfs: use unsigned int for all size values in struct xfs_da_geometry Christoph Hellwig
2019-11-07 22:33 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 03/46] xfs: refactor btree node scrubbing Christoph Hellwig
2019-11-07 22:43 ` Darrick J. Wong
2019-11-08 5:28 ` Christoph Hellwig
2019-11-07 18:23 ` [PATCH 04/46] xfs: devirtualize ->node_hdr_from_disk Christoph Hellwig
2019-11-07 18:23 ` [PATCH 05/46] xfs: devirtualize ->node_hdr_to_disk Christoph Hellwig
2019-11-07 18:23 ` [PATCH 06/46] xfs: add a btree entries pointer to struct xfs_da3_icnode_hdr Christoph Hellwig
2019-11-08 0:21 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 07/46] xfs: move the node header size to struct xfs_da_geometry Christoph Hellwig
2019-11-07 18:23 ` [PATCH 08/46] xfs: devirtualize ->leaf_hdr_from_disk Christoph Hellwig
2019-11-07 18:23 ` [PATCH 09/46] xfs: devirtualize ->leaf_hdr_to_disk Christoph Hellwig
2019-11-07 18:23 ` [PATCH 10/46] xfs: add a entries pointer to struct xfs_dir3_icleaf_hdr Christoph Hellwig
2019-11-08 0:28 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 11/46] xfs: move the dir2 leaf header size to struct xfs_da_geometry Christoph Hellwig
2019-11-07 18:23 ` [PATCH 12/46] xfs: move the max dir2 leaf entries count " Christoph Hellwig
2019-11-07 18:23 ` [PATCH 13/46] xfs: devirtualize ->free_hdr_from_disk Christoph Hellwig
2019-11-07 18:23 ` [PATCH 14/46] xfs: devirtualize ->free_hdr_to_disk Christoph Hellwig
2019-11-07 18:23 ` [PATCH 15/46] xfs: make the xfs_dir3_icfree_hdr available to xfs_dir2_node_addname_int Christoph Hellwig
2019-11-08 1:06 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 16/46] xfs: add a bests pointer to struct xfs_dir3_icfree_hdr Christoph Hellwig
2019-11-08 0:34 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 17/46] xfs: move the dir2 free header size to struct xfs_da_geometry Christoph Hellwig
2019-11-08 0:34 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 18/46] xfs: move the max dir2 free bests count " Christoph Hellwig
2019-11-07 18:23 ` [PATCH 19/46] xfs: devirtualize ->db_to_fdb and ->db_to_fdindex Christoph Hellwig
2019-11-07 18:23 ` [PATCH 20/46] xfs: devirtualize ->sf_get_parent_ino and ->sf_put_parent_ino Christoph Hellwig
2019-11-07 18:23 ` [PATCH 21/46] xfs: devirtualize ->sf_entsize and ->sf_nextentry Christoph Hellwig
2019-11-07 18:23 ` [PATCH 22/46] xfs: devirtualize ->sf_get_ino and ->sf_put_ino Christoph Hellwig
2019-11-08 0:36 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 23/46] xfs: devirtualize ->sf_get_ftype and ->sf_put_ftype Christoph Hellwig
2019-11-07 18:23 ` [PATCH 24/46] xfs: remove the unused ->data_first_entry_p method Christoph Hellwig
2019-11-07 18:23 ` [PATCH 25/46] xfs: remove the data_dot_offset field in struct xfs_dir_ops Christoph Hellwig
2019-11-08 0:38 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 26/46] xfs: remove the data_dotdot_offset " Christoph Hellwig
2019-11-08 0:50 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 27/46] xfs: remove the ->data_dot_entry_p and ->data_dotdot_entry_p methods Christoph Hellwig
2019-11-08 0:49 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 28/46] xfs: remove the ->data_unused_p method Christoph Hellwig
2019-11-08 0:51 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 29/46] xfs: cleanup xfs_dir2_block_getdents Christoph Hellwig
2019-11-08 0:52 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 30/46] xfs: cleanup xfs_dir2_leaf_getdents Christoph Hellwig
2019-11-07 22:41 ` Darrick J. Wong
2019-11-08 5:26 ` Christoph Hellwig
2019-11-07 18:23 ` [PATCH 31/46] xfs: cleanup xchk_dir_rec Christoph Hellwig
2019-11-08 0:57 ` Darrick J. Wong
2019-11-08 5:38 ` Christoph Hellwig
2019-11-07 18:23 ` [PATCH 32/46] xfs: cleanup xchk_directory_data_bestfree Christoph Hellwig
2019-11-08 0:57 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 33/46] xfs: cleanup xfs_dir2_block_to_sf Christoph Hellwig
2019-11-08 0:59 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 34/46] xfs: cleanup xfs_dir2_data_freescan_int Christoph Hellwig
2019-11-08 1:00 ` Darrick J. Wong
2019-11-07 18:23 ` [PATCH 35/46] xfs: cleanup __xfs_dir3_data_check Christoph Hellwig
2019-11-08 1:01 ` Darrick J. Wong
2019-11-07 18:24 ` [PATCH 36/46] xfs: remove the now unused ->data_entry_p method Christoph Hellwig
2019-11-08 1:02 ` Darrick J. Wong
2019-11-07 18:24 ` [PATCH 37/46] xfs: replace xfs_dir3_data_endp with xfs_dir3_data_end_offset Christoph Hellwig
2019-11-08 1:04 ` Darrick J. Wong [this message]
2019-11-07 18:24 ` [PATCH 38/46] xfs: devirtualize ->data_entsize Christoph Hellwig
2019-11-07 18:24 ` [PATCH 39/46] xfs: devirtualize ->data_entry_tag_p Christoph Hellwig
2019-11-07 18:24 ` [PATCH 40/46] xfs: move the dir2 data block fixed offsets to struct xfs_da_geometry Christoph Hellwig
2019-11-07 18:24 ` [PATCH 41/46] xfs: cleanup xfs_dir2_data_entsize Christoph Hellwig
2019-11-08 1:05 ` Darrick J. Wong
2019-11-08 5:43 ` Christoph Hellwig
2019-11-07 18:24 ` [PATCH 42/46] xfs: devirtualize ->data_bestfree_p Christoph Hellwig
2019-11-07 18:24 ` [PATCH 43/46] xfs: devirtualize ->data_get_ftype and ->data_put_ftype Christoph Hellwig
2019-11-07 18:24 ` [PATCH 44/46] xfs: remove the now unused dir ops infrastructure Christoph Hellwig
2019-11-07 18:24 ` [PATCH 45/46] xfs: merge xfs_dir2_data_freescan and xfs_dir2_data_freescan_int Christoph Hellwig
2019-11-07 18:24 ` [PATCH 46/46] xfs: always pass a valid hdr to xfs_dir3_leaf_check_int Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191108010411.GH6219@magnolia \
--to=darrick.wong@oracle.com \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox