From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Yangtao Li <frank.li@vivo.com>
Cc: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH] f2fs: remove struct victim_selection default_v_ops
Date: Mon, 3 Apr 2023 11:10:24 -0700 [thread overview]
Message-ID: <ZCsWkOFbn/x4tLp5@google.com> (raw)
In-Reply-To: <20230403084055.21482-1-frank.li@vivo.com>
On 04/03, Yangtao Li wrote:
> There is only single instance of these ops, so remove the indirection
> and call get_victim_by_default directly.
Originally this was intended to give a chance to provide other allocation
option. Anyway, it seems quit hard to do it anymore.
Minor tip is it'd be better to rename it to f2fs_get_victim().
>
> Signed-off-by: Yangtao Li <frank.li@vivo.com>
> ---
> fs/f2fs/f2fs.h | 5 ++++-
> fs/f2fs/gc.c | 12 +++---------
> fs/f2fs/segment.c | 7 ++++---
> fs/f2fs/segment.h | 7 -------
> 4 files changed, 11 insertions(+), 20 deletions(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 8d5124569a03..9a1ec5515121 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -3871,7 +3871,10 @@ void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
> int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count);
> int __init f2fs_create_garbage_collection_cache(void);
> void f2fs_destroy_garbage_collection_cache(void);
> -
> +/* victim selection function for cleaning and SSR */
> +int get_victim_by_default(struct f2fs_sb_info *sbi, unsigned int *result,
> + int gc_type, int type,
> + char alloc_mode, unsigned long long age);
> /*
> * recovery.c
> */
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index f1e0e01a5dd1..f3f0020633ad 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -741,7 +741,7 @@ static int f2fs_gc_pinned_control(struct inode *inode, int gc_type,
> * When it is called from SSR segment selection, it finds a segment
> * which has minimum valid blocks and removes it from dirty seglist.
> */
> -static int get_victim_by_default(struct f2fs_sb_info *sbi,
> +int get_victim_by_default(struct f2fs_sb_info *sbi,
> unsigned int *result, int gc_type, int type,
> char alloc_mode, unsigned long long age)
> {
> @@ -937,10 +937,6 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
> return ret;
> }
>
> -static const struct victim_selection default_v_ops = {
> - .get_victim = get_victim_by_default,
> -};
> -
> static struct inode *find_gc_inode(struct gc_inode_list *gc_list, nid_t ino)
> {
> struct inode_entry *ie;
> @@ -1671,8 +1667,8 @@ static int __get_victim(struct f2fs_sb_info *sbi, unsigned int *victim,
> int ret;
>
> down_write(&sit_i->sentry_lock);
> - ret = DIRTY_I(sbi)->v_ops->get_victim(sbi, victim, gc_type,
> - NO_CHECK_TYPE, LFS, 0);
> + ret = get_victim_by_default(sbi, victim, gc_type,
> + NO_CHECK_TYPE, LFS, 0);
> up_write(&sit_i->sentry_lock);
> return ret;
> }
> @@ -1969,8 +1965,6 @@ static void init_atgc_management(struct f2fs_sb_info *sbi)
>
> void f2fs_build_gc_manager(struct f2fs_sb_info *sbi)
> {
> - DIRTY_I(sbi)->v_ops = &default_v_ops;
> -
> sbi->gc_pin_file_threshold = DEF_GC_FAILED_PINNED_FILES;
>
> /* give warm/cold data area from slower device */
> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> index cb8aacbc5df6..c9e674fe477b 100644
> --- a/fs/f2fs/segment.c
> +++ b/fs/f2fs/segment.c
> @@ -2881,7 +2881,6 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
> int alloc_mode, unsigned long long age)
> {
> struct curseg_info *curseg = CURSEG_I(sbi, type);
> - const struct victim_selection *v_ops = DIRTY_I(sbi)->v_ops;
> unsigned segno = NULL_SEGNO;
> unsigned short seg_type = curseg->seg_type;
> int i, cnt;
> @@ -2890,7 +2889,8 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
> sanity_check_seg_type(sbi, seg_type);
>
> /* f2fs_need_SSR() already forces to do this */
> - if (!v_ops->get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) {
> + if (!get_victim_by_default(sbi, &segno, BG_GC,
> + seg_type, alloc_mode, age)) {
> curseg->next_segno = segno;
> return 1;
> }
> @@ -2917,7 +2917,8 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
> for (; cnt-- > 0; reversed ? i-- : i++) {
> if (i == seg_type)
> continue;
> - if (!v_ops->get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) {
> + if (!get_victim_by_default(sbi, &segno, BG_GC,
> + i, alloc_mode, age)) {
> curseg->next_segno = segno;
> return 1;
> }
> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
> index d66c9b636708..89619969ec85 100644
> --- a/fs/f2fs/segment.h
> +++ b/fs/f2fs/segment.h
> @@ -289,7 +289,6 @@ enum dirty_type {
> };
>
> struct dirty_seglist_info {
> - const struct victim_selection *v_ops; /* victim selction operation */
> unsigned long *dirty_segmap[NR_DIRTY_TYPE];
> unsigned long *dirty_secmap;
> struct mutex seglist_lock; /* lock for segment bitmaps */
> @@ -300,12 +299,6 @@ struct dirty_seglist_info {
> bool enable_pin_section; /* enable pinning section */
> };
>
> -/* victim selection function for cleaning and SSR */
> -struct victim_selection {
> - int (*get_victim)(struct f2fs_sb_info *, unsigned int *,
> - int, int, char, unsigned long long);
> -};
> -
> /* for active log information */
> struct curseg_info {
> struct mutex curseg_mutex; /* lock for consistency */
> --
> 2.35.1
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Yangtao Li <frank.li@vivo.com>
Cc: Chao Yu <chao@kernel.org>,
linux-f2fs-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] f2fs: remove struct victim_selection default_v_ops
Date: Mon, 3 Apr 2023 11:10:24 -0700 [thread overview]
Message-ID: <ZCsWkOFbn/x4tLp5@google.com> (raw)
In-Reply-To: <20230403084055.21482-1-frank.li@vivo.com>
On 04/03, Yangtao Li wrote:
> There is only single instance of these ops, so remove the indirection
> and call get_victim_by_default directly.
Originally this was intended to give a chance to provide other allocation
option. Anyway, it seems quit hard to do it anymore.
Minor tip is it'd be better to rename it to f2fs_get_victim().
>
> Signed-off-by: Yangtao Li <frank.li@vivo.com>
> ---
> fs/f2fs/f2fs.h | 5 ++++-
> fs/f2fs/gc.c | 12 +++---------
> fs/f2fs/segment.c | 7 ++++---
> fs/f2fs/segment.h | 7 -------
> 4 files changed, 11 insertions(+), 20 deletions(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 8d5124569a03..9a1ec5515121 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -3871,7 +3871,10 @@ void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
> int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count);
> int __init f2fs_create_garbage_collection_cache(void);
> void f2fs_destroy_garbage_collection_cache(void);
> -
> +/* victim selection function for cleaning and SSR */
> +int get_victim_by_default(struct f2fs_sb_info *sbi, unsigned int *result,
> + int gc_type, int type,
> + char alloc_mode, unsigned long long age);
> /*
> * recovery.c
> */
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index f1e0e01a5dd1..f3f0020633ad 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -741,7 +741,7 @@ static int f2fs_gc_pinned_control(struct inode *inode, int gc_type,
> * When it is called from SSR segment selection, it finds a segment
> * which has minimum valid blocks and removes it from dirty seglist.
> */
> -static int get_victim_by_default(struct f2fs_sb_info *sbi,
> +int get_victim_by_default(struct f2fs_sb_info *sbi,
> unsigned int *result, int gc_type, int type,
> char alloc_mode, unsigned long long age)
> {
> @@ -937,10 +937,6 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
> return ret;
> }
>
> -static const struct victim_selection default_v_ops = {
> - .get_victim = get_victim_by_default,
> -};
> -
> static struct inode *find_gc_inode(struct gc_inode_list *gc_list, nid_t ino)
> {
> struct inode_entry *ie;
> @@ -1671,8 +1667,8 @@ static int __get_victim(struct f2fs_sb_info *sbi, unsigned int *victim,
> int ret;
>
> down_write(&sit_i->sentry_lock);
> - ret = DIRTY_I(sbi)->v_ops->get_victim(sbi, victim, gc_type,
> - NO_CHECK_TYPE, LFS, 0);
> + ret = get_victim_by_default(sbi, victim, gc_type,
> + NO_CHECK_TYPE, LFS, 0);
> up_write(&sit_i->sentry_lock);
> return ret;
> }
> @@ -1969,8 +1965,6 @@ static void init_atgc_management(struct f2fs_sb_info *sbi)
>
> void f2fs_build_gc_manager(struct f2fs_sb_info *sbi)
> {
> - DIRTY_I(sbi)->v_ops = &default_v_ops;
> -
> sbi->gc_pin_file_threshold = DEF_GC_FAILED_PINNED_FILES;
>
> /* give warm/cold data area from slower device */
> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
> index cb8aacbc5df6..c9e674fe477b 100644
> --- a/fs/f2fs/segment.c
> +++ b/fs/f2fs/segment.c
> @@ -2881,7 +2881,6 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
> int alloc_mode, unsigned long long age)
> {
> struct curseg_info *curseg = CURSEG_I(sbi, type);
> - const struct victim_selection *v_ops = DIRTY_I(sbi)->v_ops;
> unsigned segno = NULL_SEGNO;
> unsigned short seg_type = curseg->seg_type;
> int i, cnt;
> @@ -2890,7 +2889,8 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
> sanity_check_seg_type(sbi, seg_type);
>
> /* f2fs_need_SSR() already forces to do this */
> - if (!v_ops->get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) {
> + if (!get_victim_by_default(sbi, &segno, BG_GC,
> + seg_type, alloc_mode, age)) {
> curseg->next_segno = segno;
> return 1;
> }
> @@ -2917,7 +2917,8 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
> for (; cnt-- > 0; reversed ? i-- : i++) {
> if (i == seg_type)
> continue;
> - if (!v_ops->get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) {
> + if (!get_victim_by_default(sbi, &segno, BG_GC,
> + i, alloc_mode, age)) {
> curseg->next_segno = segno;
> return 1;
> }
> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
> index d66c9b636708..89619969ec85 100644
> --- a/fs/f2fs/segment.h
> +++ b/fs/f2fs/segment.h
> @@ -289,7 +289,6 @@ enum dirty_type {
> };
>
> struct dirty_seglist_info {
> - const struct victim_selection *v_ops; /* victim selction operation */
> unsigned long *dirty_segmap[NR_DIRTY_TYPE];
> unsigned long *dirty_secmap;
> struct mutex seglist_lock; /* lock for segment bitmaps */
> @@ -300,12 +299,6 @@ struct dirty_seglist_info {
> bool enable_pin_section; /* enable pinning section */
> };
>
> -/* victim selection function for cleaning and SSR */
> -struct victim_selection {
> - int (*get_victim)(struct f2fs_sb_info *, unsigned int *,
> - int, int, char, unsigned long long);
> -};
> -
> /* for active log information */
> struct curseg_info {
> struct mutex curseg_mutex; /* lock for consistency */
> --
> 2.35.1
next prev parent reply other threads:[~2023-04-03 18:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-03 8:40 [f2fs-dev] [PATCH] f2fs: remove struct victim_selection default_v_ops Yangtao Li via Linux-f2fs-devel
2023-04-03 8:40 ` Yangtao Li
2023-04-03 18:10 ` Jaegeuk Kim [this message]
2023-04-03 18:10 ` Jaegeuk Kim
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=ZCsWkOFbn/x4tLp5@google.com \
--to=jaegeuk@kernel.org \
--cc=frank.li@vivo.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--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.