linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org,
	Ryusuke Konishi <konishi.ryusuke@gmail.com>,
	syzbot+0d5b462a6f07447991b3@syzkaller.appspotmail.com,
	syzbot+34ef28bb2aeb28724aa0@syzkaller.appspotmail.com,
	Hao Sun <sunhao.th@gmail.com>,
	David Hildenbrand <david@redhat.com>,
	Matthew Wilcox <willy@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.17 044/158] nilfs2: fix lockdep warnings in page operations for btree nodes
Date: Mon, 23 May 2022 19:03:21 +0200	[thread overview]
Message-ID: <20220523165837.771334678@linuxfoundation.org> (raw)
In-Reply-To: <20220523165830.581652127@linuxfoundation.org>

From: Ryusuke Konishi <konishi.ryusuke@gmail.com>

[ Upstream commit e897be17a441fa637cd166fc3de1445131e57692 ]

Patch series "nilfs2 lockdep warning fixes".

The first two are to resolve the lockdep warning issue, and the last one
is the accompanying cleanup and low priority.

Based on your comment, this series solves the issue by separating inode
object as needed.  Since I was worried about the impact of the object
composition changes, I tested the series carefully not to cause
regressions especially for delicate functions such like disk space
reclamation and snapshots.

This patch (of 3):

If CONFIG_LOCKDEP is enabled, nilfs2 hits lockdep warnings at
inode_to_wb() during page/folio operations for btree nodes:

  WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 inode_to_wb include/linux/backing-dev.h:269 [inline]
  WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 folio_account_dirtied mm/page-writeback.c:2460 [inline]
  WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 __folio_mark_dirty+0xa7c/0xe30 mm/page-writeback.c:2509
  Modules linked in:
  ...
  RIP: 0010:inode_to_wb include/linux/backing-dev.h:269 [inline]
  RIP: 0010:folio_account_dirtied mm/page-writeback.c:2460 [inline]
  RIP: 0010:__folio_mark_dirty+0xa7c/0xe30 mm/page-writeback.c:2509
  ...
  Call Trace:
    __set_page_dirty include/linux/pagemap.h:834 [inline]
    mark_buffer_dirty+0x4e6/0x650 fs/buffer.c:1145
    nilfs_btree_propagate_p fs/nilfs2/btree.c:1889 [inline]
    nilfs_btree_propagate+0x4ae/0xea0 fs/nilfs2/btree.c:2085
    nilfs_bmap_propagate+0x73/0x170 fs/nilfs2/bmap.c:337
    nilfs_collect_dat_data+0x45/0xd0 fs/nilfs2/segment.c:625
    nilfs_segctor_apply_buffers+0x14a/0x470 fs/nilfs2/segment.c:1009
    nilfs_segctor_scan_file+0x47a/0x700 fs/nilfs2/segment.c:1048
    nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1224 [inline]
    nilfs_segctor_collect fs/nilfs2/segment.c:1494 [inline]
    nilfs_segctor_do_construct+0x14f3/0x6c60 fs/nilfs2/segment.c:2036
    nilfs_segctor_construct+0x7a7/0xb30 fs/nilfs2/segment.c:2372
    nilfs_segctor_thread_construct fs/nilfs2/segment.c:2480 [inline]
    nilfs_segctor_thread+0x3c3/0xf90 fs/nilfs2/segment.c:2563
    kthread+0x405/0x4f0 kernel/kthread.c:327
    ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295

This is because nilfs2 uses two page caches for each inode and
inode->i_mapping never points to one of them, the btree node cache.

This causes inode_to_wb(inode) to refer to a different page cache than
the caller page/folio operations such like __folio_start_writeback(),
__folio_end_writeback(), or __folio_mark_dirty() acquired the lock.

This patch resolves the issue by allocating and using an additional
inode to hold the page cache of btree nodes.  The inode is attached
one-to-one to the traditional nilfs2 inode if it requires a block
mapping with b-tree.  This setup change is in memory only and does not
affect the disk format.

Link: https://lkml.kernel.org/r/1647867427-30498-1-git-send-email-konishi.ryusuke@gmail.com
Link: https://lkml.kernel.org/r/1647867427-30498-2-git-send-email-konishi.ryusuke@gmail.com
Link: https://lore.kernel.org/r/YXrYvIo8YRnAOJCj@casper.infradead.org
Link: https://lore.kernel.org/r/9a20b33d-b38f-b4a2-4742-c1eb5b8e4d6c@redhat.com
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Reported-by: syzbot+0d5b462a6f07447991b3@syzkaller.appspotmail.com
Reported-by: syzbot+34ef28bb2aeb28724aa0@syzkaller.appspotmail.com
Reported-by: Hao Sun <sunhao.th@gmail.com>
Reported-by: David Hildenbrand <david@redhat.com>
Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 fs/nilfs2/btnode.c  |  23 ++++++++--
 fs/nilfs2/btnode.h  |   1 +
 fs/nilfs2/btree.c   |  27 ++++++++----
 fs/nilfs2/gcinode.c |   7 +--
 fs/nilfs2/inode.c   | 104 ++++++++++++++++++++++++++++++++++++++------
 fs/nilfs2/mdt.c     |   7 +--
 fs/nilfs2/nilfs.h   |  14 +++---
 fs/nilfs2/page.c    |   7 ++-
 fs/nilfs2/segment.c |   9 ++--
 fs/nilfs2/super.c   |   5 +--
 10 files changed, 154 insertions(+), 50 deletions(-)

diff --git a/fs/nilfs2/btnode.c b/fs/nilfs2/btnode.c
index 66bdaa2cf496..ca611ac09f7c 100644
--- a/fs/nilfs2/btnode.c
+++ b/fs/nilfs2/btnode.c
@@ -20,6 +20,23 @@
 #include "page.h"
 #include "btnode.h"
 
+
+/**
+ * nilfs_init_btnc_inode - initialize B-tree node cache inode
+ * @btnc_inode: inode to be initialized
+ *
+ * nilfs_init_btnc_inode() sets up an inode for B-tree node cache.
+ */
+void nilfs_init_btnc_inode(struct inode *btnc_inode)
+{
+	struct nilfs_inode_info *ii = NILFS_I(btnc_inode);
+
+	btnc_inode->i_mode = S_IFREG;
+	ii->i_flags = 0;
+	memset(&ii->i_bmap_data, 0, sizeof(struct nilfs_bmap));
+	mapping_set_gfp_mask(btnc_inode->i_mapping, GFP_NOFS);
+}
+
 void nilfs_btnode_cache_clear(struct address_space *btnc)
 {
 	invalidate_mapping_pages(btnc, 0, -1);
@@ -29,7 +46,7 @@ void nilfs_btnode_cache_clear(struct address_space *btnc)
 struct buffer_head *
 nilfs_btnode_create_block(struct address_space *btnc, __u64 blocknr)
 {
-	struct inode *inode = NILFS_BTNC_I(btnc);
+	struct inode *inode = btnc->host;
 	struct buffer_head *bh;
 
 	bh = nilfs_grab_buffer(inode, btnc, blocknr, BIT(BH_NILFS_Node));
@@ -57,7 +74,7 @@ int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr,
 			      struct buffer_head **pbh, sector_t *submit_ptr)
 {
 	struct buffer_head *bh;
-	struct inode *inode = NILFS_BTNC_I(btnc);
+	struct inode *inode = btnc->host;
 	struct page *page;
 	int err;
 
@@ -157,7 +174,7 @@ int nilfs_btnode_prepare_change_key(struct address_space *btnc,
 				    struct nilfs_btnode_chkey_ctxt *ctxt)
 {
 	struct buffer_head *obh, *nbh;
-	struct inode *inode = NILFS_BTNC_I(btnc);
+	struct inode *inode = btnc->host;
 	__u64 oldkey = ctxt->oldkey, newkey = ctxt->newkey;
 	int err;
 
diff --git a/fs/nilfs2/btnode.h b/fs/nilfs2/btnode.h
index 11663650add7..bd5544e63a01 100644
--- a/fs/nilfs2/btnode.h
+++ b/fs/nilfs2/btnode.h
@@ -30,6 +30,7 @@ struct nilfs_btnode_chkey_ctxt {
 	struct buffer_head *newbh;
 };
 
+void nilfs_init_btnc_inode(struct inode *btnc_inode);
 void nilfs_btnode_cache_clear(struct address_space *);
 struct buffer_head *nilfs_btnode_create_block(struct address_space *btnc,
 					      __u64 blocknr);
diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c
index 3594eabe1419..f544c22fff78 100644
--- a/fs/nilfs2/btree.c
+++ b/fs/nilfs2/btree.c
@@ -58,7 +58,8 @@ static void nilfs_btree_free_path(struct nilfs_btree_path *path)
 static int nilfs_btree_get_new_block(const struct nilfs_bmap *btree,
 				     __u64 ptr, struct buffer_head **bhp)
 {
-	struct address_space *btnc = &NILFS_BMAP_I(btree)->i_btnode_cache;
+	struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode;
+	struct address_space *btnc = btnc_inode->i_mapping;
 	struct buffer_head *bh;
 
 	bh = nilfs_btnode_create_block(btnc, ptr);
@@ -470,7 +471,8 @@ static int __nilfs_btree_get_block(const struct nilfs_bmap *btree, __u64 ptr,
 				   struct buffer_head **bhp,
 				   const struct nilfs_btree_readahead_info *ra)
 {
-	struct address_space *btnc = &NILFS_BMAP_I(btree)->i_btnode_cache;
+	struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode;
+	struct address_space *btnc = btnc_inode->i_mapping;
 	struct buffer_head *bh, *ra_bh;
 	sector_t submit_ptr = 0;
 	int ret;
@@ -1741,6 +1743,10 @@ nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *btree, __u64 key,
 		dat = nilfs_bmap_get_dat(btree);
 	}
 
+	ret = nilfs_attach_btree_node_cache(&NILFS_BMAP_I(btree)->vfs_inode);
+	if (ret < 0)
+		return ret;
+
 	ret = nilfs_bmap_prepare_alloc_ptr(btree, dreq, dat);
 	if (ret < 0)
 		return ret;
@@ -1913,7 +1919,7 @@ static int nilfs_btree_prepare_update_v(struct nilfs_bmap *btree,
 		path[level].bp_ctxt.newkey = path[level].bp_newreq.bpr_ptr;
 		path[level].bp_ctxt.bh = path[level].bp_bh;
 		ret = nilfs_btnode_prepare_change_key(
-			&NILFS_BMAP_I(btree)->i_btnode_cache,
+			NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
 			&path[level].bp_ctxt);
 		if (ret < 0) {
 			nilfs_dat_abort_update(dat,
@@ -1939,7 +1945,7 @@ static void nilfs_btree_commit_update_v(struct nilfs_bmap *btree,
 
 	if (buffer_nilfs_node(path[level].bp_bh)) {
 		nilfs_btnode_commit_change_key(
-			&NILFS_BMAP_I(btree)->i_btnode_cache,
+			NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
 			&path[level].bp_ctxt);
 		path[level].bp_bh = path[level].bp_ctxt.bh;
 	}
@@ -1958,7 +1964,7 @@ static void nilfs_btree_abort_update_v(struct nilfs_bmap *btree,
 			       &path[level].bp_newreq.bpr_req);
 	if (buffer_nilfs_node(path[level].bp_bh))
 		nilfs_btnode_abort_change_key(
-			&NILFS_BMAP_I(btree)->i_btnode_cache,
+			NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
 			&path[level].bp_ctxt);
 }
 
@@ -2134,7 +2140,8 @@ static void nilfs_btree_add_dirty_buffer(struct nilfs_bmap *btree,
 static void nilfs_btree_lookup_dirty_buffers(struct nilfs_bmap *btree,
 					     struct list_head *listp)
 {
-	struct address_space *btcache = &NILFS_BMAP_I(btree)->i_btnode_cache;
+	struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode;
+	struct address_space *btcache = btnc_inode->i_mapping;
 	struct list_head lists[NILFS_BTREE_LEVEL_MAX];
 	struct pagevec pvec;
 	struct buffer_head *bh, *head;
@@ -2188,12 +2195,12 @@ static int nilfs_btree_assign_p(struct nilfs_bmap *btree,
 		path[level].bp_ctxt.newkey = blocknr;
 		path[level].bp_ctxt.bh = *bh;
 		ret = nilfs_btnode_prepare_change_key(
-			&NILFS_BMAP_I(btree)->i_btnode_cache,
+			NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
 			&path[level].bp_ctxt);
 		if (ret < 0)
 			return ret;
 		nilfs_btnode_commit_change_key(
-			&NILFS_BMAP_I(btree)->i_btnode_cache,
+			NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping,
 			&path[level].bp_ctxt);
 		*bh = path[level].bp_ctxt.bh;
 	}
@@ -2398,6 +2405,10 @@ int nilfs_btree_init(struct nilfs_bmap *bmap)
 
 	if (nilfs_btree_root_broken(nilfs_btree_get_root(bmap), bmap->b_inode))
 		ret = -EIO;
+	else
+		ret = nilfs_attach_btree_node_cache(
+			&NILFS_BMAP_I(bmap)->vfs_inode);
+
 	return ret;
 }
 
diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c
index a8f5315f01e3..04fdd420eae7 100644
--- a/fs/nilfs2/gcinode.c
+++ b/fs/nilfs2/gcinode.c
@@ -126,9 +126,10 @@ int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff,
 int nilfs_gccache_submit_read_node(struct inode *inode, sector_t pbn,
 				   __u64 vbn, struct buffer_head **out_bh)
 {
+	struct inode *btnc_inode = NILFS_I(inode)->i_assoc_inode;
 	int ret;
 
-	ret = nilfs_btnode_submit_block(&NILFS_I(inode)->i_btnode_cache,
+	ret = nilfs_btnode_submit_block(btnc_inode->i_mapping,
 					vbn ? : pbn, pbn, REQ_OP_READ, 0,
 					out_bh, &pbn);
 	if (ret == -EEXIST) /* internal code (cache hit) */
@@ -170,7 +171,7 @@ int nilfs_init_gcinode(struct inode *inode)
 	ii->i_flags = 0;
 	nilfs_bmap_init_gc(ii->i_bmap);
 
-	return 0;
+	return nilfs_attach_btree_node_cache(inode);
 }
 
 /**
@@ -185,7 +186,7 @@ void nilfs_remove_all_gcinodes(struct the_nilfs *nilfs)
 		ii = list_first_entry(head, struct nilfs_inode_info, i_dirty);
 		list_del_init(&ii->i_dirty);
 		truncate_inode_pages(&ii->vfs_inode.i_data, 0);
-		nilfs_btnode_cache_clear(&ii->i_btnode_cache);
+		nilfs_btnode_cache_clear(ii->i_assoc_inode->i_mapping);
 		iput(&ii->vfs_inode);
 	}
 }
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index e3d807d5b83a..56b642159e25 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -29,12 +29,14 @@
  * @cno: checkpoint number
  * @root: pointer on NILFS root object (mounted checkpoint)
  * @for_gc: inode for GC flag
+ * @for_btnc: inode for B-tree node cache flag
  */
 struct nilfs_iget_args {
 	u64 ino;
 	__u64 cno;
 	struct nilfs_root *root;
-	int for_gc;
+	bool for_gc;
+	bool for_btnc;
 };
 
 static int nilfs_iget_test(struct inode *inode, void *opaque);
@@ -314,7 +316,8 @@ static int nilfs_insert_inode_locked(struct inode *inode,
 				     unsigned long ino)
 {
 	struct nilfs_iget_args args = {
-		.ino = ino, .root = root, .cno = 0, .for_gc = 0
+		.ino = ino, .root = root, .cno = 0, .for_gc = false,
+		.for_btnc = false
 	};
 
 	return insert_inode_locked4(inode, ino, nilfs_iget_test, &args);
@@ -527,6 +530,13 @@ static int nilfs_iget_test(struct inode *inode, void *opaque)
 		return 0;
 
 	ii = NILFS_I(inode);
+	if (test_bit(NILFS_I_BTNC, &ii->i_state)) {
+		if (!args->for_btnc)
+			return 0;
+	} else if (args->for_btnc) {
+		return 0;
+	}
+
 	if (!test_bit(NILFS_I_GCINODE, &ii->i_state))
 		return !args->for_gc;
 
@@ -538,15 +548,15 @@ static int nilfs_iget_set(struct inode *inode, void *opaque)
 	struct nilfs_iget_args *args = opaque;
 
 	inode->i_ino = args->ino;
-	if (args->for_gc) {
+	NILFS_I(inode)->i_cno = args->cno;
+	NILFS_I(inode)->i_root = args->root;
+	if (args->root && args->ino == NILFS_ROOT_INO)
+		nilfs_get_root(args->root);
+
+	if (args->for_gc)
 		NILFS_I(inode)->i_state = BIT(NILFS_I_GCINODE);
-		NILFS_I(inode)->i_cno = args->cno;
-		NILFS_I(inode)->i_root = NULL;
-	} else {
-		if (args->root && args->ino == NILFS_ROOT_INO)
-			nilfs_get_root(args->root);
-		NILFS_I(inode)->i_root = args->root;
-	}
+	if (args->for_btnc)
+		NILFS_I(inode)->i_state |= BIT(NILFS_I_BTNC);
 	return 0;
 }
 
@@ -554,7 +564,8 @@ struct inode *nilfs_ilookup(struct super_block *sb, struct nilfs_root *root,
 			    unsigned long ino)
 {
 	struct nilfs_iget_args args = {
-		.ino = ino, .root = root, .cno = 0, .for_gc = 0
+		.ino = ino, .root = root, .cno = 0, .for_gc = false,
+		.for_btnc = false
 	};
 
 	return ilookup5(sb, ino, nilfs_iget_test, &args);
@@ -564,7 +575,8 @@ struct inode *nilfs_iget_locked(struct super_block *sb, struct nilfs_root *root,
 				unsigned long ino)
 {
 	struct nilfs_iget_args args = {
-		.ino = ino, .root = root, .cno = 0, .for_gc = 0
+		.ino = ino, .root = root, .cno = 0, .for_gc = false,
+		.for_btnc = false
 	};
 
 	return iget5_locked(sb, ino, nilfs_iget_test, nilfs_iget_set, &args);
@@ -595,7 +607,8 @@ struct inode *nilfs_iget_for_gc(struct super_block *sb, unsigned long ino,
 				__u64 cno)
 {
 	struct nilfs_iget_args args = {
-		.ino = ino, .root = NULL, .cno = cno, .for_gc = 1
+		.ino = ino, .root = NULL, .cno = cno, .for_gc = true,
+		.for_btnc = false
 	};
 	struct inode *inode;
 	int err;
@@ -615,6 +628,68 @@ struct inode *nilfs_iget_for_gc(struct super_block *sb, unsigned long ino,
 	return inode;
 }
 
+/**
+ * nilfs_attach_btree_node_cache - attach a B-tree node cache to the inode
+ * @inode: inode object
+ *
+ * nilfs_attach_btree_node_cache() attaches a B-tree node cache to @inode,
+ * or does nothing if the inode already has it.  This function allocates
+ * an additional inode to maintain page cache of B-tree nodes one-on-one.
+ *
+ * Return Value: On success, 0 is returned. On errors, one of the following
+ * negative error code is returned.
+ *
+ * %-ENOMEM - Insufficient memory available.
+ */
+int nilfs_attach_btree_node_cache(struct inode *inode)
+{
+	struct nilfs_inode_info *ii = NILFS_I(inode);
+	struct inode *btnc_inode;
+	struct nilfs_iget_args args;
+
+	if (ii->i_assoc_inode)
+		return 0;
+
+	args.ino = inode->i_ino;
+	args.root = ii->i_root;
+	args.cno = ii->i_cno;
+	args.for_gc = test_bit(NILFS_I_GCINODE, &ii->i_state) != 0;
+	args.for_btnc = true;
+
+	btnc_inode = iget5_locked(inode->i_sb, inode->i_ino, nilfs_iget_test,
+				  nilfs_iget_set, &args);
+	if (unlikely(!btnc_inode))
+		return -ENOMEM;
+	if (btnc_inode->i_state & I_NEW) {
+		nilfs_init_btnc_inode(btnc_inode);
+		unlock_new_inode(btnc_inode);
+	}
+	NILFS_I(btnc_inode)->i_assoc_inode = inode;
+	NILFS_I(btnc_inode)->i_bmap = ii->i_bmap;
+	ii->i_assoc_inode = btnc_inode;
+
+	return 0;
+}
+
+/**
+ * nilfs_detach_btree_node_cache - detach the B-tree node cache from the inode
+ * @inode: inode object
+ *
+ * nilfs_detach_btree_node_cache() detaches the B-tree node cache and its
+ * holder inode bound to @inode, or does nothing if @inode doesn't have it.
+ */
+void nilfs_detach_btree_node_cache(struct inode *inode)
+{
+	struct nilfs_inode_info *ii = NILFS_I(inode);
+	struct inode *btnc_inode = ii->i_assoc_inode;
+
+	if (btnc_inode) {
+		NILFS_I(btnc_inode)->i_assoc_inode = NULL;
+		ii->i_assoc_inode = NULL;
+		iput(btnc_inode);
+	}
+}
+
 void nilfs_write_inode_common(struct inode *inode,
 			      struct nilfs_inode *raw_inode, int has_bmap)
 {
@@ -762,7 +837,8 @@ static void nilfs_clear_inode(struct inode *inode)
 	if (test_bit(NILFS_I_BMAP, &ii->i_state))
 		nilfs_bmap_clear(ii->i_bmap);
 
-	nilfs_btnode_cache_clear(&ii->i_btnode_cache);
+	if (!test_bit(NILFS_I_BTNC, &ii->i_state))
+		nilfs_detach_btree_node_cache(inode);
 
 	if (ii->i_root && inode->i_ino == NILFS_ROOT_INO)
 		nilfs_put_root(ii->i_root);
diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c
index 4b3d33cf0041..b26996420401 100644
--- a/fs/nilfs2/mdt.c
+++ b/fs/nilfs2/mdt.c
@@ -532,7 +532,7 @@ int nilfs_mdt_save_to_shadow_map(struct inode *inode)
 		goto out;
 
 	ret = nilfs_copy_dirty_pages(&shadow->frozen_btnodes,
-				     &ii->i_btnode_cache);
+				     ii->i_assoc_inode->i_mapping);
 	if (ret)
 		goto out;
 
@@ -623,8 +623,9 @@ void nilfs_mdt_restore_from_shadow_map(struct inode *inode)
 	nilfs_clear_dirty_pages(inode->i_mapping, true);
 	nilfs_copy_back_pages(inode->i_mapping, &shadow->frozen_data);
 
-	nilfs_clear_dirty_pages(&ii->i_btnode_cache, true);
-	nilfs_copy_back_pages(&ii->i_btnode_cache, &shadow->frozen_btnodes);
+	nilfs_clear_dirty_pages(ii->i_assoc_inode->i_mapping, true);
+	nilfs_copy_back_pages(ii->i_assoc_inode->i_mapping,
+			      &shadow->frozen_btnodes);
 
 	nilfs_bmap_restore(ii->i_bmap, &shadow->bmap_store);
 
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h
index a7b81755c350..36b048db00b7 100644
--- a/fs/nilfs2/nilfs.h
+++ b/fs/nilfs2/nilfs.h
@@ -28,7 +28,7 @@
  * @i_xattr: <TODO>
  * @i_dir_start_lookup: page index of last successful search
  * @i_cno: checkpoint number for GC inode
- * @i_btnode_cache: cached pages of b-tree nodes
+ * @i_assoc_inode: associated inode (B-tree node cache holder or back pointer)
  * @i_dirty: list for connecting dirty files
  * @xattr_sem: semaphore for extended attributes processing
  * @i_bh: buffer contains disk inode
@@ -43,7 +43,7 @@ struct nilfs_inode_info {
 	__u64 i_xattr;	/* sector_t ??? */
 	__u32 i_dir_start_lookup;
 	__u64 i_cno;		/* check point number for GC inode */
-	struct address_space i_btnode_cache;
+	struct inode *i_assoc_inode;
 	struct list_head i_dirty;	/* List for connecting dirty files */
 
 #ifdef CONFIG_NILFS_XATTR
@@ -75,13 +75,6 @@ NILFS_BMAP_I(const struct nilfs_bmap *bmap)
 	return container_of(bmap, struct nilfs_inode_info, i_bmap_data);
 }
 
-static inline struct inode *NILFS_BTNC_I(struct address_space *btnc)
-{
-	struct nilfs_inode_info *ii =
-		container_of(btnc, struct nilfs_inode_info, i_btnode_cache);
-	return &ii->vfs_inode;
-}
-
 /*
  * Dynamic state flags of NILFS on-memory inode (i_state)
  */
@@ -98,6 +91,7 @@ enum {
 	NILFS_I_INODE_SYNC,		/* dsync is not allowed for inode */
 	NILFS_I_BMAP,			/* has bmap and btnode_cache */
 	NILFS_I_GCINODE,		/* inode for GC, on memory only */
+	NILFS_I_BTNC,			/* inode for btree node cache */
 };
 
 /*
@@ -267,6 +261,8 @@ struct inode *nilfs_iget(struct super_block *sb, struct nilfs_root *root,
 			 unsigned long ino);
 extern struct inode *nilfs_iget_for_gc(struct super_block *sb,
 				       unsigned long ino, __u64 cno);
+int nilfs_attach_btree_node_cache(struct inode *inode);
+void nilfs_detach_btree_node_cache(struct inode *inode);
 extern void nilfs_update_inode(struct inode *, struct buffer_head *, int);
 extern void nilfs_truncate(struct inode *);
 extern void nilfs_evict_inode(struct inode *);
diff --git a/fs/nilfs2/page.c b/fs/nilfs2/page.c
index 063dd16d75b5..45e079295008 100644
--- a/fs/nilfs2/page.c
+++ b/fs/nilfs2/page.c
@@ -448,10 +448,9 @@ void nilfs_mapping_init(struct address_space *mapping, struct inode *inode)
 /*
  * NILFS2 needs clear_page_dirty() in the following two cases:
  *
- * 1) For B-tree node pages and data pages of the dat/gcdat, NILFS2 clears
- *    page dirty flags when it copies back pages from the shadow cache
- *    (gcdat->{i_mapping,i_btnode_cache}) to its original cache
- *    (dat->{i_mapping,i_btnode_cache}).
+ * 1) For B-tree node pages and data pages of DAT file, NILFS2 clears dirty
+ *    flag of pages when it copies back pages from shadow cache to the
+ *    original cache.
  *
  * 2) Some B-tree operations like insertion or deletion may dispose buffers
  *    in dirty state, and this needs to cancel the dirty state of their pages.
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index 85a853334771..0afe0832c754 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -733,15 +733,18 @@ static void nilfs_lookup_dirty_node_buffers(struct inode *inode,
 					    struct list_head *listp)
 {
 	struct nilfs_inode_info *ii = NILFS_I(inode);
-	struct address_space *mapping = &ii->i_btnode_cache;
+	struct inode *btnc_inode = ii->i_assoc_inode;
 	struct pagevec pvec;
 	struct buffer_head *bh, *head;
 	unsigned int i;
 	pgoff_t index = 0;
 
+	if (!btnc_inode)
+		return;
+
 	pagevec_init(&pvec);
 
-	while (pagevec_lookup_tag(&pvec, mapping, &index,
+	while (pagevec_lookup_tag(&pvec, btnc_inode->i_mapping, &index,
 					PAGECACHE_TAG_DIRTY)) {
 		for (i = 0; i < pagevec_count(&pvec); i++) {
 			bh = head = page_buffers(pvec.pages[i]);
@@ -2410,7 +2413,7 @@ nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head)
 			continue;
 		list_del_init(&ii->i_dirty);
 		truncate_inode_pages(&ii->vfs_inode.i_data, 0);
-		nilfs_btnode_cache_clear(&ii->i_btnode_cache);
+		nilfs_btnode_cache_clear(ii->i_assoc_inode->i_mapping);
 		iput(&ii->vfs_inode);
 	}
 }
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index 63e5fa74016c..c4c6578185d5 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -157,7 +157,8 @@ struct inode *nilfs_alloc_inode(struct super_block *sb)
 	ii->i_bh = NULL;
 	ii->i_state = 0;
 	ii->i_cno = 0;
-	nilfs_mapping_init(&ii->i_btnode_cache, &ii->vfs_inode);
+	ii->i_assoc_inode = NULL;
+	ii->i_bmap = &ii->i_bmap_data;
 	return &ii->vfs_inode;
 }
 
@@ -1377,8 +1378,6 @@ static void nilfs_inode_init_once(void *obj)
 #ifdef CONFIG_NILFS_XATTR
 	init_rwsem(&ii->xattr_sem);
 #endif
-	address_space_init_once(&ii->i_btnode_cache);
-	ii->i_bmap = &ii->i_bmap_data;
 	inode_init_once(&ii->vfs_inode);
 }
 
-- 
2.35.1




  parent reply	other threads:[~2022-05-23 17:53 UTC|newest]

Thread overview: 172+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-23 17:02 [PATCH 5.17 000/158] 5.17.10-rc1 review Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 001/158] usb: gadget: fix race when gadget driver register via ioctl Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 002/158] floppy: use a statically allocated error counter Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 003/158] kernel/resource: Introduce request_mem_region_muxed() Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 004/158] i2c: piix4: Replace hardcoded memory map size with a #define Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 005/158] i2c: piix4: Move port I/O region request/release code into functions Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 006/158] i2c: piix4: Move SMBus controller base address detect into function Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 007/158] i2c: piix4: Move SMBus port selection " Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 008/158] i2c: piix4: Add EFCH MMIO support to region request and release Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 009/158] i2c: piix4: Add EFCH MMIO support to SMBus base address detect Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 010/158] i2c: piix4: Add EFCH MMIO support for SMBus port select Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 011/158] i2c: piix4: Enable EFCH MMIO for Family 17h+ Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 012/158] Watchdog: sp5100_tco: Move timer initialization into function Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 013/158] Watchdog: sp5100_tco: Refactor MMIO base address initialization Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 014/158] Watchdog: sp5100_tco: Add initialization using EFCH MMIO Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 015/158] Watchdog: sp5100_tco: Enable Family 17h+ CPUs Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 016/158] Revert "drm/i915/opregion: check port number bounds for SWSCI display power state" Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 017/158] gfs2: cancel timed-out glock requests Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 018/158] gfs2: Switch lock order of inode and iopen glock Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 019/158] rtc: fix use-after-free on device removal Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 020/158] rtc: pcf2127: fix bug when reading alarm registers Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 021/158] kconfig: add fflush() before ferror() check Greg Kroah-Hartman
2022-05-23 17:02 ` [PATCH 5.17 022/158] um: Cleanup syscall_handler_t definition/cast, fix warning Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 023/158] Input: add bounds checking to input_set_capability() Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 024/158] Input: stmfts - fix reference leak in stmfts_input_open Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 025/158] nvme-pci: add quirks for Samsung X5 SSDs Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 026/158] gfs2: Disable page faults during lockless buffered reads Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 027/158] rtc: sun6i: Fix time overflow handling Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 028/158] crypto: stm32 - fix reference leak in stm32_crc_remove Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 029/158] crypto: x86/chacha20 - Avoid spurious jumps to other functions Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 030/158] ALSA: hda/realtek: Enable headset mic on Lenovo P360 Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 031/158] s390/traps: improve panic message for translation-specification exception Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 032/158] s390/pci: improve zpci_dev reference counting Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 033/158] vhost_vdpa: dont setup irq offloading when irq_num < 0 Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 034/158] tools/virtio: compile with -pthread Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 035/158] smb3: cleanup and clarify status of tree connections Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 036/158] nvmet: use a private workqueue instead of the system workqueue Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 037/158] nvme-multipath: fix hang when disk goes live over reconnect Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 038/158] rtc: mc146818-lib: Fix the AltCentury for AMD platforms Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 039/158] fs: fix an infinite loop in iomap_fiemap Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 040/158] MIPS: lantiq: check the return value of kzalloc() Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 041/158] drbd: remove usage of list iterator variable after loop Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 042/158] platform/chrome: cros_ec_debugfs: detach log reader wq from devm Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 043/158] ARM: 9191/1: arm/stacktrace, kasan: Silence KASAN warnings in unwind_frame() Greg Kroah-Hartman
2022-05-23 17:03 ` Greg Kroah-Hartman [this message]
2022-05-23 17:03 ` [PATCH 5.17 045/158] nilfs2: fix lockdep warnings during disk space reclamation Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 046/158] ALSA: usb-audio: Restore Rane SL-1 quirk Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 047/158] ALSA: wavefront: Proper check of get_user() error Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 048/158] ALSA: hda/realtek: Add quirk for TongFang devices with pop noise Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 049/158] perf: Fix sys_perf_event_open() race against self Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 050/158] selinux: fix bad cleanup on error in hashtab_duplicate() Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 051/158] audit,io_uring,io-wq: call __audit_uring_exit for dummy contexts Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 052/158] Fix double fget() in vhost_net_set_backend() Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 053/158] PCI/PM: Avoid putting Elo i2 PCIe Ports in D3cold Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 054/158] Revert "can: m_can: pci: use custom bit timings for Elkhart Lake" Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 055/158] KVM: arm64: vgic-v3: Consistently populate ID_AA64PFR0_EL1.GIC Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 056/158] KVM: x86/mmu: Update number of zapped pages even if page list is stable Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 057/158] KVM: Free new dirty bitmap if creating a new memslot fails Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 058/158] arm64: paravirt: Use RCU read locks to guard stolen_time Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 059/158] arm64: mte: Ensure the cleared tags are visible before setting the PTE Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 060/158] crypto: qcom-rng - fix infinite loop on requests not multiple of WORD_SZ Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 061/158] mmc: core: Fix busy polling for MMC_SEND_OP_COND again Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 062/158] libceph: fix potential use-after-free on linger ping and resends Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 063/158] drm/amd: Dont reset dGPUs if the system is going to s2idle Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 064/158] drm/i915/dmc: Add MMIO range restrictions Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 065/158] drm/dp/mst: fix a possible memory leak in fetch_monitor_name() Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 066/158] dma-buf: fix use of DMA_BUF_SET_NAME_{A,B} in userspace Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 067/158] dma-buf: ensure unique directory name for dmabuf stats Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 068/158] arm64: dts: qcom: sm8250: dont enable rx/tx macro by default Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 069/158] ARM: dts: aspeed-g6: remove FWQSPID group in pinctrl dtsi Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 070/158] pinctrl: pinctrl-aspeed-g6: remove FWQSPID group in pinctrl Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 071/158] ARM: dts: aspeed-g6: fix SPI1/SPI2 quad pin group Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 072/158] ARM: dts: aspeed: Add video engine to g6 Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 073/158] pinctrl: ocelot: Fix for lan966x alt mode Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 074/158] pinctrl: mediatek: mt8365: fix IES control pins Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 075/158] ALSA: hda - fix unused Realtek function when PM is not enabled Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 076/158] net: ipa: certain dropped packets arent accounted for Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 077/158] net: ipa: record proper RX transaction count Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 078/158] block/mq-deadline: Set the fifo_time member also if inserting at head Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 079/158] mptcp: fix subflow accounting on close Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 080/158] net: macb: Increment rx bd head after allocating skb and buffer Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 081/158] i915/guc/reset: Make __guc_reset_context aware of guilty engines Greg Kroah-Hartman
2022-05-23 17:03 ` [PATCH 5.17 082/158] xfrm: rework default policy structure Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 083/158] xfrm: fix "disable_policy" flag use when arriving from different devices Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 084/158] net/sched: act_pedit: sanitize shift argument before usage Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 085/158] netfilter: flowtable: fix excessive hw offload attempts after failure Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 086/158] netfilter: nft_flow_offload: skip dst neigh lookup for ppp devices Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 087/158] net: fix dev_fill_forward_path with pppoe + bridge Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 088/158] netfilter: nft_flow_offload: fix offload with pppoe + vlan Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 089/158] ptp: ocp: have adjtime handle negative delta_ns correctly Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 090/158] Revert "PCI: aardvark: Rewrite IRQ code to chained IRQ handler" Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 091/158] net: lan966x: Fix assignment of the MAC address Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 092/158] net: systemport: Fix an error handling path in bcm_sysport_probe() Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 093/158] net: vmxnet3: fix possible use-after-free bugs in vmxnet3_rq_alloc_rx_buf() Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 094/158] net: vmxnet3: fix possible NULL pointer dereference in vmxnet3_rq_cleanup() Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 095/158] arm64: kexec: load from kimage prior to clobbering Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 096/158] ice: fix crash when writing timestamp on RX rings Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 097/158] ice: fix possible under reporting of ethtool Tx and Rx statistics Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 098/158] ice: Fix interrupt moderation settings getting cleared Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 099/158] clk: at91: generated: consider range when calculating best rate Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 100/158] net/qla3xxx: Fix a test in ql_reset_work() Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 101/158] NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 102/158] net/mlx5: DR, Fix missing flow_source when creating multi-destination FW table Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 103/158] net/mlx5: Initialize flow steering during driver probe Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 104/158] net/mlx5: DR, Ignore modify TTL on RX if device doesnt support it Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 105/158] net/mlx5e: Block rx-gro-hw feature in switchdev mode Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 106/158] net/mlx5e: Properly block LRO when XDP is enabled Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 107/158] net/mlx5e: Properly block HW GRO " Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 108/158] net/mlx5e: Remove HW-GRO from reported features Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 109/158] net/mlx5: Drain fw_reset when removing device Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 110/158] net: af_key: add check for pfkey_broadcast in function pfkey_process Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 111/158] ARM: 9196/1: spectre-bhb: enable for Cortex-A15 Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 112/158] ARM: 9197/1: spectre-bhb: fix loop8 sequence for Thumb2 Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 113/158] mptcp: fix checksum byte order Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 114/158] mptcp: strict local address ID selection Greg Kroah-Hartman
2022-05-24  3:51   ` Mat Martineau
2022-05-25  7:51     ` Greg Kroah-Hartman
2022-05-25 10:17       ` Matthieu Baerts
2022-05-23 17:04 ` [PATCH 5.17 115/158] mptcp: Do TCP fallback on early DSS checksum failure Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 116/158] igb: skip phy status check where unavailable Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 117/158] netfilter: flowtable: fix TCP flow teardown Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 118/158] netfilter: flowtable: pass flowtable to nf_flow_table_iterate() Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 119/158] netfilter: flowtable: move dst_check to packet path Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 120/158] vdpa/mlx5: Use consistent RQT size Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 121/158] net: bridge: Clear offload_fwd_mark when passing frame up bridge interface Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 122/158] riscv: dts: sifive: fu540-c000: align dma node name with dtschema Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 123/158] scsi: ufs: core: Fix referencing invalid rsp field Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 124/158] kvm: x86/pmu: Fix the compare function used by the pmu event filter Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 125/158] perf build: Fix check for btf__load_from_kernel_by_id() in libbpf Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 126/158] perf stat: Fix and validate CPU map inputs in synthetic PERF_RECORD_STAT events Greg Kroah-Hartman
2022-05-25 20:05   ` patchwork-bot+netdevbpf
2022-05-23 17:04 ` [PATCH 5.17 127/158] gpio: gpio-vf610: do not touch other bits when set the target bit Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 128/158] gpio: mvebu/pwm: Refuse requests with inverted polarity Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 129/158] perf test: Fix "all PMU test" to skip hv_24x7/hv_gpci tests on powerpc Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 130/158] perf regs x86: Fix arch__intr_reg_mask() for the hybrid platform Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 131/158] perf bench numa: Address compiler error on s390 Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 132/158] perf test bpf: Skip test if clang is not present Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 133/158] scsi: scsi_dh_alua: Properly handle the ALUA transitioning state Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 134/158] scsi: qla2xxx: Fix missed DMA unmap for aborted commands Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 135/158] mac80211: fix rx reordering with non explicit / psmp ack policy Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 136/158] nl80211: validate S1G channel width Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 137/158] cfg80211: retrieve S1G operating channel number Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 138/158] selftests: add ping test with ping_group_range tuned Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 139/158] Revert "fbdev: Make fb_release() return -ENODEV if fbdev was unregistered" Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 140/158] fbdev: Prevent possible use-after-free in fb_release() Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 141/158] platform/x86: thinkpad_acpi: Convert btusb DMI list to quirks Greg Kroah-Hartman
2022-05-23 17:04 ` [PATCH 5.17 142/158] platform/x86: thinkpad_acpi: Correct dual fan probe Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 143/158] platform/x86/intel: Fix rmmod pmt_telemetry panic Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 144/158] platform/surface: gpe: Add support for Surface Pro 8 Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 145/158] drm/amd/display: undo clearing of z10 related function pointers Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 146/158] net: fix wrong network header length Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 147/158] nl80211: fix locking in nl80211_set_tx_bitrate_mask() Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 148/158] ethernet: tulip: fix missing pci_disable_device() on error in tulip_init_one() Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 149/158] net: stmmac: fix missing pci_disable_device() on error in stmmac_pci_probe() Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 150/158] net: atlantic: fix "frag[0] not initialized" Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 151/158] net: atlantic: reduce scope of is_rsc_complete Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 152/158] net: atlantic: add check for MAX_SKB_FRAGS Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 153/158] net: atlantic: verify hw_head_ lies within TX buffer ring Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 154/158] arm64: Enable repeat tlbi workaround on KRYO4XX gold CPUs Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 155/158] Input: ili210x - fix reset timing Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 156/158] dt-bindings: pinctrl: aspeed-g6: remove FWQSPID group Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 157/158] i2c: mt7621: fix missing clk_disable_unprepare() on error in mtk_i2c_probe() Greg Kroah-Hartman
2022-05-23 17:05 ` [PATCH 5.17 158/158] afs: Fix afs_getattr() to refetch file status if callback break occurred Greg Kroah-Hartman
2022-05-23 18:59 ` [PATCH 5.17 000/158] 5.17.10-rc1 review Florian Fainelli
2022-05-23 22:55 ` Shuah Khan
2022-05-24  0:28 ` Zan Aziz
2022-05-24  2:03 ` Naresh Kamboju
2022-05-24  6:43 ` Ron Economos
2022-05-24 11:36 ` Fox Chen
2022-05-24 15:46 ` Justin Forbes
2022-05-24 20:05 ` Guenter Roeck
2022-05-25  0:16 ` Labnan Khalid Masum

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=20220523165837.771334678@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=david@redhat.com \
    --cc=konishi.ryusuke@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=sunhao.th@gmail.com \
    --cc=syzbot+0d5b462a6f07447991b3@syzkaller.appspotmail.com \
    --cc=syzbot+34ef28bb2aeb28724aa0@syzkaller.appspotmail.com \
    --cc=torvalds@linux-foundation.org \
    --cc=willy@infradead.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).