From: "Darrick J. Wong" <djwong@kernel.org>
To: Hans Holmberg <Hans.Holmberg@wdc.com>
Cc: "linux-xfs@vger.kernel.org" <linux-xfs@vger.kernel.org>,
Carlos Maiolino <cem@kernel.org>,
Dave Chinner <david@fromorbit.com>, hch <hch@lst.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] xfs: free the item in xfs_mru_cache_insert on failure
Date: Wed, 14 May 2025 09:04:13 -0700 [thread overview]
Message-ID: <20250514160413.GL2701446@frogsfrogsfrogs> (raw)
In-Reply-To: <20250514104937.15380-2-hans.holmberg@wdc.com>
On Wed, May 14, 2025 at 10:50:37AM +0000, Hans Holmberg wrote:
> From: Christoph Hellwig <hch@lst.de>
>
> Call the provided free_func when xfs_mru_cache_insert as that's what
> the callers need to do anyway.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Hans Holmberg <hans.holmberg@wdc.com>
Looks ok,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> fs/xfs/xfs_filestream.c | 15 ++++-----------
> fs/xfs/xfs_mru_cache.c | 15 ++++++++++++---
> 2 files changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c
> index a961aa420c48..044918fbae06 100644
> --- a/fs/xfs/xfs_filestream.c
> +++ b/fs/xfs/xfs_filestream.c
> @@ -304,11 +304,9 @@ xfs_filestream_create_association(
> * for us, so all we need to do here is take another active reference to
> * the perag for the cached association.
> *
> - * If we fail to store the association, we need to drop the fstrms
> - * counter as well as drop the perag reference we take here for the
> - * item. We do not need to return an error for this failure - as long as
> - * we return a referenced AG, the allocation can still go ahead just
> - * fine.
> + * If we fail to store the association, we do not need to return an
> + * error for this failure - as long as we return a referenced AG, the
> + * allocation can still go ahead just fine.
> */
> item = kmalloc(sizeof(*item), GFP_KERNEL | __GFP_RETRY_MAYFAIL);
> if (!item)
> @@ -316,14 +314,9 @@ xfs_filestream_create_association(
>
> atomic_inc(&pag_group(args->pag)->xg_active_ref);
> item->pag = args->pag;
> - error = xfs_mru_cache_insert(mp->m_filestream, pino, &item->mru);
> - if (error)
> - goto out_free_item;
> + xfs_mru_cache_insert(mp->m_filestream, pino, &item->mru);
> return 0;
>
> -out_free_item:
> - xfs_perag_rele(item->pag);
> - kfree(item);
> out_put_fstrms:
> atomic_dec(&args->pag->pagf_fstrms);
> return 0;
> diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c
> index d0f5b403bdbe..08443ceec329 100644
> --- a/fs/xfs/xfs_mru_cache.c
> +++ b/fs/xfs/xfs_mru_cache.c
> @@ -414,6 +414,8 @@ xfs_mru_cache_destroy(
> * To insert an element, call xfs_mru_cache_insert() with the data store, the
> * element's key and the client data pointer. This function returns 0 on
> * success or ENOMEM if memory for the data element couldn't be allocated.
> + *
> + * The passed in elem is freed through the per-cache free_func on failure.
> */
> int
> xfs_mru_cache_insert(
> @@ -421,14 +423,15 @@ xfs_mru_cache_insert(
> unsigned long key,
> struct xfs_mru_cache_elem *elem)
> {
> - int error;
> + int error = -EINVAL;
>
> ASSERT(mru && mru->lists);
> if (!mru || !mru->lists)
> - return -EINVAL;
> + goto out_free;
>
> + error = -ENOMEM;
> if (radix_tree_preload(GFP_KERNEL))
> - return -ENOMEM;
> + goto out_free;
>
> INIT_LIST_HEAD(&elem->list_node);
> elem->key = key;
> @@ -440,6 +443,12 @@ xfs_mru_cache_insert(
> _xfs_mru_cache_list_insert(mru, elem);
> spin_unlock(&mru->lock);
>
> + if (error)
> + goto out_free;
> + return 0;
> +
> +out_free:
> + mru->free_func(mru->data, elem);
> return error;
> }
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2025-05-14 16:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-14 10:50 [PATCH 0/2] Add mru cache for inode to zone allocation mapping Hans Holmberg
2025-05-14 10:50 ` [PATCH 1/2] xfs: free the item in xfs_mru_cache_insert on failure Hans Holmberg
2025-05-14 13:59 ` Carlos Maiolino
2025-05-14 16:04 ` Darrick J. Wong [this message]
2025-05-14 10:50 ` [PATCH 2/2] xfs: add inode to zone caching for data placement Hans Holmberg
2025-05-14 13:00 ` hch
2025-05-14 16:05 ` Darrick J. Wong
2025-05-14 13:00 ` [PATCH 0/2] Add mru cache for inode to zone allocation mapping hch
2025-05-14 13:51 ` Carlos Maiolino
2025-05-14 13:55 ` hch
2025-05-14 13:52 ` Carlos Maiolino
2025-05-14 17:30 ` Carlos Maiolino
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=20250514160413.GL2701446@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=Hans.Holmberg@wdc.com \
--cc=cem@kernel.org \
--cc=david@fromorbit.com \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.