From: Brian Foster <bfoster@redhat.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs@vger.kernel.org, hch@lst.de
Subject: Re: [PATCH 05/12] xfs: remove flags argument from xfs_inode_ag_walk
Date: Fri, 22 May 2020 08:03:43 -0400 [thread overview]
Message-ID: <20200522120343.GF50656@bfoster> (raw)
In-Reply-To: <159011603978.77079.10531037194098683108.stgit@magnolia>
On Thu, May 21, 2020 at 07:53:59PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
>
> The incore inode walk code passes a flags argument and a pointer from
> the xfs_inode_ag_iterator caller all the way to the iteration function.
> We can reduce the function complexity by passing flags through the
> private pointer.
>
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
Reviewed-by: Brian Foster <bfoster@redhat.com>
> fs/xfs/xfs_icache.c | 43 +++++++++++++++++--------------------------
> fs/xfs/xfs_icache.h | 4 ++--
> fs/xfs/xfs_qm_syscalls.c | 15 ++++++++-------
> 3 files changed, 27 insertions(+), 35 deletions(-)
>
>
> diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
> index 6d7f3014d547..53c6cc7bc02a 100644
> --- a/fs/xfs/xfs_icache.c
> +++ b/fs/xfs/xfs_icache.c
> @@ -790,9 +790,7 @@ STATIC int
> xfs_inode_ag_walk(
> struct xfs_mount *mp,
> struct xfs_perag *pag,
> - int (*execute)(struct xfs_inode *ip, int flags,
> - void *args),
> - int flags,
> + int (*execute)(struct xfs_inode *ip, void *args),
> void *args,
> int tag,
> int iter_flags)
> @@ -868,7 +866,7 @@ xfs_inode_ag_walk(
> if ((iter_flags & XFS_AGITER_INEW_WAIT) &&
> xfs_iflags_test(batch[i], XFS_INEW))
> xfs_inew_wait(batch[i]);
> - error = execute(batch[i], flags, args);
> + error = execute(batch[i], args);
> xfs_irele(batch[i]);
> if (error == -EAGAIN) {
> skipped++;
> @@ -972,9 +970,7 @@ int
> xfs_inode_ag_iterator(
> struct xfs_mount *mp,
> int iter_flags,
> - int (*execute)(struct xfs_inode *ip, int flags,
> - void *args),
> - int flags,
> + int (*execute)(struct xfs_inode *ip, void *args),
> void *args,
> int tag)
> {
> @@ -986,7 +982,7 @@ xfs_inode_ag_iterator(
> ag = 0;
> while ((pag = xfs_inode_walk_get_perag(mp, ag, tag))) {
> ag = pag->pag_agno + 1;
> - error = xfs_inode_ag_walk(mp, pag, execute, flags, args, tag,
> + error = xfs_inode_ag_walk(mp, pag, execute, args, tag,
> iter_flags);
> xfs_perag_put(pag);
> if (error) {
> @@ -1443,12 +1439,14 @@ xfs_inode_match_id_union(
> STATIC int
> xfs_inode_free_eofblocks(
> struct xfs_inode *ip,
> - int flags,
> void *args)
> {
> - int ret = 0;
> - struct xfs_eofblocks *eofb = args;
> - int match;
> + struct xfs_eofblocks *eofb = args;
> + bool wait;
> + int match;
> + int ret;
> +
> + wait = eofb && (eofb->eof_flags & XFS_EOF_FLAGS_SYNC);
>
> if (!xfs_can_free_eofblocks(ip, false)) {
> /* inode could be preallocated or append-only */
> @@ -1461,8 +1459,7 @@ xfs_inode_free_eofblocks(
> * If the mapping is dirty the operation can block and wait for some
> * time. Unless we are waiting, skip it.
> */
> - if (!(flags & SYNC_WAIT) &&
> - mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY))
> + if (!wait && mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY))
> return 0;
>
> if (eofb) {
> @@ -1484,10 +1481,11 @@ xfs_inode_free_eofblocks(
> * scanner moving and revisit the inode in a subsequent pass.
> */
> if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) {
> - if (flags & SYNC_WAIT)
> - ret = -EAGAIN;
> - return ret;
> + if (wait)
> + return -EAGAIN;
> + return 0;
> }
> +
> ret = xfs_free_eofblocks(ip);
> xfs_iunlock(ip, XFS_IOLOCK_EXCL);
>
> @@ -1498,16 +1496,10 @@ static int
> __xfs_icache_free_eofblocks(
> struct xfs_mount *mp,
> struct xfs_eofblocks *eofb,
> - int (*execute)(struct xfs_inode *ip, int flags,
> - void *args),
> + int (*execute)(struct xfs_inode *ip, void *args),
> int tag)
> {
> - int flags = SYNC_TRYLOCK;
> -
> - if (eofb && (eofb->eof_flags & XFS_EOF_FLAGS_SYNC))
> - flags = SYNC_WAIT;
> -
> - return xfs_inode_ag_iterator(mp, 0, execute, flags, eofb, tag);
> + return xfs_inode_ag_iterator(mp, 0, execute, eofb, tag);
> }
>
> int
> @@ -1732,7 +1724,6 @@ xfs_prep_free_cowblocks(
> STATIC int
> xfs_inode_free_cowblocks(
> struct xfs_inode *ip,
> - int flags,
> void *args)
> {
> struct xfs_eofblocks *eofb = args;
> diff --git a/fs/xfs/xfs_icache.h b/fs/xfs/xfs_icache.h
> index 2d5ab9957d9f..e7f86ebd7b22 100644
> --- a/fs/xfs/xfs_icache.h
> +++ b/fs/xfs/xfs_icache.h
> @@ -72,8 +72,8 @@ void xfs_cowblocks_worker(struct work_struct *);
> void xfs_queue_cowblocks(struct xfs_mount *);
>
> int xfs_inode_ag_iterator(struct xfs_mount *mp, int iter_flags,
> - int (*execute)(struct xfs_inode *ip, int flags, void *args),
> - int flags, void *args, int tag);
> + int (*execute)(struct xfs_inode *ip, void *args),
> + void *args, int tag);
>
> int xfs_icache_inode_is_allocated(struct xfs_mount *mp, struct xfs_trans *tp,
> xfs_ino_t ino, bool *inuse);
> diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c
> index a9460bdcca87..4b61a683a43e 100644
> --- a/fs/xfs/xfs_qm_syscalls.c
> +++ b/fs/xfs/xfs_qm_syscalls.c
> @@ -729,9 +729,10 @@ xfs_qm_scall_getquota_next(
> STATIC int
> xfs_dqrele_inode(
> struct xfs_inode *ip,
> - int flags,
> void *args)
> {
> + uint *flags = args;
> +
> /* skip quota inodes */
> if (ip == ip->i_mount->m_quotainfo->qi_uquotaip ||
> ip == ip->i_mount->m_quotainfo->qi_gquotaip ||
> @@ -743,15 +744,15 @@ xfs_dqrele_inode(
> }
>
> xfs_ilock(ip, XFS_ILOCK_EXCL);
> - if ((flags & XFS_UQUOTA_ACCT) && ip->i_udquot) {
> + if ((*flags & XFS_UQUOTA_ACCT) && ip->i_udquot) {
> xfs_qm_dqrele(ip->i_udquot);
> ip->i_udquot = NULL;
> }
> - if ((flags & XFS_GQUOTA_ACCT) && ip->i_gdquot) {
> + if ((*flags & XFS_GQUOTA_ACCT) && ip->i_gdquot) {
> xfs_qm_dqrele(ip->i_gdquot);
> ip->i_gdquot = NULL;
> }
> - if ((flags & XFS_PQUOTA_ACCT) && ip->i_pdquot) {
> + if ((*flags & XFS_PQUOTA_ACCT) && ip->i_pdquot) {
> xfs_qm_dqrele(ip->i_pdquot);
> ip->i_pdquot = NULL;
> }
> @@ -768,10 +769,10 @@ xfs_dqrele_inode(
> */
> void
> xfs_qm_dqrele_all_inodes(
> - struct xfs_mount *mp,
> - uint flags)
> + struct xfs_mount *mp,
> + uint flags)
> {
> ASSERT(mp->m_quotainfo);
> xfs_inode_ag_iterator(mp, XFS_AGITER_INEW_WAIT, xfs_dqrele_inode,
> - flags, NULL, XFS_ICI_NO_TAG);
> + &flags, XFS_ICI_NO_TAG);
> }
>
next prev parent reply other threads:[~2020-05-22 12:04 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-22 2:53 [PATCH v4 00/12] xfs: refactor incore inode walking Darrick J. Wong
2020-05-22 2:53 ` [PATCH 01/12] xfs: move eofblocks conversion function to xfs_ioctl.c Darrick J. Wong
2020-05-22 12:03 ` Brian Foster
2020-05-22 2:53 ` [PATCH 02/12] xfs: replace open-coded XFS_ICI_NO_TAG Darrick J. Wong
2020-05-22 12:03 ` Brian Foster
2020-05-22 2:53 ` [PATCH 03/12] xfs: remove unused xfs_inode_ag_iterator function Darrick J. Wong
2020-05-22 12:03 ` Brian Foster
2020-05-22 2:53 ` [PATCH 04/12] xfs: remove xfs_inode_ag_iterator_flags Darrick J. Wong
2020-05-22 12:03 ` Brian Foster
2020-05-22 2:53 ` [PATCH 05/12] xfs: remove flags argument from xfs_inode_ag_walk Darrick J. Wong
2020-05-22 6:37 ` Christoph Hellwig
2020-05-22 12:03 ` Brian Foster [this message]
2020-05-22 2:54 ` [PATCH 06/12] xfs: remove __xfs_icache_free_eofblocks Darrick J. Wong
2020-05-22 12:03 ` Brian Foster
2020-05-22 2:54 ` [PATCH 07/12] xfs: refactor eofb matching into a single helper Darrick J. Wong
2020-05-22 6:38 ` Christoph Hellwig
2020-05-22 12:23 ` Brian Foster
2020-05-22 2:54 ` [PATCH 08/12] xfs: fix inode ag walk predicate function return values Darrick J. Wong
2020-05-22 12:23 ` Brian Foster
2020-05-22 2:54 ` [PATCH 09/12] xfs: use bool for done in xfs_inode_ag_walk Darrick J. Wong
2020-05-22 12:23 ` Brian Foster
2020-05-22 2:54 ` [PATCH 10/12] xfs: move xfs_inode_ag_iterator to be closer to the perag walking code Darrick J. Wong
2020-05-22 12:23 ` Brian Foster
2020-05-22 2:54 ` [PATCH 11/12] xfs: straighten out all the naming around incore inode tree walks Darrick J. Wong
2020-05-22 6:38 ` Christoph Hellwig
2020-05-22 12:23 ` Brian Foster
2020-05-22 2:54 ` [PATCH 12/12] xfs: rearrange xfs_inode_walk_ag parameters Darrick J. Wong
2020-05-22 6:39 ` Christoph Hellwig
2020-05-22 12:23 ` Brian Foster
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=20200522120343.GF50656@bfoster \
--to=bfoster@redhat.com \
--cc=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;
as well as URLs for NNTP newsgroup(s).