mirror of https://lore.kernel.org/lkml/
 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, Chao Yu <yuchao0@huawei.com>,
	Jaegeuk Kim <jaegeuk@kernel.org>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.13 080/380] f2fs: compress: add compress_inode to cache compressed blocks
Date: Thu, 16 Sep 2021 17:57:17 +0200	[thread overview]
Message-ID: <20210916155806.749491861@linuxfoundation.org> (raw)
In-Reply-To: <20210916155803.966362085@linuxfoundation.org>

From: Chao Yu <yuchao0@huawei.com>

[ Upstream commit 6ce19aff0b8cd386860855185c6cd79337fc4d2b ]

Support to use address space of inner inode to cache compressed block,
in order to improve cache hit ratio of random read.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 Documentation/filesystems/f2fs.rst |   3 +
 fs/f2fs/compress.c                 | 168 ++++++++++++++++++++++++++++-
 fs/f2fs/data.c                     |  41 +++++--
 fs/f2fs/debug.c                    |  13 +++
 fs/f2fs/f2fs.h                     |  71 +++++++++++-
 fs/f2fs/gc.c                       |   1 +
 fs/f2fs/inode.c                    |  21 +++-
 fs/f2fs/node.c                     |  14 +++
 fs/f2fs/node.h                     |   1 +
 fs/f2fs/segment.c                  |   6 +-
 fs/f2fs/super.c                    |  35 +++++-
 include/linux/f2fs_fs.h            |   1 +
 12 files changed, 361 insertions(+), 14 deletions(-)

diff --git a/Documentation/filesystems/f2fs.rst b/Documentation/filesystems/f2fs.rst
index 53d396650afb..b91e5a8444d5 100644
--- a/Documentation/filesystems/f2fs.rst
+++ b/Documentation/filesystems/f2fs.rst
@@ -289,6 +289,9 @@ compress_mode=%s	 Control file compression mode. This supports "fs" and "user"
 			 choosing the target file and the timing. The user can do manual
 			 compression/decompression on the compression enabled files using
 			 ioctls.
+compress_cache		 Support to use address space of a filesystem managed inode to
+			 cache compressed block, in order to improve cache hit ratio of
+			 random read.
 inlinecrypt		 When possible, encrypt/decrypt the contents of encrypted
 			 files using the blk-crypto framework rather than
 			 filesystem-layer encryption. This allows the use of
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 1c65384d13f3..ba188722ba43 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -12,9 +12,11 @@
 #include <linux/lzo.h>
 #include <linux/lz4.h>
 #include <linux/zstd.h>
+#include <linux/pagevec.h>
 
 #include "f2fs.h"
 #include "node.h"
+#include "segment.h"
 #include <trace/events/f2fs.h>
 
 static struct kmem_cache *cic_entry_slab;
@@ -736,7 +738,7 @@ static int f2fs_compress_pages(struct compress_ctx *cc)
 	return ret;
 }
 
-static void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
+void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dic->inode);
 	struct f2fs_inode_info *fi = F2FS_I(dic->inode);
@@ -835,7 +837,8 @@ static void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
  * page being waited on in the cluster, and if so, it decompresses the cluster
  * (or in the case of a failure, cleans up without actually decompressing).
  */
-void f2fs_end_read_compressed_page(struct page *page, bool failed)
+void f2fs_end_read_compressed_page(struct page *page, bool failed,
+						block_t blkaddr)
 {
 	struct decompress_io_ctx *dic =
 			(struct decompress_io_ctx *)page_private(page);
@@ -845,6 +848,9 @@ void f2fs_end_read_compressed_page(struct page *page, bool failed)
 
 	if (failed)
 		WRITE_ONCE(dic->failed, true);
+	else if (blkaddr)
+		f2fs_cache_compressed_page(sbi, page,
+					dic->inode->i_ino, blkaddr);
 
 	if (atomic_dec_and_test(&dic->remaining_pages))
 		f2fs_decompress_cluster(dic);
@@ -1683,6 +1689,164 @@ void f2fs_put_page_dic(struct page *page)
 	f2fs_put_dic(dic);
 }
 
+const struct address_space_operations f2fs_compress_aops = {
+	.releasepage = f2fs_release_page,
+	.invalidatepage = f2fs_invalidate_page,
+};
+
+struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi)
+{
+	return sbi->compress_inode->i_mapping;
+}
+
+void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi, block_t blkaddr)
+{
+	if (!sbi->compress_inode)
+		return;
+	invalidate_mapping_pages(COMPRESS_MAPPING(sbi), blkaddr, blkaddr);
+}
+
+void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+						nid_t ino, block_t blkaddr)
+{
+	struct page *cpage;
+	int ret;
+
+	if (!test_opt(sbi, COMPRESS_CACHE))
+		return;
+
+	if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE_READ))
+		return;
+
+	if (!f2fs_available_free_memory(sbi, COMPRESS_PAGE))
+		return;
+
+	cpage = find_get_page(COMPRESS_MAPPING(sbi), blkaddr);
+	if (cpage) {
+		f2fs_put_page(cpage, 0);
+		return;
+	}
+
+	cpage = alloc_page(__GFP_NOWARN | __GFP_IO);
+	if (!cpage)
+		return;
+
+	ret = add_to_page_cache_lru(cpage, COMPRESS_MAPPING(sbi),
+						blkaddr, GFP_NOFS);
+	if (ret) {
+		f2fs_put_page(cpage, 0);
+		return;
+	}
+
+	set_page_private_data(cpage, ino);
+
+	if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE_READ))
+		goto out;
+
+	memcpy(page_address(cpage), page_address(page), PAGE_SIZE);
+	SetPageUptodate(cpage);
+out:
+	f2fs_put_page(cpage, 1);
+}
+
+bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+								block_t blkaddr)
+{
+	struct page *cpage;
+	bool hitted = false;
+
+	if (!test_opt(sbi, COMPRESS_CACHE))
+		return false;
+
+	cpage = f2fs_pagecache_get_page(COMPRESS_MAPPING(sbi),
+				blkaddr, FGP_LOCK | FGP_NOWAIT, GFP_NOFS);
+	if (cpage) {
+		if (PageUptodate(cpage)) {
+			atomic_inc(&sbi->compress_page_hit);
+			memcpy(page_address(page),
+				page_address(cpage), PAGE_SIZE);
+			hitted = true;
+		}
+		f2fs_put_page(cpage, 1);
+	}
+
+	return hitted;
+}
+
+void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino)
+{
+	struct address_space *mapping = sbi->compress_inode->i_mapping;
+	struct pagevec pvec;
+	pgoff_t index = 0;
+	pgoff_t end = MAX_BLKADDR(sbi);
+
+	if (!mapping->nrpages)
+		return;
+
+	pagevec_init(&pvec);
+
+	do {
+		unsigned int nr_pages;
+		int i;
+
+		nr_pages = pagevec_lookup_range(&pvec, mapping,
+						&index, end - 1);
+		if (!nr_pages)
+			break;
+
+		for (i = 0; i < nr_pages; i++) {
+			struct page *page = pvec.pages[i];
+
+			if (page->index > end)
+				break;
+
+			lock_page(page);
+			if (page->mapping != mapping) {
+				unlock_page(page);
+				continue;
+			}
+
+			if (ino != get_page_private_data(page)) {
+				unlock_page(page);
+				continue;
+			}
+
+			generic_error_remove_page(mapping, page);
+			unlock_page(page);
+		}
+		pagevec_release(&pvec);
+		cond_resched();
+	} while (index < end);
+}
+
+int f2fs_init_compress_inode(struct f2fs_sb_info *sbi)
+{
+	struct inode *inode;
+
+	if (!test_opt(sbi, COMPRESS_CACHE))
+		return 0;
+
+	inode = f2fs_iget(sbi->sb, F2FS_COMPRESS_INO(sbi));
+	if (IS_ERR(inode))
+		return PTR_ERR(inode);
+	sbi->compress_inode = inode;
+
+	sbi->compress_percent = COMPRESS_PERCENT;
+	sbi->compress_watermark = COMPRESS_WATERMARK;
+
+	atomic_set(&sbi->compress_page_hit, 0);
+
+	return 0;
+}
+
+void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi)
+{
+	if (!sbi->compress_inode)
+		return;
+	iput(sbi->compress_inode);
+	sbi->compress_inode = NULL;
+}
+
 int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi)
 {
 	dev_t dev = sbi->sb->s_bdev->bd_dev;
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index d4795eda12fa..3058c7e28b11 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -132,7 +132,7 @@ static void f2fs_finish_read_bio(struct bio *bio)
 
 		if (f2fs_is_compressed_page(page)) {
 			if (bio->bi_status)
-				f2fs_end_read_compressed_page(page, true);
+				f2fs_end_read_compressed_page(page, true, 0);
 			f2fs_put_page_dic(page);
 			continue;
 		}
@@ -228,15 +228,19 @@ static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx)
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
 	bool all_compressed = true;
+	block_t blkaddr = SECTOR_TO_BLOCK(ctx->bio->bi_iter.bi_sector);
 
 	bio_for_each_segment_all(bv, ctx->bio, iter_all) {
 		struct page *page = bv->bv_page;
 
 		/* PG_error was set if decryption failed. */
 		if (f2fs_is_compressed_page(page))
-			f2fs_end_read_compressed_page(page, PageError(page));
+			f2fs_end_read_compressed_page(page, PageError(page),
+						blkaddr);
 		else
 			all_compressed = false;
+
+		blkaddr++;
 	}
 
 	/*
@@ -1352,9 +1356,11 @@ static int __allocate_data_block(struct dnode_of_data *dn, int seg_type)
 	old_blkaddr = dn->data_blkaddr;
 	f2fs_allocate_data_block(sbi, NULL, old_blkaddr, &dn->data_blkaddr,
 				&sum, seg_type, NULL);
-	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
+	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO) {
 		invalidate_mapping_pages(META_MAPPING(sbi),
 					old_blkaddr, old_blkaddr);
+		f2fs_invalidate_compress_page(sbi, old_blkaddr);
+	}
 	f2fs_update_data_blkaddr(dn, dn->data_blkaddr);
 
 	/*
@@ -2174,7 +2180,7 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
 		goto out_put_dnode;
 	}
 
-	for (i = 0; i < dic->nr_cpages; i++) {
+	for (i = 0; i < cc->nr_cpages; i++) {
 		struct page *page = dic->cpages[i];
 		block_t blkaddr;
 		struct bio_post_read_ctx *ctx;
@@ -2182,6 +2188,14 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
 		blkaddr = data_blkaddr(dn.inode, dn.node_page,
 						dn.ofs_in_node + i + 1);
 
+		f2fs_wait_on_block_writeback(inode, blkaddr);
+
+		if (f2fs_load_compressed_page(sbi, page, blkaddr)) {
+			if (atomic_dec_and_test(&dic->remaining_pages))
+				f2fs_decompress_cluster(dic);
+			continue;
+		}
+
 		if (bio && (!page_is_mergeable(sbi, bio,
 					*last_block_in_bio, blkaddr) ||
 		    !f2fs_crypt_mergeable_bio(bio, inode, page->index, NULL))) {
@@ -2203,8 +2217,6 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
 			}
 		}
 
-		f2fs_wait_on_block_writeback(inode, blkaddr);
-
 		if (bio_add_page(bio, page, blocksize, 0) < blocksize)
 			goto submit_and_realloc;
 
@@ -3618,6 +3630,13 @@ void f2fs_invalidate_page(struct page *page, unsigned int offset,
 
 	clear_page_private_gcing(page);
 
+	if (test_opt(sbi, COMPRESS_CACHE)) {
+		if (f2fs_compressed_file(inode))
+			f2fs_invalidate_compress_pages(sbi, inode->i_ino);
+		if (inode->i_ino == F2FS_COMPRESS_INO(sbi))
+			clear_page_private_data(page);
+	}
+
 	if (page_private_atomic(page))
 		return f2fs_drop_inmem_page(inode, page);
 
@@ -3635,6 +3654,16 @@ int f2fs_release_page(struct page *page, gfp_t wait)
 	if (page_private_atomic(page))
 		return 0;
 
+	if (test_opt(F2FS_P_SB(page), COMPRESS_CACHE)) {
+		struct f2fs_sb_info *sbi = F2FS_P_SB(page);
+		struct inode *inode = page->mapping->host;
+
+		if (f2fs_compressed_file(inode))
+			f2fs_invalidate_compress_pages(sbi, inode->i_ino);
+		if (inode->i_ino == F2FS_COMPRESS_INO(sbi))
+			clear_page_private_data(page);
+	}
+
 	clear_page_private_gcing(page);
 
 	detach_page_private(page);
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c
index c03949a7ccff..833325038ef3 100644
--- a/fs/f2fs/debug.c
+++ b/fs/f2fs/debug.c
@@ -152,6 +152,12 @@ static void update_general_status(struct f2fs_sb_info *sbi)
 		si->node_pages = NODE_MAPPING(sbi)->nrpages;
 	if (sbi->meta_inode)
 		si->meta_pages = META_MAPPING(sbi)->nrpages;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (sbi->compress_inode) {
+		si->compress_pages = COMPRESS_MAPPING(sbi)->nrpages;
+		si->compress_page_hit = atomic_read(&sbi->compress_page_hit);
+	}
+#endif
 	si->nats = NM_I(sbi)->nat_cnt[TOTAL_NAT];
 	si->dirty_nats = NM_I(sbi)->nat_cnt[DIRTY_NAT];
 	si->sits = MAIN_SEGS(sbi);
@@ -309,6 +315,12 @@ static void update_mem_info(struct f2fs_sb_info *sbi)
 
 		si->page_mem += (unsigned long long)npages << PAGE_SHIFT;
 	}
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (sbi->compress_inode) {
+		unsigned npages = COMPRESS_MAPPING(sbi)->nrpages;
+		si->page_mem += (unsigned long long)npages << PAGE_SHIFT;
+	}
+#endif
 }
 
 static int stat_show(struct seq_file *s, void *v)
@@ -476,6 +488,7 @@ static int stat_show(struct seq_file *s, void *v)
 			"volatile IO: %4d (Max. %4d)\n",
 			   si->inmem_pages, si->aw_cnt, si->max_aw_cnt,
 			   si->vw_cnt, si->max_vw_cnt);
+		seq_printf(s, "  - compress: %4d, hit:%8d\n", si->compress_pages, si->compress_page_hit);
 		seq_printf(s, "  - nodes: %4d in %4d\n",
 			   si->ndirty_node, si->node_pages);
 		seq_printf(s, "  - dents: %4d in dirs:%4d (%4d)\n",
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index a0e828b5c701..7084b42a4437 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -98,6 +98,7 @@ extern const char *f2fs_fault_name[FAULT_MAX];
 #define F2FS_MOUNT_ATGC			0x08000000
 #define F2FS_MOUNT_MERGE_CHECKPOINT	0x10000000
 #define	F2FS_MOUNT_GC_MERGE		0x20000000
+#define F2FS_MOUNT_COMPRESS_CACHE	0x40000000
 
 #define F2FS_OPTION(sbi)	((sbi)->mount_opt)
 #define clear_opt(sbi, option)	(F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option)
@@ -1371,6 +1372,37 @@ PAGE_PRIVATE_CLEAR_FUNC(gcing, ONGOING_MIGRATION);
 PAGE_PRIVATE_CLEAR_FUNC(atomic, ATOMIC_WRITE);
 PAGE_PRIVATE_CLEAR_FUNC(dummy, DUMMY_WRITE);
 
+static inline unsigned long get_page_private_data(struct page *page)
+{
+	unsigned long data = page_private(page);
+
+	if (!test_bit(PAGE_PRIVATE_NOT_POINTER, &data))
+		return 0;
+	return data >> PAGE_PRIVATE_MAX;
+}
+
+static inline void set_page_private_data(struct page *page, unsigned long data)
+{
+	if (!PagePrivate(page)) {
+		get_page(page);
+		SetPagePrivate(page);
+	}
+	set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page));
+	page_private(page) |= data << PAGE_PRIVATE_MAX;
+}
+
+static inline void clear_page_private_data(struct page *page)
+{
+	page_private(page) &= (1 << PAGE_PRIVATE_MAX) - 1;
+	if (page_private(page) == 1 << PAGE_PRIVATE_NOT_POINTER) {
+		set_page_private(page, 0);
+		if (PagePrivate(page)) {
+			ClearPagePrivate(page);
+			put_page(page);
+		}
+	}
+}
+
 /* For compression */
 enum compress_algorithm_type {
 	COMPRESS_LZO,
@@ -1385,6 +1417,9 @@ enum compress_flag {
 	COMPRESS_MAX_FLAG,
 };
 
+#define	COMPRESS_WATERMARK			20
+#define	COMPRESS_PERCENT			20
+
 #define COMPRESS_DATA_RESERVED_SIZE		4
 struct compress_data {
 	__le32 clen;			/* compressed data size */
@@ -1694,6 +1729,12 @@ struct f2fs_sb_info {
 	u64 compr_written_block;
 	u64 compr_saved_block;
 	u32 compr_new_inode;
+
+	/* For compressed block cache */
+	struct inode *compress_inode;		/* cache compressed blocks */
+	unsigned int compress_percent;		/* cache page percentage */
+	unsigned int compress_watermark;	/* cache page watermark */
+	atomic_t compress_page_hit;		/* cache hit count */
 #endif
 };
 
@@ -3660,7 +3701,8 @@ struct f2fs_stat_info {
 	unsigned int bimodal, avg_vblocks;
 	int util_free, util_valid, util_invalid;
 	int rsvd_segs, overp_segs;
-	int dirty_count, node_pages, meta_pages;
+	int dirty_count, node_pages, meta_pages, compress_pages;
+	int compress_page_hit;
 	int prefree_count, call_count, cp_count, bg_cp_count;
 	int tot_segs, node_segs, data_segs, free_segs, free_secs;
 	int bg_node_segs, bg_data_segs;
@@ -3996,7 +4038,9 @@ void f2fs_compress_write_end_io(struct bio *bio, struct page *page);
 bool f2fs_is_compress_backend_ready(struct inode *inode);
 int f2fs_init_compress_mempool(void);
 void f2fs_destroy_compress_mempool(void);
-void f2fs_end_read_compressed_page(struct page *page, bool failed);
+void f2fs_decompress_cluster(struct decompress_io_ctx *dic);
+void f2fs_end_read_compressed_page(struct page *page, bool failed,
+							block_t blkaddr);
 bool f2fs_cluster_is_empty(struct compress_ctx *cc);
 bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index);
 void f2fs_compress_ctx_add_page(struct compress_ctx *cc, struct page *page);
@@ -4014,10 +4058,19 @@ void f2fs_put_page_dic(struct page *page);
 int f2fs_init_compress_ctx(struct compress_ctx *cc);
 void f2fs_destroy_compress_ctx(struct compress_ctx *cc, bool reuse);
 void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
+int f2fs_init_compress_inode(struct f2fs_sb_info *sbi);
+void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi);
 int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi);
 void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi);
 int __init f2fs_init_compress_cache(void);
 void f2fs_destroy_compress_cache(void);
+struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi);
+void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi, block_t blkaddr);
+void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+						nid_t ino, block_t blkaddr);
+bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+								block_t blkaddr);
+void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino);
 #define inc_compr_inode_stat(inode)					\
 	do {								\
 		struct f2fs_sb_info *sbi = F2FS_I_SB(inode);		\
@@ -4046,7 +4099,9 @@ static inline struct page *f2fs_compress_control_page(struct page *page)
 }
 static inline int f2fs_init_compress_mempool(void) { return 0; }
 static inline void f2fs_destroy_compress_mempool(void) { }
-static inline void f2fs_end_read_compressed_page(struct page *page, bool failed)
+static inline void f2fs_decompress_cluster(struct decompress_io_ctx *dic) { }
+static inline void f2fs_end_read_compressed_page(struct page *page,
+						bool failed, block_t blkaddr)
 {
 	WARN_ON_ONCE(1);
 }
@@ -4054,10 +4109,20 @@ static inline void f2fs_put_page_dic(struct page *page)
 {
 	WARN_ON_ONCE(1);
 }
+static inline int f2fs_init_compress_inode(struct f2fs_sb_info *sbi) { return 0; }
+static inline void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi) { }
 static inline int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi) { return 0; }
 static inline void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi) { }
 static inline int __init f2fs_init_compress_cache(void) { return 0; }
 static inline void f2fs_destroy_compress_cache(void) { }
+static inline void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi,
+				block_t blkaddr) { }
+static inline void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi,
+				struct page *page, nid_t ino, block_t blkaddr) { }
+static inline bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi,
+				struct page *page, block_t blkaddr) { return false; }
+static inline void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi,
+							nid_t ino) { }
 #define inc_compr_inode_stat(inode)		do { } while (0)
 #endif
 
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 5ae066a71d4c..83b0a7872b3c 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -1261,6 +1261,7 @@ static int move_data_block(struct inode *inode, block_t bidx,
 	f2fs_put_page(mpage, 1);
 	invalidate_mapping_pages(META_MAPPING(fio.sbi),
 				fio.old_blkaddr, fio.old_blkaddr);
+	f2fs_invalidate_compress_page(fio.sbi, fio.old_blkaddr);
 
 	set_page_dirty(fio.encrypted_page);
 	if (clear_page_dirty_for_io(fio.encrypted_page))
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index cbda7ca3b3be..9141147b5bb0 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -18,6 +18,10 @@
 
 #include <trace/events/f2fs.h>
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+extern const struct address_space_operations f2fs_compress_aops;
+#endif
+
 void f2fs_mark_inode_dirty_sync(struct inode *inode, bool sync)
 {
 	if (is_inode_flag_set(inode, FI_NEW_INODE))
@@ -494,6 +498,11 @@ struct inode *f2fs_iget(struct super_block *sb, unsigned long ino)
 	if (ino == F2FS_NODE_INO(sbi) || ino == F2FS_META_INO(sbi))
 		goto make_now;
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (ino == F2FS_COMPRESS_INO(sbi))
+		goto make_now;
+#endif
+
 	ret = do_read_inode(inode);
 	if (ret)
 		goto bad_inode;
@@ -504,6 +513,12 @@ struct inode *f2fs_iget(struct super_block *sb, unsigned long ino)
 	} else if (ino == F2FS_META_INO(sbi)) {
 		inode->i_mapping->a_ops = &f2fs_meta_aops;
 		mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
+	} else if (ino == F2FS_COMPRESS_INO(sbi)) {
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		inode->i_mapping->a_ops = &f2fs_compress_aops;
+#endif
+		mapping_set_gfp_mask(inode->i_mapping,
+			GFP_NOFS | __GFP_HIGHMEM | __GFP_MOVABLE);
 	} else if (S_ISREG(inode->i_mode)) {
 		inode->i_op = &f2fs_file_inode_operations;
 		inode->i_fop = &f2fs_file_operations;
@@ -723,8 +738,12 @@ void f2fs_evict_inode(struct inode *inode)
 	trace_f2fs_evict_inode(inode);
 	truncate_inode_pages_final(&inode->i_data);
 
+	if (test_opt(sbi, COMPRESS_CACHE) && f2fs_compressed_file(inode))
+		f2fs_invalidate_compress_pages(sbi, inode->i_ino);
+
 	if (inode->i_ino == F2FS_NODE_INO(sbi) ||
-			inode->i_ino == F2FS_META_INO(sbi))
+			inode->i_ino == F2FS_META_INO(sbi) ||
+			inode->i_ino == F2FS_COMPRESS_INO(sbi))
 		goto out_clear;
 
 	f2fs_bug_on(sbi, get_dirty_pages(inode));
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 3a8f7afa5059..dd611efa8aa4 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -97,6 +97,20 @@ bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type)
 		mem_size = (atomic_read(&dcc->discard_cmd_cnt) *
 				sizeof(struct discard_cmd)) >> PAGE_SHIFT;
 		res = mem_size < (avail_ram * nm_i->ram_thresh / 100);
+	} else if (type == COMPRESS_PAGE) {
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		unsigned long free_ram = val.freeram;
+
+		/*
+		 * free memory is lower than watermark or cached page count
+		 * exceed threshold, deny caching compress page.
+		 */
+		res = (free_ram > avail_ram * sbi->compress_watermark / 100) &&
+			(COMPRESS_MAPPING(sbi)->nrpages <
+			 free_ram * sbi->compress_percent / 100);
+#else
+		res = false;
+#endif
 	} else {
 		if (!sbi->sb->s_bdi->wb.dirty_exceeded)
 			return true;
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index d85e8659cfda..84d45385d1f2 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -148,6 +148,7 @@ enum mem_type {
 	EXTENT_CACHE,	/* indicates extent cache */
 	INMEM_PAGES,	/* indicates inmemory pages */
 	DISCARD_CACHE,	/* indicates memory of cached discard cmds */
+	COMPRESS_PAGE,	/* indicates memory of cached compressed pages */
 	BASE_CHECK,	/* check kernel status */
 };
 
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 8668df7870d0..406a6b244782 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -2322,6 +2322,7 @@ void f2fs_invalidate_blocks(struct f2fs_sb_info *sbi, block_t addr)
 		return;
 
 	invalidate_mapping_pages(META_MAPPING(sbi), addr, addr);
+	f2fs_invalidate_compress_page(sbi, addr);
 
 	/* add it into sit main buffer */
 	down_write(&sit_i->sentry_lock);
@@ -3469,9 +3470,11 @@ static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
 reallocate:
 	f2fs_allocate_data_block(fio->sbi, fio->page, fio->old_blkaddr,
 			&fio->new_blkaddr, sum, type, fio);
-	if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO)
+	if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO) {
 		invalidate_mapping_pages(META_MAPPING(fio->sbi),
 					fio->old_blkaddr, fio->old_blkaddr);
+		f2fs_invalidate_compress_page(fio->sbi, fio->old_blkaddr);
+	}
 
 	/* writeout dirty page into bdev */
 	f2fs_submit_page_write(fio);
@@ -3661,6 +3664,7 @@ void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO) {
 		invalidate_mapping_pages(META_MAPPING(sbi),
 					old_blkaddr, old_blkaddr);
+		f2fs_invalidate_compress_page(sbi, old_blkaddr);
 		if (!from_gc)
 			update_segment_mtime(sbi, old_blkaddr, 0);
 		update_sit_entry(sbi, old_blkaddr, -1);
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 8b2b34500b2a..97e3efe5a020 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -150,6 +150,7 @@ enum {
 	Opt_compress_extension,
 	Opt_compress_chksum,
 	Opt_compress_mode,
+	Opt_compress_cache,
 	Opt_atgc,
 	Opt_gc_merge,
 	Opt_nogc_merge,
@@ -224,6 +225,7 @@ static match_table_t f2fs_tokens = {
 	{Opt_compress_extension, "compress_extension=%s"},
 	{Opt_compress_chksum, "compress_chksum"},
 	{Opt_compress_mode, "compress_mode=%s"},
+	{Opt_compress_cache, "compress_cache"},
 	{Opt_atgc, "atgc"},
 	{Opt_gc_merge, "gc_merge"},
 	{Opt_nogc_merge, "nogc_merge"},
@@ -1066,12 +1068,16 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
 			}
 			kfree(name);
 			break;
+		case Opt_compress_cache:
+			set_opt(sbi, COMPRESS_CACHE);
+			break;
 #else
 		case Opt_compress_algorithm:
 		case Opt_compress_log_size:
 		case Opt_compress_extension:
 		case Opt_compress_chksum:
 		case Opt_compress_mode:
+		case Opt_compress_cache:
 			f2fs_info(sbi, "compression options not supported");
 			break;
 #endif
@@ -1403,6 +1409,8 @@ static void f2fs_put_super(struct super_block *sb)
 
 	f2fs_bug_on(sbi, sbi->fsync_node_num);
 
+	f2fs_destroy_compress_inode(sbi);
+
 	iput(sbi->node_inode);
 	sbi->node_inode = NULL;
 
@@ -1672,6 +1680,9 @@ static inline void f2fs_show_compress_options(struct seq_file *seq,
 		seq_printf(seq, ",compress_mode=%s", "fs");
 	else if (F2FS_OPTION(sbi).compress_mode == COMPR_MODE_USER)
 		seq_printf(seq, ",compress_mode=%s", "user");
+
+	if (test_opt(sbi, COMPRESS_CACHE))
+		seq_puts(seq, ",compress_cache");
 }
 #endif
 
@@ -1958,6 +1969,7 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 	bool disable_checkpoint = test_opt(sbi, DISABLE_CHECKPOINT);
 	bool no_io_align = !F2FS_IO_ALIGNED(sbi);
 	bool no_atgc = !test_opt(sbi, ATGC);
+	bool no_compress_cache = !test_opt(sbi, COMPRESS_CACHE);
 	bool checkpoint_changed;
 #ifdef CONFIG_QUOTA
 	int i, j;
@@ -2050,6 +2062,12 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 		goto restore_opts;
 	}
 
+	if (no_compress_cache == !!test_opt(sbi, COMPRESS_CACHE)) {
+		err = -EINVAL;
+		f2fs_warn(sbi, "switch compress_cache option is not allowed");
+		goto restore_opts;
+	}
+
 	if ((*flags & SB_RDONLY) && test_opt(sbi, DISABLE_CHECKPOINT)) {
 		err = -EINVAL;
 		f2fs_warn(sbi, "disabling checkpoint not compatible with read-only");
@@ -3975,10 +3993,14 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 		goto free_node_inode;
 	}
 
-	err = f2fs_register_sysfs(sbi);
+	err = f2fs_init_compress_inode(sbi);
 	if (err)
 		goto free_root_inode;
 
+	err = f2fs_register_sysfs(sbi);
+	if (err)
+		goto free_compress_inode;
+
 #ifdef CONFIG_QUOTA
 	/* Enable quota usage during mount */
 	if (f2fs_sb_has_quota_ino(sbi) && !f2fs_readonly(sb)) {
@@ -4119,6 +4141,8 @@ static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 	/* evict some inodes being cached by GC */
 	evict_inodes(sb);
 	f2fs_unregister_sysfs(sbi);
+free_compress_inode:
+	f2fs_destroy_compress_inode(sbi);
 free_root_inode:
 	dput(sb->s_root);
 	sb->s_root = NULL;
@@ -4197,6 +4221,15 @@ static void kill_f2fs_super(struct super_block *sb)
 		f2fs_stop_gc_thread(sbi);
 		f2fs_stop_discard_thread(sbi);
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		/*
+		 * latter evict_inode() can bypass checking and invalidating
+		 * compress inode cache.
+		 */
+		if (test_opt(sbi, COMPRESS_CACHE))
+			truncate_inode_pages_final(COMPRESS_MAPPING(sbi));
+#endif
+
 		if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) ||
 				!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
 			struct cp_control cpc = {
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index 5487a80617a3..0021ea8f7c3b 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -34,6 +34,7 @@
 #define F2FS_ROOT_INO(sbi)	((sbi)->root_ino_num)
 #define F2FS_NODE_INO(sbi)	((sbi)->node_ino_num)
 #define F2FS_META_INO(sbi)	((sbi)->meta_ino_num)
+#define F2FS_COMPRESS_INO(sbi)	(NM_I(sbi)->max_nid)
 
 #define F2FS_MAX_QUOTAS		3
 
-- 
2.30.2




  parent reply	other threads:[~2021-09-16 16:39 UTC|newest]

Thread overview: 391+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-16 15:55 [PATCH 5.13 000/380] 5.13.19-rc1 review Greg Kroah-Hartman
2021-09-16 15:55 ` [PATCH 5.13 001/380] rtc: tps65910: Correct driver module alias Greg Kroah-Hartman
2021-09-16 15:55 ` [PATCH 5.13 002/380] btrfs: wake up async_delalloc_pages waiters after submit Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 003/380] btrfs: wait on async extents when flushing delalloc Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 004/380] btrfs: reduce the preemptive flushing threshold to 90% Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 005/380] btrfs: zoned: fix block group alloc_offset calculation Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 006/380] btrfs: zoned: suppress reclaim error message on EAGAIN Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 007/380] btrfs: fix upper limit for max_inline for page size 64K Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 008/380] btrfs: reset replace target device to allocation state on close Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 009/380] btrfs: zoned: fix double counting of split ordered extent Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 010/380] blk-zoned: allow zone management send operations without CAP_SYS_ADMIN Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 011/380] blk-zoned: allow BLKREPORTZONE " Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 012/380] PCI/MSI: Skip masking MSI-X on Xen PV Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 013/380] powerpc/perf/hv-gpci: Fix counter value parsing Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 014/380] xen: fix setting of max_pfn in shared_info Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 015/380] 9p/xen: Fix end of loop tests for list_for_each_entry Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 016/380] ceph: fix dereference of null pointer cf Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 017/380] Input: elan_i2c - reduce the resume time for controller in Whitebox Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 018/380] selftests/ftrace: Fix requirement check of README file Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 019/380] tools/thermal/tmon: Add cross compiling support Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 020/380] clk: socfpga: agilex: fix the parents of the psi_ref_clk Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 021/380] clk: socfpga: agilex: fix up s2f_user0_clk representation Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 022/380] clk: socfpga: agilex: add the bypass register for s2f_usr0 clock Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 023/380] pinctrl: stmfx: Fix hazardous u8[] to unsigned long cast Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 024/380] pinctrl: ingenic: Fix incorrect pull up/down info Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 025/380] pinctrl: ingenic: Fix bias config for X2000(E) Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 026/380] soc: mediatek: mmsys: Fix missing UFOE component in mt8173 table routing Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 027/380] soc: qcom: aoss: Fix the out of bound usage of cooling_devs Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 028/380] soc: aspeed: lpc-ctrl: Fix boundary check for mmap Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 029/380] soc: aspeed: p2a-ctrl: " Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 030/380] arm64: Move .hyp.rodata outside of the _sdata.._edata range Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 031/380] arm64: mm: Fix TLBI vs ASID rollover Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 032/380] arm64: head: avoid over-mapping in map_memory Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 033/380] arm64: Do not trap PMSNEVFR_EL1 Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 034/380] iio: ltc2983: fix device probe Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 035/380] wcn36xx: Ensure finish scan is not requested before start scan Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 036/380] crypto: public_key: fix overflow during implicit conversion Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 037/380] block: bfq: fix bfq_set_next_ioprio_data() Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 038/380] power: supply: max17042: handle fails of reading status register Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 039/380] cpufreq: schedutil: Use kobject release() method to free sugov_tunables Greg Kroah-Hartman
2021-09-16 16:55   ` Rafael J. Wysocki
2021-09-16 22:14     ` Sasha Levin
2021-10-01 17:10       ` Rafael J. Wysocki
2021-09-16 15:56 ` [PATCH 5.13 040/380] dm crypt: Avoid percpu_counter spinlock contention in crypt_page_alloc() Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 041/380] crypto: ccp - shutdown SEV firmware on kexec Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 042/380] spi: fsi: Reduce max transfer size to 8 bytes Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 043/380] VMCI: fix NULL pointer dereference when unmapping queue pair Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 044/380] media: uvc: dont do DMA on stack Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 045/380] media: rc-loopback: return number of emitters rather than error Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 046/380] nvmem: core: fix error handling while validating keepout regions Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 047/380] s390/qdio: fix roll-back after timeout on ESTABLISH ccw Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 048/380] s390/qdio: cancel the ESTABLISH ccw after timeout Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 049/380] Revert "dmaengine: imx-sdma: refine to load context only once" Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 050/380] dmaengine: imx-sdma: remove duplicated sdma_load_context Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 051/380] io_uring: place fixed tables under memcg limits Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 052/380] io_uring: add ->splice_fd_in checks Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 053/380] io_uring: fix io_try_cancel_userdata race for iowq Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 054/380] io-wq: fix wakeup race when adding new work Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 055/380] io-wq: fix race between adding work and activating a free worker Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 056/380] io_uring: fail links of cancelled timeouts Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 057/380] libata: add ATA_HORKAGE_NO_NCQ_TRIM for Samsung 860 and 870 SSDs Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 058/380] ARM: 9105/1: atags_to_fdt: dont warn about stack size Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 059/380] f2fs: fix to do sanity check for sb/cp fields correctly Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 060/380] PCI/portdrv: Enable Bandwidth Notification only if port supports it Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 061/380] PCI: Restrict ASMedia ASM1062 SATA Max Payload Size Supported Greg Kroah-Hartman
2021-09-16 15:56 ` [PATCH 5.13 062/380] PCI: Return ~0 data on pciconfig_read() CAP_SYS_ADMIN failure Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 063/380] PCI: xilinx-nwl: Enable the clock through CCF Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 064/380] PCI: aardvark: Configure PCIe resources from ranges DT property Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 065/380] PCI: aardvark: Fix checking for PIO status Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 066/380] PCI: aardvark: Increase polling delay to 1.5s while waiting for PIO response Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 067/380] PCI: aardvark: Fix masking and unmasking legacy INTx interrupts Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 068/380] f2fs: compress: fix to set zstd compress level correctly Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 069/380] HID: input: do not report stylus battery state as "full" Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 070/380] f2fs: quota: fix potential deadlock Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 071/380] pinctrl: armada-37xx: Correct PWM pins definitions Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 072/380] scsi: bsg: Remove support for SCSI_IOCTL_SEND_COMMAND Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 073/380] clk: rockchip: drop GRF dependency for rk3328/rk3036 pll types Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 074/380] IB/hfi1: Adjust pkey entry in index 0 Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 075/380] RDMA/iwcm: Release resources if iw_cm module initialization fails Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 076/380] docs: Fix infiniband uverbs minor number Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 077/380] scsi: BusLogic: Use %X for u32 sized integer rather than %lX Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 078/380] pinctrl: samsung: Fix pinctrl bank pin count Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 079/380] f2fs: restructure f2fs page.private layout Greg Kroah-Hartman
2021-09-16 15:57 ` Greg Kroah-Hartman [this message]
2021-09-16 15:57 ` [PATCH 5.13 081/380] f2fs: fix wrong checkpoint_changed value in f2fs_remount() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 082/380] vfio: Use config not menuconfig for VFIO_NOIOMMU Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 083/380] scsi: ufs: Fix memory corruption by ufshcd_read_desc_param() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 084/380] cpuidle: pseries: Fixup CEDE0 latency only for POWER10 onwards Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 085/380] powerpc/stacktrace: Include linux/delay.h Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 086/380] RDMA/hns: Dont overwrite supplied QP attributes Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 087/380] RDMA/efa: Remove double QP type assignment Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 088/380] RDMA/mlx5: Delete not-available udata check Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 089/380] cpuidle: pseries: Mark pseries_idle_proble() as __init Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 090/380] f2fs: reduce the scope of setting fsck tag when de->name_len is zero Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 091/380] openrisc: dont printk() unconditionally Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 092/380] dma-debug: fix debugfs initialization order Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 093/380] xprtrdma: Put rpcrdma_reps before waking the tear-down completion Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 094/380] NFSv4/pNFS: Fix a layoutget livelock loop Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 095/380] NFSv4/pNFS: Always allow update of a zero valued layout barrier Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 096/380] NFSv4/pnfs: The layout barrier indicate a minimal value for the seqid Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 097/380] SUNRPC: Fix potential memory corruption Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 098/380] SUNRPC/xprtrdma: Fix reconnection locking Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 099/380] SUNRPC query transports source port Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 100/380] sunrpc: Fix return value of get_srcport() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 101/380] scsi: fdomain: Fix error return code in fdomain_probe() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 102/380] pinctrl: single: Fix error return code in pcs_parse_bits_in_pinctrl_entry() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 103/380] powerpc/numa: Consider the max NUMA node for migratable LPAR Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 104/380] scsi: smartpqi: Fix an error code in pqi_get_raid_map() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 105/380] scsi: qedi: Fix error codes in qedi_alloc_global_queues() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 106/380] scsi: qedf: Fix error codes in qedf_alloc_global_queues() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 107/380] powerpc/config: Renable MTD_PHYSMAP_OF Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 108/380] f2fs: fix to keep compatibility of fault injection interface Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 109/380] iommu/vt-d: Update the virtual command related registers Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 110/380] RDMA/hns: Fix return in hns_roce_rereg_user_mr() Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 111/380] HID: amd_sfh: Fix period data field to enable sensor Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 112/380] HID: i2c-hid: Fix Elan touchpad regression Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 113/380] HID: thrustmaster: clean up Makefile and adapt quirks Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 114/380] clk: imx8mm: use correct mux type for clkout path Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 115/380] clk: imx8m: fix clock tree update of TF-A managed clocks Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 116/380] KVM: PPC: Book3S HV: Fix copy_tofrom_guest routines Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 117/380] scsi: ufs: ufs-exynos: Fix static checker warning Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 118/380] KVM: PPC: Book3S HV Nested: Reflect guest PMU in-use to L0 when guest SPRs are live Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 119/380] powerpc/perf: Fix the check for SIAR value Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 120/380] RDMA/hns: Bugfix for data type of dip_idx Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 121/380] RDMA/hns: Bugfix for the missing assignment for dip_idx Greg Kroah-Hartman
2021-09-16 15:57 ` [PATCH 5.13 122/380] platform/x86: dell-smbios-wmi: Add missing kfree in error-exit from run_smbios_call Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 123/380] powerpc/smp: Fix a crash while booting kvm guest with nr_cpus=2 Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 124/380] powerpc/smp: Update cpu_core_map on all PowerPc systems Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 125/380] RDMA/hns: Fix QPs resp incomplete assignment Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 126/380] fscache: Fix cookie key hashing Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 127/380] clk: ralink: avoid to set CLK_IS_CRITICAL flag for gates Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 128/380] clk: at91: clk-generated: Limit the requested rate to our range Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 129/380] KVM: PPC: Fix clearing never mapped TCEs in realmode Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 130/380] soc: mediatek: cmdq: add address shift in jump Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 131/380] f2fs: fix to account missing .skipped_gc_rwsem Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 132/380] f2fs: fix unexpected ENOENT comes from f2fs_map_blocks() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 133/380] f2fs: fix to unmap pages from userspace process in punch_hole() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 134/380] f2fs: deallocate compressed pages when error happens Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 135/380] f2fs: should put a page beyond EOF when preparing a write Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 136/380] MIPS: Malta: fix alignment of the devicetree buffer Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 137/380] kbuild: Fix no symbols warning when CONFIG_TRIM_UNUSD_KSYMS=y Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 138/380] userfaultfd: prevent concurrent API initialization Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 139/380] drm/vmwgfx: Fix subresource updates with new contexts Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 140/380] drm/vmwgfx: Fix some static checker warnings Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 141/380] drm/vc4: hdmi: Set HD_CTL_WHOLSMP and HD_CTL_CHALIGN_SET Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 142/380] drm/omap: Follow implicit fencing in prepare_fb Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 143/380] drm/amdgpu: Fix amdgpu_ras_eeprom_init() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 144/380] ASoC: ti: davinci-mcasp: Fix DIT mode support Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 145/380] ASoC: atmel: ATMEL drivers dont need HAS_DMA Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 146/380] media: dib8000: rewrite the init prbs logic Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 147/380] media: ti-vpe: cal: fix error handling in cal_camerarx_create Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 148/380] media: ti-vpe: cal: fix queuing of the initial buffer Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 149/380] libbpf: Fix reuse of pinned map on older kernel Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 150/380] drm/vkms: Let shadow-plane helpers prepare the planes FB Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 151/380] x86/hyperv: fix for unwanted manipulation of sched_clock when TSC marked unstable Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 152/380] crypto: mxs-dcp - Use sg_mapping_iter to copy data Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 153/380] PCI: Use pci_update_current_state() in pci_enable_device_flags() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 154/380] tipc: keep the skb in rcv queue until the whole data is read Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 155/380] net: phy: Fix data type in DP83822 dp8382x_disable_wol() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 156/380] iio: dac: ad5624r: Fix incorrect handling of an optional regulator Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 157/380] iavf: do not override the adapter state in the watchdog task Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 158/380] iavf: fix locking of critical sections Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 159/380] ARM: dts: qcom: apq8064: correct clock names Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 160/380] video: fbdev: kyro: fix a DoS bug by restricting user input Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 161/380] drm/ast: Disable fast reset after DRAM initial Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 162/380] netlink: Deal with ESRCH error in nlmsg_notify() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 163/380] net: ipa: fix IPA v4.11 interconnect data Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 164/380] Smack: Fix wrong semantics in smk_access_entry() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 165/380] drm: avoid blocking in drm_clients_infos rcu section Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 166/380] drm: serialize drm_file.master with a new spinlock Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 167/380] drm: protect drm_master pointers in drm_lease.c Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 168/380] rcu: Fix macro name CONFIG_TASKS_RCU_TRACE Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 169/380] igc: Check if num of q_vectors is smaller than max before array access Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 170/380] usb: host: fotg210: fix the endpoints transactional opportunities calculation Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 171/380] usb: host: fotg210: fix the actual_length of an iso packet Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 172/380] usb: gadget: u_ether: fix a potential null pointer dereference Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 173/380] USB: EHCI: ehci-mv: improve error handling in mv_ehci_enable() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 174/380] usb: gadget: composite: Allow bMaxPower=0 if self-powered Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 175/380] staging: board: Fix uninitialized spinlock when attaching genpd Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 176/380] staging: hisilicon,hi6421-spmi-pmic.yaml: fix patternProperties Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 177/380] tty: serial: jsm: hold port lock when reporting modem line changes Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 178/380] bus: fsl-mc: fix arg in call to dprc_scan_objects() Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 179/380] bus: fsl-mc: fix mmio base address for child DPRCs Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 180/380] misc/pvpanic-pci: Allow automatic loading Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 181/380] selftests: firmware: Fix ignored return val of asprintf() warn Greg Kroah-Hartman
2021-09-16 15:58 ` [PATCH 5.13 182/380] drm/amd/display: Fix timer_per_pixel unit error Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 183/380] media: hantro: vp8: Move noisy WARN_ON to vpu_debug Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 184/380] media: platform: stm32: unprepare clocks at handling errors in probe Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 185/380] media: atomisp: Fix runtime PM imbalance in atomisp_pci_probe Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 186/380] media: atomisp: pci: fix error return code in atomisp_pci_probe() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 187/380] nfp: fix return statement in nfp_net_parse_meta() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 188/380] ethtool: improve compat ioctl handling Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 189/380] drm/amdgpu: Fix a printing message Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 190/380] drm/amd/amdgpu: Update debugfs link_settings output link_rate field in hex Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 191/380] bpf/tests: Fix copy-and-paste error in double word test Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 192/380] bpf/tests: Do not PASS tests without actually testing the result Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 193/380] drm/bridge: nwl-dsi: Avoid potential multiplication overflow on 32-bit Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 194/380] arm64: dts: allwinner: h6: tanix-tx6: Fix regulator node names Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 195/380] video: fbdev: asiliantfb: Error out if pixclock equals zero Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 196/380] video: fbdev: kyro: " Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 197/380] video: fbdev: riva: " Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 198/380] net: ipa: fix ipa_cmd_table_valid() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 199/380] ipv4: ip_output.c: Fix out-of-bounds warning in ip_copy_addrs() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 200/380] flow_dissector: Fix out-of-bounds warnings Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 201/380] s390/jump_label: print real address in a case of a jump label bug Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 202/380] s390: make PCI mio support a machine flag Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 203/380] serial: 8250: Define RX trigger levels for OxSemi 950 devices Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 204/380] xtensa: ISS: dont panic in rs_init Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 205/380] hvsi: dont panic on tty_register_driver failure Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 206/380] serial: 8250_pci: make setup_port() parameters explicitly unsigned Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 207/380] staging: ks7010: Fix the initialization of the sleep_status structure Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 208/380] samples: bpf: Fix tracex7 error raised on the missing argument Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 209/380] libbpf: Fix race when pinning maps in parallel Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 210/380] ata: sata_dwc_460ex: No need to call phy_exit() befre phy_init() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 211/380] drm: rcar-du: Shutdown the display on system shutdown Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 212/380] Bluetooth: skip invalid hci_sync_conn_complete_evt Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 213/380] workqueue: Fix possible memory leaks in wq_numa_init() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 214/380] ARM: dts: stm32: Set {bitclock,frame}-master phandles on DHCOM SoM Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 215/380] ARM: dts: stm32: Set {bitclock,frame}-master phandles on ST DKx Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 216/380] ARM: dts: stm32: Update AV96 adv7513 node per dtbs_check Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 217/380] netfilter: nft_compat: use nfnetlink_unicast() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 218/380] bonding: 3ad: fix the concurrency between __bond_release_one() and bond_3ad_state_machine_handler() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 219/380] ARM: dts: at91: use the right property for shutdown controller Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 220/380] arm64: tegra: Fix Tegra194 PCIe EP compatible string Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 221/380] ASoC: Intel: bytcr_rt5640: Move "Platform Clock" routes to the maps for the matching in-/output Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 222/380] ASoC: Intel: update sof_pcm512x quirks Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 223/380] Bluetooth: Fix not generating RPA when required Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 224/380] dpaa2-switch: do not enable the DPSW at probe time Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 225/380] media: imx258: Rectify mismatch of VTS value Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 226/380] media: imx258: Limit the max analogue gain to 480 Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 227/380] media: imx: imx7-media-csi: Fix buffer return upon stream start failure Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 228/380] media: v4l2-dv-timings.c: fix wrong condition in two for-loops Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 229/380] media: TDA1997x: fix tda1997x_query_dv_timings() return value Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 230/380] media: tegra-cec: Handle errors of clk_prepare_enable() Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 231/380] gfs2: Fix glock recursion in freeze_go_xmote_bh Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 232/380] arm64: dts: qcom: sdm630: Rewrite memory map Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 233/380] arm64: dts: qcom: sdm630: Fix TLMM node and pinctrl configuration Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 234/380] net: ipa: fix IPA v4.9 interconnects Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 235/380] serial: 8250_omap: Handle optional overrun-throttle-ms property Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 236/380] ARM: dts: imx53-ppd: Fix ACHC entry Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 237/380] arm64: dts: qcom: ipq8074: fix pci node reg property Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 238/380] arm64: dts: qcom: sdm660: use reg value for memory node Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 239/380] arm64: dts: qcom: ipq6018: drop 0x from unit address Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 240/380] arm64: dts: qcom: sdm630: dont use underscore in node name Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 241/380] arm64: dts: qcom: msm8994: " Greg Kroah-Hartman
2021-09-16 15:59 ` [PATCH 5.13 242/380] arm64: dts: qcom: msm8996: " Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 243/380] arm64: dts: qcom: sm8250: Fix epss_l3 unit address Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 244/380] nvmem: qfprom: Fix up qfprom_disable_fuse_blowing() ordering Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 245/380] net: ethernet: stmmac: Do not use unreachable() in ipq806x_gmac_probe() Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 246/380] drm/msm: mdp4: drop vblank get/put from prepare/complete_commit Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 247/380] drm/msm/dsi: Fix DSI and DSI PHY regulator config from SDM660 Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 248/380] drm: xlnx: zynqmp_dpsub: Call pm_runtime_get_sync before setting pixel clock Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 249/380] drm: xlnx: zynqmp: release reset to DP controller before accessing DP registers Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 250/380] thunderbolt: Fix port linking by checking all adapters Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 251/380] drm/amd/display: fix missing writeback disablement if plane is removed Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 252/380] drm/amd/display: fix incorrect CM/TF programming sequence in dwb Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 253/380] selftests/bpf: Fix xdp_tx.c prog section name Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 254/380] drm/vmwgfx: fix potential UAF in vmwgfx_surface.c Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 255/380] staging: rtl8723bs: fix right side of condition Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 256/380] Bluetooth: schedule SCO timeouts with delayed_work Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 257/380] Bluetooth: avoid circular locks in sco_sock_connect Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 258/380] drm/msm/dp: reduce link rate if failed at link training 1 Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 259/380] drm/msm/dp: return correct edid checksum after corrupted edid checksum read Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 260/380] drm/msm/dp: do not end dp link training until video is ready Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 261/380] net/mlx5: Fix variable type to match 64bit Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 262/380] gpu: drm: amd: amdgpu: amdgpu_i2c: fix possible uninitialized-variable access in amdgpu_i2c_router_select_ddc_port() Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 263/380] drm/display: fix possible null-pointer dereference in dcn10_set_clock() Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 264/380] mac80211: Fix monitor MTU limit so that A-MSDUs get through Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 265/380] ARM: tegra: acer-a500: Remove bogus USB VBUS regulators Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 266/380] ARM: tegra: tamonten: Fix UART pad setting Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 267/380] arm64: tegra: Fix compatible string for Tegra132 CPUs Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 268/380] arm64: dts: imx8mm-venice-gw700x: fix mp5416 pmic config Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 269/380] arm64: dts: imx8mm-venice-gw700x: fix invalid pmic pin config Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 270/380] arm64: dts: imx8mm-venice-gw71xx: fix USB OTG VBUS Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 271/380] arm64: dts: ls1046a: fix eeprom entries Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 272/380] nvme-tcp: dont check blk_mq_tag_to_rq when receiving pdu data Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 273/380] nvme: code command_id with a genctr for use-after-free validation Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 274/380] Bluetooth: Fix handling of LE Enhanced Connection Complete Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 275/380] opp: Dont print an error if required-opps is missing Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 276/380] serial: sh-sci: fix break handling for sysrq Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 277/380] iomap: pass writeback errors to the mapping Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 278/380] tcp: enable data-less, empty-cookie SYN with TFO_SERVER_COOKIE_NOT_REQD Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 279/380] locking/rtmutex: Set proper wait context for lockdep Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 280/380] rpc: fix gss_svc_init cleanup on failure Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 281/380] iavf: use mutexes for locking of critical sections Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 282/380] selftests/bpf: Correctly display subtest skip status Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 283/380] selftests/bpf: Fix flaky send_signal test Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 284/380] hwmon: (pmbus/ibm-cffps) Fix write bits for LED control Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 285/380] staging: rts5208: Fix get_ms_information() heap buffer size Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 286/380] selftests: nci: Fix the code for next nlattr offset Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 287/380] selftests: nci: Fix the wrong condition Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 288/380] net: Fix offloading indirect devices dependency on qdisc order creation Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 289/380] kselftest/arm64: mte: Fix misleading output when skipping tests Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 290/380] kselftest/arm64: pac: Fix skipping of tests on systems without PAC Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 291/380] gfs2: Dont call dlm after protocol is unmounted Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 292/380] usb: chipidea: host: fix port index underflow and UBSAN complains Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 293/380] lockd: lockd server-side shouldnt set fl_ops Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 294/380] drm/exynos: Always initialize mapping in exynos_drm_register_dma() Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 295/380] rtl8xxxu: Fix the handling of TX A-MPDU aggregation Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 296/380] rtw88: use read_poll_timeout instead of fixed sleep Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 297/380] rtw88: wow: build wow function only if CONFIG_PM is on Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 298/380] rtw88: wow: fix size access error of probe request Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 299/380] octeontx2-pf: Fix NIX1_RX interface backpressure Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 300/380] m68knommu: only set CONFIG_ISA_DMA_API for ColdFire sub-arch Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 301/380] btrfs: remove racy and unnecessary inode transaction update when using no-holes Greg Kroah-Hartman
2021-09-16 16:00 ` [PATCH 5.13 302/380] btrfs: tree-log: check btrfs_lookup_data_extent return value Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 303/380] soundwire: intel: fix potential race condition during power down Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 304/380] ASoC: Intel: Skylake: Fix module configuration for KPB and MIXER Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 305/380] ASoC: Intel: Skylake: Fix passing loadable flag for module Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 306/380] of: Dont allow __of_attached_node_sysfs() without CONFIG_SYSFS Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 307/380] mmc: sdhci-of-arasan: Modified SD default speed to 19MHz for ZynqMP Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 308/380] mmc: sdhci-of-arasan: Check return value of non-void funtions Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 309/380] mmc: rtsx_pci: Fix long reads when clock is prescaled Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 310/380] selftests/bpf: Enlarge select() timeout for test_maps Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 311/380] mmc: core: Return correct emmc response in case of ioctl error Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 312/380] samples: pktgen: fix to print when terminated normally Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 313/380] cifs: fix wrong release in sess_alloc_buffer() failed path Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 314/380] Revert "USB: xhci: fix U1/U2 handling for hardware with XHCI_INTEL_HOST quirk set" Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 315/380] usb: dwc3: imx8mp: request irq after initializing dwc3 Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 316/380] usb: musb: musb_dsps: request_irq() after initializing musb Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 317/380] usbip: give back URBs for unsent unlink requests during cleanup Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 318/380] usbip:vhci_hcd USB port can get stuck in the disabled state Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 319/380] usb: xhci-mtk: fix use-after-free of mtk->hcd Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 320/380] ASoC: rockchip: i2s: Fix regmap_ops hang Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 321/380] ASoC: rockchip: i2s: Fixup config for DAIFMT_DSP_A/B Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 322/380] ASoC: soc-pcm: protect BE dailink state changes in trigger Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 323/380] drm/amdkfd: Account for SH/SE count when setting up cu masks Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 324/380] nfs: dont atempt blocking locks on nfs reexports Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 325/380] nfsd: fix crash on LOCKT on reexported NFSv3 Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 326/380] iwlwifi: pcie: free RBs during configure Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 327/380] iwlwifi: mvm: Do not use full SSIDs in 6GHz scan Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 328/380] iwlwifi: mvm: fix a memory leak in iwl_mvm_mac_ctxt_beacon_changed Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 329/380] iwlwifi: mvm: avoid static queue number aliasing Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 330/380] iwlwifi: mvm: Fix umac scan request probe parameters Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 331/380] iwlwifi: mvm: fix access to BSS elements Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 332/380] iwlwifi: fw: correctly limit to monitor dump Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 333/380] iwlwifi: mvm: Fix scan channel flags settings Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 334/380] net/mlx5: DR, fix a potential use-after-free bug Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 335/380] net/mlx5: DR, Enable QP retransmission Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 336/380] parport: remove non-zero check on count Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 337/380] selftests/bpf: Fix potential unreleased lock Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 338/380] wcn36xx: Fix missing frame timestamp for beacon/probe-resp Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 339/380] ath9k: fix OOB read ar9300_eeprom_restore_internal Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 340/380] ath9k: fix sleeping in atomic context Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 341/380] net: fix NULL pointer reference in cipso_v4_doi_free Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 342/380] fix array-index-out-of-bounds in taprio_change Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 343/380] net: w5100: check return value after calling platform_get_resource() Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 344/380] net: hns3: clean up a type mismatch warning Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 345/380] KVM: arm64: vgic: move irq->get_input_level into an ops structure Greg Kroah-Hartman
2021-09-16 18:25   ` Marc Zyngier
2021-09-16 22:13     ` Sasha Levin
2021-09-16 16:01 ` [PATCH 5.13 346/380] parisc: fix crash with signals and alloca Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 347/380] parisc: Fix compile failure when building 64-bit kernel natively Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 348/380] printk/console: Check consistent sequence number when handling race in console_unlock() Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 349/380] ovl: fix BUG_ON() in may_delete() when called from ovl_cleanup() Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 350/380] scsi: BusLogic: Fix missing pr_cont() use Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 351/380] scsi: qla2xxx: Changes to support kdump kernel Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 352/380] scsi: qla2xxx: Sync queue idx with queue_pair_map idx Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 353/380] mtd: rawnand: intel: Fix error handling in probe Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 354/380] cpufreq: powernv: Fix init_chip_info initialization in numa=off Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 355/380] s390/pv: fix the forcing of the swiotlb Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 356/380] s390/topology: fix topology information when calling cpu hotplug notifiers Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 357/380] hugetlb: fix hugetlb cgroup refcounting during vma split Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 358/380] mm/memory_hotplug: use "unsigned long" for PFN in zone_for_pfn_range() Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 359/380] mm/hmm: bypass devmap pte when all pfn requested flags are fulfilled Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 360/380] mm/hugetlb: initialize hugetlb_usage in mm_init Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 361/380] mm,vmscan: fix divide by zero in get_scan_count Greg Kroah-Hartman
2021-09-16 16:01 ` [PATCH 5.13 362/380] memcg: enable accounting for pids in nested pid namespaces Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 363/380] libnvdimm/pmem: Fix crash triggered when I/O in-flight during unbind Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 364/380] platform/chrome: cros_ec_proto: Send command again when timeout occurs Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 365/380] lib/test_stackinit: Fix static initializer test Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 366/380] net: dsa: lantiq_gswip: fix maximum frame length Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 367/380] net: stmmac: Fix overall budget calculation for rxtx_napi Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 368/380] drm/mgag200: Select clock in PLL update functions Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 369/380] drm/msi/mdp4: populate priv->kms in mdp4_kms_init Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 370/380] drm/dp_mst: Fix return code on sideband message failure Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 371/380] drm/panfrost: Make sure MMU context lifetime is not bound to panfrost_priv Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 372/380] drm/amdgpu: Fix BUG_ON assert Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 373/380] drm/amdgpu: Fix a deadlock if previous GEM object allocation fails Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 374/380] drm/amd/display: Update number of DCN3 clock states Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 375/380] drm/amd/display: Update bounding box states (v2) Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 376/380] drm/amd/display: setup system context for APUs Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 377/380] drm/msm/disp/dpu1: add safe lut config in dpu driver Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 378/380] drm/panfrost: Simplify lock_region calculation Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 379/380] drm/panfrost: Use u64 for size in lock_region Greg Kroah-Hartman
2021-09-16 16:02 ` [PATCH 5.13 380/380] drm/panfrost: Clamp lock region to Bifrost minimum Greg Kroah-Hartman
2021-09-16 21:17 ` [PATCH 5.13 000/380] 5.13.19-rc1 review Shuah Khan
2021-09-16 22:39 ` Florian Fainelli
2021-09-17 11:10 ` Naresh Kamboju
2021-09-17 18:07 ` Guenter Roeck
2021-09-18  4:17 ` Fox Chen

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=20210916155806.749491861@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=jaegeuk@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sashal@kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=yuchao0@huawei.com \
    /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

Powered by JetHome