From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 01/18] xfs: split xfs_imap_to_bp
Date: Wed, 24 Mar 2021 11:07:11 -0700 [thread overview]
Message-ID: <20210324180711.GZ22100@magnolia> (raw)
In-Reply-To: <20210324142129.1011766-2-hch@lst.de>
On Wed, Mar 24, 2021 at 03:21:12PM +0100, Christoph Hellwig wrote:
> Split looking up the dinode from xfs_imap_to_bp, which can be
> significantly simplified as a result.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Oh good, I always thought the dipp parameter was gross.
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/libxfs/xfs_inode_buf.c | 27 ++++-----------------------
> fs/xfs/libxfs/xfs_inode_buf.h | 5 ++---
> fs/xfs/libxfs/xfs_trans_inode.c | 3 +--
> fs/xfs/scrub/ialloc.c | 3 +--
> fs/xfs/xfs_icache.c | 6 +++---
> fs/xfs/xfs_inode.c | 6 ++++--
> fs/xfs/xfs_log_recover.c | 3 ++-
> 7 files changed, 17 insertions(+), 36 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
> index 4d7410e49db41b..af5ee8bd7e6ac9 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.c
> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
> @@ -124,37 +124,18 @@ const struct xfs_buf_ops xfs_inode_buf_ra_ops = {
> /*
> * This routine is called to map an inode to the buffer containing the on-disk
> * version of the inode. It returns a pointer to the buffer containing the
> - * on-disk inode in the bpp parameter, and in the dipp parameter it returns a
> - * pointer to the on-disk inode within that buffer.
> - *
> - * If a non-zero error is returned, then the contents of bpp and dipp are
> - * undefined.
> + * on-disk inode in the bpp parameter.
> */
> int
> xfs_imap_to_bp(
> struct xfs_mount *mp,
> struct xfs_trans *tp,
> struct xfs_imap *imap,
> - struct xfs_dinode **dipp,
> - struct xfs_buf **bpp,
> - uint buf_flags)
> + struct xfs_buf **bpp)
> {
> - struct xfs_buf *bp;
> - int error;
> -
> - buf_flags |= XBF_UNMAPPED;
> - error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, imap->im_blkno,
> - (int)imap->im_len, buf_flags, &bp,
> + return xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, imap->im_blkno,
> + imap->im_len, XBF_UNMAPPED, bpp,
> &xfs_inode_buf_ops);
> - if (error) {
> - ASSERT(error != -EAGAIN || (buf_flags & XBF_TRYLOCK));
> - return error;
> - }
> -
> - *bpp = bp;
> - if (dipp)
> - *dipp = xfs_buf_offset(bp, imap->im_boffset);
> - return 0;
> }
>
> static inline struct timespec64 xfs_inode_decode_bigtime(uint64_t ts)
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.h b/fs/xfs/libxfs/xfs_inode_buf.h
> index ef5eaf33d146ff..9e1ae38380b3c0 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.h
> +++ b/fs/xfs/libxfs/xfs_inode_buf.h
> @@ -47,9 +47,8 @@ struct xfs_imap {
> unsigned short im_boffset; /* inode offset in block in bytes */
> };
>
> -int xfs_imap_to_bp(struct xfs_mount *, struct xfs_trans *,
> - struct xfs_imap *, struct xfs_dinode **,
> - struct xfs_buf **, uint);
> +int xfs_imap_to_bp(struct xfs_mount *mp, struct xfs_trans *tp,
> + struct xfs_imap *imap, struct xfs_buf **bpp);
> void xfs_dinode_calc_crc(struct xfs_mount *, struct xfs_dinode *);
> void xfs_inode_to_disk(struct xfs_inode *ip, struct xfs_dinode *to,
> xfs_lsn_t lsn);
> diff --git a/fs/xfs/libxfs/xfs_trans_inode.c b/fs/xfs/libxfs/xfs_trans_inode.c
> index 90f1d564505270..4f02cb439ab57e 100644
> --- a/fs/xfs/libxfs/xfs_trans_inode.c
> +++ b/fs/xfs/libxfs/xfs_trans_inode.c
> @@ -164,8 +164,7 @@ xfs_trans_log_inode(
> * here.
> */
> spin_unlock(&iip->ili_lock);
> - error = xfs_imap_to_bp(ip->i_mount, tp, &ip->i_imap, NULL,
> - &bp, 0);
> + error = xfs_imap_to_bp(ip->i_mount, tp, &ip->i_imap, &bp);
> if (error) {
> xfs_force_shutdown(ip->i_mount, SHUTDOWN_META_IO_ERROR);
> return;
> diff --git a/fs/xfs/scrub/ialloc.c b/fs/xfs/scrub/ialloc.c
> index 6517d67e8d51f8..1644199c29a815 100644
> --- a/fs/xfs/scrub/ialloc.c
> +++ b/fs/xfs/scrub/ialloc.c
> @@ -212,7 +212,6 @@ xchk_iallocbt_check_cluster(
> {
> struct xfs_imap imap;
> struct xfs_mount *mp = bs->cur->bc_mp;
> - struct xfs_dinode *dip;
> struct xfs_buf *cluster_bp;
> unsigned int nr_inodes;
> xfs_agnumber_t agno = bs->cur->bc_ag.agno;
> @@ -278,7 +277,7 @@ xchk_iallocbt_check_cluster(
> &XFS_RMAP_OINFO_INODES);
>
> /* Grab the inode cluster buffer. */
> - error = xfs_imap_to_bp(mp, bs->cur->bc_tp, &imap, &dip, &cluster_bp, 0);
> + error = xfs_imap_to_bp(mp, bs->cur->bc_tp, &imap, &cluster_bp);
> if (!xchk_btree_xref_process_error(bs->sc, bs->cur, 0, &error))
> return error;
>
> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> index 1d7720a0c068b7..266fb77ac5608c 100644
> --- a/fs/xfs/xfs_icache.c
> +++ b/fs/xfs/xfs_icache.c
> @@ -505,14 +505,14 @@ xfs_iget_cache_miss(
> (flags & XFS_IGET_CREATE) && !(mp->m_flags & XFS_MOUNT_IKEEP)) {
> VFS_I(ip)->i_generation = prandom_u32();
> } else {
> - struct xfs_dinode *dip;
> struct xfs_buf *bp;
>
> - error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &dip, &bp, 0);
> + error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &bp);
> if (error)
> goto out_destroy;
>
> - error = xfs_inode_from_disk(ip, dip);
> + error = xfs_inode_from_disk(ip,
> + xfs_buf_offset(bp, ip->i_imap.im_boffset));
> if (!error)
> xfs_buf_set_ref(bp, XFS_INO_REF);
> xfs_trans_brelse(tp, bp);
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index 46a861d55e487b..3fa332a1d24f9f 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -2051,9 +2051,10 @@ xfs_iunlink_update_inode(
>
> ASSERT(xfs_verify_agino_or_null(mp, agno, next_agino));
>
> - error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &dip, &ibp, 0);
> + error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &ibp);
> if (error)
> return error;
> + dip = xfs_buf_offset(ibp, ip->i_imap.im_boffset);
>
> /* Make sure the old pointer isn't garbage. */
> old_value = be32_to_cpu(dip->di_next_unlinked);
> @@ -2178,13 +2179,14 @@ xfs_iunlink_map_ino(
> return error;
> }
>
> - error = xfs_imap_to_bp(mp, tp, imap, dipp, bpp, 0);
> + error = xfs_imap_to_bp(mp, tp, imap, bpp);
> if (error) {
> xfs_warn(mp, "%s: xfs_imap_to_bp returned error %d.",
> __func__, error);
> return error;
> }
>
> + *dipp = xfs_buf_offset(*bpp, imap->im_boffset);
> return 0;
> }
>
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index 97f31308de03b9..31348e660cd65b 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -2683,9 +2683,10 @@ xlog_recover_process_one_iunlink(
> /*
> * Get the on disk inode to find the next inode in the bucket.
> */
> - error = xfs_imap_to_bp(mp, NULL, &ip->i_imap, &dip, &ibp, 0);
> + error = xfs_imap_to_bp(mp, NULL, &ip->i_imap, &ibp);
> if (error)
> goto fail_iput;
> + dip = xfs_buf_offset(ibp, ip->i_imap.im_boffset);
>
> xfs_iflags_clear(ip, XFS_IRECOVERY);
> ASSERT(VFS_I(ip)->i_nlink == 0);
> --
> 2.30.1
>
next prev parent reply other threads:[~2021-03-24 18:07 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-24 14:21 xfs inode structure cleanups v3 Christoph Hellwig
2021-03-24 14:21 ` [PATCH 01/18] xfs: split xfs_imap_to_bp Christoph Hellwig
2021-03-24 18:07 ` Darrick J. Wong [this message]
2021-03-24 14:21 ` [PATCH 02/18] xfs: consistently initialize di_flags2 Christoph Hellwig
2021-03-24 18:08 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 03/18] xfs: handle crtime more carefully in xfs_bulkstat_one_int Christoph Hellwig
2021-03-24 18:09 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 04/18] xfs: remove the unused xfs_icdinode_has_bigtime helper Christoph Hellwig
2021-03-24 18:10 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 05/18] xfs: remove the di_dmevmask and di_dmstate fields from struct xfs_icdinode Christoph Hellwig
2021-03-24 18:17 ` Darrick J. Wong
2021-03-24 18:20 ` Christoph Hellwig
2021-03-25 14:29 ` Anthony Iliopoulos
2021-03-24 14:21 ` [PATCH 06/18] xfs: don't clear the "dinode core" in xfs_inode_alloc Christoph Hellwig
2021-03-24 18:27 ` Darrick J. Wong
2021-03-24 18:28 ` Christoph Hellwig
2021-03-24 18:40 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 07/18] xfs: move the di_projid field to struct xfs_inode Christoph Hellwig
2021-03-24 18:20 ` Darrick J. Wong
2021-03-25 8:39 ` Christoph Hellwig
2021-03-24 14:21 ` [PATCH 08/18] xfs: move the di_size " Christoph Hellwig
2021-03-24 18:21 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 09/18] xfs: move the di_nblocks " Christoph Hellwig
2021-03-24 18:22 ` Darrick J. Wong
2021-03-25 8:39 ` Christoph Hellwig
2021-03-26 0:25 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 10/18] xfs: move the di_extsize " Christoph Hellwig
2021-03-24 18:29 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 11/18] xfs: move the di_cowextsize " Christoph Hellwig
2021-03-24 18:31 ` Darrick J. Wong
2021-03-24 18:33 ` Darrick J. Wong
2021-03-24 18:42 ` Darrick J. Wong
2021-03-25 8:41 ` Christoph Hellwig
2021-03-24 14:21 ` [PATCH 12/18] xfs: move the di_flushiter " Christoph Hellwig
2021-03-24 18:32 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 13/18] xfs: use a union for i_cowextsize and i_flushiter Christoph Hellwig
2021-03-24 18:33 ` Darrick J. Wong
2021-03-25 3:06 ` Darrick J. Wong
2021-03-25 9:01 ` Christoph Hellwig
2021-03-24 14:21 ` [PATCH 14/18] xfs: cleanup xfs_fill_fsxattr Christoph Hellwig
2021-03-24 18:34 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 15/18] xfs: move the di_forkoff field to struct xfs_inode Christoph Hellwig
2021-03-24 18:35 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 16/18] xfs: move the di_flags " Christoph Hellwig
2021-03-24 18:36 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 17/18] xfs: move the di_flags2 " Christoph Hellwig
2021-03-24 18:37 ` Darrick J. Wong
2021-03-24 14:21 ` [PATCH 18/18] xfs: move the di_crtime " Christoph Hellwig
2021-03-24 18:38 ` Darrick J. Wong
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=20210324180711.GZ22100@magnolia \
--to=djwong@kernel.org \
--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;
as well as URLs for NNTP newsgroup(s).