FAILED: patch "[PATCH] f2fs: factor out victim_entry usage from general rb_tree use" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 043d2d00b44310f84c0593c63e51fae88c829cdd
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023051314-unaligned-reflux-22ef@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
043d2d00b443 ("f2fs: factor out victim_entry usage from general rb_tree use") 72840cccc0a1 ("f2fs: allocate the extent_cache by default") e7547daccd6a ("f2fs: refactor extent_cache to support for read and more") 749d543c0d45 ("f2fs: remove unnecessary __init_extent_tree") 3bac20a8f011 ("f2fs: move internal functions into extent_cache.c") 12607c1ba763 ("f2fs: specify extent cache for read explicitly")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 043d2d00b44310f84c0593c63e51fae88c829cdd Mon Sep 17 00:00:00 2001
From: Jaegeuk Kim <[email protected]>
Date: Fri, 10 Mar 2023 10:04:26 -0800
Subject: [PATCH] f2fs: factor out victim_entry usage from general rb_tree use
Let's reduce the complexity of mixed use of rb_tree in victim_entry from extent_cache and discard_cmd.
This should fix arm32 memory alignment issue caused by shared rb_entry.
[struct victim_entry] [struct rb_entry]
[0] struct rb_node rb_node; [0] struct rb_node rb_node;
union {
struct {
unsigned int ofs;
unsigned int len;
};
[16] unsigned long long mtime; [12] unsigned long long key;
} __packed;fs/f2fs/extent_cache.c +1 -35
@@ -204,29 +204,6 @@ struct rb_entry *f2fs_lookup_rb_tree(struct rb_root_cached *root,return re; } -struct rb_node **f2fs_lookup_rb_tree_ext (struct f2fs_sb_info *sbi, -struct rb_root_cached *root, -struct rb_node **parent, -unsigned long long key,bool *leftmost) -{ -struct rb_node **p = &root->rb_root.rb_node; -struct rb_entry *re; - -while (*p) { - *parent = *p; - re = rb_entry(*parent, struct rb_entry, rb_node); - -if (key < re->key) { - p = &(*p)->rb_left; - }else { - p = &(*p)->rb_right; - *leftmost = false; - } - } - -return p; -} - struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi, struct rb_root_cached *root, struct rb_node **parent,
@@ -335,7 +312,7 @@ struct rb_entry *f2fs_lookup_rb_tree_ret(struct rb_root_cached *root, }bool f2fs_check_rb_tree_consistence (struct f2fs_sb_info *sbi, -struct rb_root_cached *root,bool check_key) +struct rb_root_cached *root) {#ifdef CONFIG_F2FS_CHECK_FS struct rb_node *cur =rb_first_cached (root), *next;
@@ -352,23 +329,12 @@ bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi, cur_re = rb_entry(cur, struct rb_entry, rb_node); next_re = rb_entry(next, struct rb_entry, rb_node); -if (check_key) { -if (cur_re->key > next_re->key) { -f2fs_info (sbi,"inconsistent rbtree, " -"cur(%llu) next(%llu)" , - cur_re->key, next_re->key); -return false; - } - goto next; - } -if (cur_re->ofs + cur_re->len > next_re->ofs) {f2fs_info (sbi,"inconsistent rbtree, cur(%u, %u) next(%u, %u)" , cur_re->ofs, cur_re->len, next_re->ofs, next_re->len);return false; } -next: cur = next; }#endif
fs/f2fs/f2fs.h +3 -12
@@ -630,13 +630,8 @@ enum extent_type {struct rb_entry {struct rb_node rb_node;/* rb node located in rb-tree */ -union { -struct { -unsigned int ofs;/* start offset of the entry */ -unsigned int len;/* length of the entry */ - }; -unsigned long long key;/* 64-bits key */ - } __packed; +unsigned int ofs;/* start offset of the entry */ +unsigned int len;/* length of the entry */ };struct extent_info {
@@ -4139,10 +4134,6 @@ void f2fs_leave_shrinker(struct f2fs_sb_info *sbi);bool sanity_check_extent_cache (struct inode *inode);struct rb_entry *f2fs_lookup_rb_tree (struct rb_root_cached *root,struct rb_entry *cached_re,unsigned int ofs); -struct rb_node **f2fs_lookup_rb_tree_ext (struct f2fs_sb_info *sbi, -struct rb_root_cached *root, -struct rb_node **parent, -unsigned long long key,bool *left_most); struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi, struct rb_root_cached *root, struct rb_node **parent,
@@ -4153,7 +4144,7 @@ struct rb_entry *f2fs_lookup_rb_tree_ret(struct rb_root_cached *root, struct rb_node ***insert_p, struct rb_node **insert_parent, bool force, bool *leftmost);bool f2fs_check_rb_tree_consistence (struct f2fs_sb_info *sbi, -struct rb_root_cached *root,bool check_key); +struct rb_root_cached *root);void f2fs_init_extent_tree (struct inode *inode);void f2fs_drop_extent_tree (struct inode *inode);void f2fs_destroy_extent_node (struct inode *inode);
fs/f2fs/gc.c +85 -54
220 lines not on this page · raw message
fs/f2fs/gc.h +2 -12
@@ -55,20 +55,10 @@ struct gc_inode_list {struct radix_tree_root iroot; }; -struct victim_info { -unsigned long long mtime;/* mtime of section */ -unsigned int segno;/* section No. */ -}; -struct victim_entry {struct rb_node rb_node;/* rb node located in rb-tree */ -union { -struct { -unsigned long long mtime;/* mtime of section */ -unsigned int segno;/* segment No. */ - }; -struct victim_info vi;/* victim info */ - }; +unsigned long long mtime;/* mtime of section */ +unsigned int segno;/* segment No. */ struct list_head list; };
fs/f2fs/segment.c +2 -2
@@ -1478,7 +1478,7 @@ static int __issue_discard_cmd(struct f2fs_sb_info *sbi, goto next;if (unlikely (dcc->rbtree_check))f2fs_bug_on (sbi, !f2fs_check_rb_tree_consistence (sbi, - &dcc->root, false)); + &dcc->root));blk_start_plug (&plug);list_for_each_entry_safe (dc, tmp, pend_list, list) {f2fs_bug_on (sbi, dc->state !=D_PREP );
@@ -2965,7 +2965,7 @@ static unsigned int __issue_discard_cmd_range(struct f2fs_sb_info *sbi,mutex_lock (&dcc->cmd_lock);if (unlikely (dcc->rbtree_check))f2fs_bug_on (sbi, !f2fs_check_rb_tree_consistence (sbi, - &dcc->root, false)); + &dcc->root)); dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root, NULL, start,