From: Jaegeuk Kim <jaegeuk.kim@samsung.com>
To: Gu Zheng <guz.fnst@cn.fujitsu.com>
Cc: f2fs <linux-f2fs-devel@lists.sourceforge.net>,
fsdevel <linux-fsdevel@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Gao feng <gaofeng@cn.fujitsu.com>,
Haicheng Li <haicheng.li@linux.intel.com>
Subject: Re: [PATCH V2] f2fs: introduce f2fs_kmem_cache_alloc to hide the unfailed, kmem cache allocation
Date: Tue, 22 Oct 2013 21:30:05 +0900 [thread overview]
Message-ID: <1382445005.992.70.camel@kjgkr> (raw)
In-Reply-To: <526620AA.60007@cn.fujitsu.com>
Hi,
Looks good to me.
Thanks,
2013-10-22 (화), 14:52 +0800, Gu Zheng:
> Introduce the unfailed version of kmem_cache_alloc named f2fs_kmem_cache_alloc
> to hide the retry routine and make the code a bit cleaner.
>
> v2:
> Fix the wrong use of 'retry' tag pointed out by Gao feng.
> Use more neat code to remove redundant tag suggested by Haicheng Li.
>
> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
> ---
> fs/f2fs/checkpoint.c | 26 +++++++-------------------
> fs/f2fs/f2fs.h | 15 +++++++++++++++
> fs/f2fs/gc.c | 8 ++------
> fs/f2fs/node.c | 27 +++++++++++----------------
> 4 files changed, 35 insertions(+), 41 deletions(-)
>
> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> index 8d16071..6fb484c 100644
> --- a/fs/f2fs/checkpoint.c
> +++ b/fs/f2fs/checkpoint.c
> @@ -226,12 +226,8 @@ void add_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
> break;
> orphan = NULL;
> }
> -retry:
> - new = kmem_cache_alloc(orphan_entry_slab, GFP_ATOMIC);
> - if (!new) {
> - cond_resched();
> - goto retry;
> - }
> +
> + new = f2fs_kmem_cache_alloc(orphan_entry_slab, GFP_ATOMIC);
> new->ino = ino;
>
> /* add new_oentry into list which is sorted by inode number */
> @@ -484,12 +480,8 @@ void set_dirty_dir_page(struct inode *inode, struct page *page)
>
> if (!S_ISDIR(inode->i_mode))
> return;
> -retry:
> - new = kmem_cache_alloc(inode_entry_slab, GFP_NOFS);
> - if (!new) {
> - cond_resched();
> - goto retry;
> - }
> +
> + new = f2fs_kmem_cache_alloc(inode_entry_slab, GFP_NOFS);
> new->inode = inode;
> INIT_LIST_HEAD(&new->list);
>
> @@ -506,13 +498,9 @@ retry:
> void add_dirty_dir_inode(struct inode *inode)
> {
> struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
> - struct dir_inode_entry *new;
> -retry:
> - new = kmem_cache_alloc(inode_entry_slab, GFP_NOFS);
> - if (!new) {
> - cond_resched();
> - goto retry;
> - }
> + struct dir_inode_entry *new =
> + f2fs_kmem_cache_alloc(inode_entry_slab, GFP_NOFS);
> +
> new->inode = inode;
> INIT_LIST_HEAD(&new->list);
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 171c52f..2949275 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -18,6 +18,7 @@
> #include <linux/crc32.h>
> #include <linux/magic.h>
> #include <linux/kobject.h>
> +#include <linux/sched.h>
>
> /*
> * For mount options
> @@ -787,6 +788,20 @@ static inline struct kmem_cache *f2fs_kmem_cache_create(const char *name,
> return kmem_cache_create(name, size, 0, SLAB_RECLAIM_ACCOUNT, ctor);
> }
>
> +static inline void *f2fs_kmem_cache_alloc(struct kmem_cache *cachep,
> + gfp_t flags)
> +{
> + void *entry;
> +retry:
> + entry = kmem_cache_alloc(cachep, flags);
> + if (!entry) {
> + cond_resched();
> + goto retry;
> + }
> +
> + return entry;
> +}
> +
> #define RAW_IS_INODE(p) ((p)->footer.nid == (p)->footer.ino)
>
> static inline bool IS_INODE(struct page *page)
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index fbad968..7914b92 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -361,12 +361,8 @@ static void add_gc_inode(struct inode *inode, struct list_head *ilist)
> iput(inode);
> return;
> }
> -repeat:
> - new_ie = kmem_cache_alloc(winode_slab, GFP_NOFS);
> - if (!new_ie) {
> - cond_resched();
> - goto repeat;
> - }
> +
> + new_ie = f2fs_kmem_cache_alloc(winode_slab, GFP_NOFS);
> new_ie->inode = inode;
> list_add_tail(&new_ie->list, ilist);
> }
> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
> index ef80f79..4fa3fd5 100644
> --- a/fs/f2fs/node.c
> +++ b/fs/f2fs/node.c
> @@ -1296,23 +1296,18 @@ static int add_free_nid(struct f2fs_nm_info *nm_i, nid_t nid, bool build)
> if (nid == 0)
> return 0;
>
> - if (!build)
> - goto retry;
> -
> - /* do not add allocated nids */
> - read_lock(&nm_i->nat_tree_lock);
> - ne = __lookup_nat_cache(nm_i, nid);
> - if (ne && nat_get_blkaddr(ne) != NULL_ADDR)
> - allocated = true;
> - read_unlock(&nm_i->nat_tree_lock);
> - if (allocated)
> - return 0;
> -retry:
> - i = kmem_cache_alloc(free_nid_slab, GFP_NOFS);
> - if (!i) {
> - cond_resched();
> - goto retry;
> + if (build) {
> + /* do not add allocated nids */
> + read_lock(&nm_i->nat_tree_lock);
> + ne = __lookup_nat_cache(nm_i, nid);
> + if (ne && nat_get_blkaddr(ne) != NULL_ADDR)
> + allocated = true;
> + read_unlock(&nm_i->nat_tree_lock);
> + if (allocated)
> + return 0;
> }
> +
> + i = f2fs_kmem_cache_alloc(free_nid_slab, GFP_NOFS);
> i->nid = nid;
> i->state = NID_NEW;
>
--
Jaegeuk Kim
Samsung
prev parent reply other threads:[~2013-10-22 12:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-22 6:52 [PATCH V2] f2fs: introduce f2fs_kmem_cache_alloc to hide the unfailed, kmem cache allocation Gu Zheng
2013-10-22 6:52 ` Gu Zheng
2013-10-22 12:30 ` Jaegeuk Kim [this message]
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=1382445005.992.70.camel@kjgkr \
--to=jaegeuk.kim@samsung.com \
--cc=gaofeng@cn.fujitsu.com \
--cc=guz.fnst@cn.fujitsu.com \
--cc=haicheng.li@linux.intel.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@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.