All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gao Xiang <gaoxiang25@huawei.com>
To: Chao Yu <yuchao0@huawei.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Christoph Hellwig <hch@lst.de>, <devel@driverdev.osuosl.org>
Cc: <linux-fsdevel@vger.kernel.org>, <linux-erofs@lists.ozlabs.org>,
	Chao Yu <chao@kernel.org>, Miao Xie <miaoxie@huawei.com>,
	Gao Xiang <gaoxiang25@huawei.com>
Subject: [PATCH v2 19/25] erofs: kill all erofs specific fault injection
Date: Wed, 4 Sep 2019 10:09:06 +0800	[thread overview]
Message-ID: <20190904020912.63925-20-gaoxiang25@huawei.com> (raw)
In-Reply-To: <20190904020912.63925-1-gaoxiang25@huawei.com>

As Christoph suggested [1], "Please just use plain kmalloc
everywhere and let the normal kernel error injection code
take care of injeting any errors."

[1] https://lore.kernel.org/r/20190829102426.GE20598@infradead.org/
Reported-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
---
 Documentation/filesystems/erofs.txt |  5 ---
 fs/erofs/Kconfig                    |  7 ---
 fs/erofs/data.c                     |  7 ---
 fs/erofs/inode.c                    |  3 +-
 fs/erofs/internal.h                 | 65 ---------------------------
 fs/erofs/super.c                    | 70 -----------------------------
 fs/erofs/zdata.c                    |  8 +---
 7 files changed, 2 insertions(+), 163 deletions(-)

diff --git a/Documentation/filesystems/erofs.txt b/Documentation/filesystems/erofs.txt
index 38aa9126ec98..c3b5f603b2b6 100644
--- a/Documentation/filesystems/erofs.txt
+++ b/Documentation/filesystems/erofs.txt
@@ -52,11 +52,6 @@ linux-erofs mailing list:
 Mount options
 =============
 
-fault_injection=%d     Enable fault injection in all supported types with
-                       specified injection rate. Supported injection type:
-                       Type_Name                Type_Value
-                       FAULT_KMALLOC            0x000000001
-                       FAULT_READ_IO            0x000000002
 (no)user_xattr         Setup Extended User Attributes. Note: xattr is enabled
                        by default if CONFIG_EROFS_FS_XATTR is selected.
 (no)acl                Setup POSIX Access Control List. Note: acl is enabled
diff --git a/fs/erofs/Kconfig b/fs/erofs/Kconfig
index 16316d1adca3..9d634d3a1845 100644
--- a/fs/erofs/Kconfig
+++ b/fs/erofs/Kconfig
@@ -27,13 +27,6 @@ config EROFS_FS_DEBUG
 
 	  For daily use, say N.
 
-config EROFS_FAULT_INJECTION
-	bool "EROFS fault injection facility"
-	depends on EROFS_FS
-	help
-	  Test EROFS to inject faults such as ENOMEM, EIO, and so on.
-	  If unsure, say N.
-
 config EROFS_FS_XATTR
 	bool "EROFS extended attributes"
 	depends on EROFS_FS
diff --git a/fs/erofs/data.c b/fs/erofs/data.c
index 3ce87a88452a..b5f5b8592d14 100644
--- a/fs/erofs/data.c
+++ b/fs/erofs/data.c
@@ -11,16 +11,10 @@
 
 static void erofs_readendio(struct bio *bio)
 {
-	struct super_block *const sb = bio->bi_private;
 	struct bio_vec *bvec;
 	blk_status_t err = bio->bi_status;
 	struct bvec_iter_all iter_all;
 
-	if (time_to_inject(EROFS_SB(sb), FAULT_READ_IO)) {
-		erofs_show_injection_info(FAULT_READ_IO);
-		err = BLK_STS_IOERR;
-	}
-
 	bio_for_each_segment_all(bvec, bio, iter_all) {
 		struct page *page = bvec->bv_page;
 
@@ -48,7 +42,6 @@ static struct bio *erofs_grab_raw_bio(struct super_block *sb,
 	bio->bi_end_io = erofs_readendio;
 	bio_set_dev(bio, sb->s_bdev);
 	bio->bi_iter.bi_sector = (sector_t)blkaddr << LOG_SECTORS_PER_BLOCK;
-	bio->bi_private = sb;
 	if (ismeta)
 		bio->bi_opf = REQ_OP_READ | REQ_META;
 	else
diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
index 384905e0677c..8e53765a532c 100644
--- a/fs/erofs/inode.c
+++ b/fs/erofs/inode.c
@@ -131,7 +131,6 @@ static int erofs_fill_symlink(struct inode *inode, void *data,
 			      unsigned int m_pofs)
 {
 	struct erofs_inode *vi = EROFS_I(inode);
-	struct erofs_sb_info *sbi = EROFS_I_SB(inode);
 	char *lnk;
 
 	/* if it cannot be handled with fast symlink scheme */
@@ -141,7 +140,7 @@ static int erofs_fill_symlink(struct inode *inode, void *data,
 		return 0;
 	}
 
-	lnk = erofs_kmalloc(sbi, inode->i_size + 1, GFP_KERNEL);
+	lnk = kmalloc(inode->i_size + 1, GFP_KERNEL);
 	if (!lnk)
 		return -ENOMEM;
 
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 881eb2ee18b5..d659c1941f93 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -32,23 +32,6 @@
 #define DBG_BUGON(x)            ((void)(x))
 #endif	/* !CONFIG_EROFS_FS_DEBUG */
 
-enum {
-	FAULT_KMALLOC,
-	FAULT_READ_IO,
-	FAULT_MAX,
-};
-
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-extern const char *erofs_fault_name[FAULT_MAX];
-#define IS_FAULT_SET(fi, type) ((fi)->inject_type & (1 << (type)))
-
-struct erofs_fault_info {
-	atomic_t inject_ops;
-	unsigned int inject_rate;
-	unsigned int inject_type;
-};
-#endif	/* CONFIG_EROFS_FAULT_INJECTION */
-
 /* EROFS_SUPER_MAGIC_V1 to represent the whole file system */
 #define EROFS_SUPER_MAGIC   EROFS_SUPER_MAGIC_V1
 
@@ -99,62 +82,14 @@ struct erofs_sb_info {
 	u32 feature_incompat;
 
 	unsigned int mount_opt;
-
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-	struct erofs_fault_info fault_info;	/* For fault injection */
-#endif
 };
 
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-#define erofs_show_injection_info(type)					\
-	infoln("inject %s in %s of %pS", erofs_fault_name[type],        \
-		__func__, __builtin_return_address(0))
-
-static inline bool time_to_inject(struct erofs_sb_info *sbi, int type)
-{
-	struct erofs_fault_info *ffi = &sbi->fault_info;
-
-	if (!ffi->inject_rate)
-		return false;
-
-	if (!IS_FAULT_SET(ffi, type))
-		return false;
-
-	atomic_inc(&ffi->inject_ops);
-	if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) {
-		atomic_set(&ffi->inject_ops, 0);
-		return true;
-	}
-	return false;
-}
-#else
-static inline bool time_to_inject(struct erofs_sb_info *sbi, int type)
-{
-	return false;
-}
-
-static inline void erofs_show_injection_info(int type)
-{
-}
-#endif	/* !CONFIG_EROFS_FAULT_INJECTION */
-
-static inline void *erofs_kmalloc(struct erofs_sb_info *sbi,
-					size_t size, gfp_t flags)
-{
-	if (time_to_inject(sbi, FAULT_KMALLOC)) {
-		erofs_show_injection_info(FAULT_KMALLOC);
-		return NULL;
-	}
-	return kmalloc(size, flags);
-}
-
 #define EROFS_SB(sb) ((struct erofs_sb_info *)(sb)->s_fs_info)
 #define EROFS_I_SB(inode) ((struct erofs_sb_info *)(inode)->i_sb->s_fs_info)
 
 /* Mount flags set via mount options or defaults */
 #define EROFS_MOUNT_XATTR_USER		0x00000010
 #define EROFS_MOUNT_POSIX_ACL		0x00000020
-#define EROFS_MOUNT_FAULT_INJECTION	0x00000040
 
 #define clear_opt(sbi, option)	((sbi)->mount_opt &= ~EROFS_MOUNT_##option)
 #define set_opt(sbi, option)	((sbi)->mount_opt |= EROFS_MOUNT_##option)
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 36e569a79172..407c95854be1 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -126,63 +126,6 @@ static int erofs_read_superblock(struct super_block *sb)
 	return ret;
 }
 
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-const char *erofs_fault_name[FAULT_MAX] = {
-	[FAULT_KMALLOC]		= "kmalloc",
-	[FAULT_READ_IO]		= "read IO error",
-};
-
-static void __erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				     unsigned int rate)
-{
-	struct erofs_fault_info *ffi = &sbi->fault_info;
-
-	if (rate) {
-		atomic_set(&ffi->inject_ops, 0);
-		ffi->inject_rate = rate;
-		ffi->inject_type = (1 << FAULT_MAX) - 1;
-	} else {
-		memset(ffi, 0, sizeof(struct erofs_fault_info));
-	}
-
-	set_opt(sbi, FAULT_INJECTION);
-}
-
-static int erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				  substring_t *args)
-{
-	int rate = 0;
-
-	if (args->from && match_int(args, &rate))
-		return -EINVAL;
-
-	__erofs_build_fault_attr(sbi, rate);
-	return 0;
-}
-
-static unsigned int erofs_get_fault_rate(struct erofs_sb_info *sbi)
-{
-	return sbi->fault_info.inject_rate;
-}
-#else
-static void __erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				     unsigned int rate)
-{
-}
-
-static int erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				  substring_t *args)
-{
-	infoln("fault_injection options not supported");
-	return 0;
-}
-
-static unsigned int erofs_get_fault_rate(struct erofs_sb_info *sbi)
-{
-	return 0;
-}
-#endif
-
 #ifdef CONFIG_EROFS_FS_ZIP
 static int erofs_build_cache_strategy(struct erofs_sb_info *sbi,
 				      substring_t *args)
@@ -237,7 +180,6 @@ enum {
 	Opt_nouser_xattr,
 	Opt_acl,
 	Opt_noacl,
-	Opt_fault_injection,
 	Opt_cache_strategy,
 	Opt_err
 };
@@ -247,7 +189,6 @@ static match_table_t erofs_tokens = {
 	{Opt_nouser_xattr, "nouser_xattr"},
 	{Opt_acl, "acl"},
 	{Opt_noacl, "noacl"},
-	{Opt_fault_injection, "fault_injection=%u"},
 	{Opt_cache_strategy, "cache_strategy=%s"},
 	{Opt_err, NULL}
 };
@@ -301,11 +242,6 @@ static int erofs_parse_options(struct super_block *sb, char *options)
 			infoln("noacl options not supported");
 			break;
 #endif
-		case Opt_fault_injection:
-			err = erofs_build_fault_attr(EROFS_SB(sb), args);
-			if (err)
-				return err;
-			break;
 		case Opt_cache_strategy:
 			err = erofs_build_cache_strategy(EROFS_SB(sb), args);
 			if (err)
@@ -593,9 +529,6 @@ static int erofs_show_options(struct seq_file *seq, struct dentry *root)
 	else
 		seq_puts(seq, ",noacl");
 #endif
-	if (test_opt(sbi, FAULT_INJECTION))
-		seq_printf(seq, ",fault_injection=%u",
-			   erofs_get_fault_rate(sbi));
 #ifdef CONFIG_EROFS_FS_ZIP
 	if (sbi->cache_strategy == EROFS_ZIP_CACHE_DISABLED) {
 		seq_puts(seq, ",cache_strategy=disabled");
@@ -615,7 +548,6 @@ static int erofs_remount(struct super_block *sb, int *flags, char *data)
 {
 	struct erofs_sb_info *sbi = EROFS_SB(sb);
 	unsigned int org_mnt_opt = sbi->mount_opt;
-	unsigned int org_inject_rate = erofs_get_fault_rate(sbi);
 	int err;
 
 	DBG_BUGON(!sb_rdonly(sb));
@@ -631,9 +563,7 @@ static int erofs_remount(struct super_block *sb, int *flags, char *data)
 	*flags |= SB_RDONLY;
 	return 0;
 out:
-	__erofs_build_fault_attr(sbi, org_inject_rate);
 	sbi->mount_opt = org_mnt_opt;
-
 	return err;
 }
 
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 8587d6751c48..ff8ab444172d 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -724,15 +724,9 @@ static inline void z_erofs_vle_read_endio(struct bio *bio)
 		DBG_BUGON(PageUptodate(page));
 		DBG_BUGON(!page->mapping);
 
-		if (!sbi && !z_erofs_page_is_staging(page)) {
+		if (!sbi && !z_erofs_page_is_staging(page))
 			sbi = EROFS_SB(page->mapping->host->i_sb);
 
-			if (time_to_inject(sbi, FAULT_READ_IO)) {
-				erofs_show_injection_info(FAULT_READ_IO);
-				err = BLK_STS_IOERR;
-			}
-		}
-
 		/* sbi should already be gotten if the page is managed */
 		if (sbi)
 			cachemngd = erofs_page_is_managed(sbi, page);
-- 
2.17.1


WARNING: multiple messages have this Message-ID (diff)
From: Gao Xiang <gaoxiang25@huawei.com>
To: Chao Yu <yuchao0@huawei.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Christoph Hellwig <hch@lst.de>, <devel@driverdev.osuosl.org>
Cc: linux-fsdevel@vger.kernel.org, Miao Xie <miaoxie@huawei.com>,
	Chao Yu <chao@kernel.org>,
	linux-erofs@lists.ozlabs.org
Subject: [PATCH v2 19/25] erofs: kill all erofs specific fault injection
Date: Wed, 4 Sep 2019 10:09:06 +0800	[thread overview]
Message-ID: <20190904020912.63925-20-gaoxiang25@huawei.com> (raw)
In-Reply-To: <20190904020912.63925-1-gaoxiang25@huawei.com>

As Christoph suggested [1], "Please just use plain kmalloc
everywhere and let the normal kernel error injection code
take care of injeting any errors."

[1] https://lore.kernel.org/r/20190829102426.GE20598@infradead.org/
Reported-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
---
 Documentation/filesystems/erofs.txt |  5 ---
 fs/erofs/Kconfig                    |  7 ---
 fs/erofs/data.c                     |  7 ---
 fs/erofs/inode.c                    |  3 +-
 fs/erofs/internal.h                 | 65 ---------------------------
 fs/erofs/super.c                    | 70 -----------------------------
 fs/erofs/zdata.c                    |  8 +---
 7 files changed, 2 insertions(+), 163 deletions(-)

diff --git a/Documentation/filesystems/erofs.txt b/Documentation/filesystems/erofs.txt
index 38aa9126ec98..c3b5f603b2b6 100644
--- a/Documentation/filesystems/erofs.txt
+++ b/Documentation/filesystems/erofs.txt
@@ -52,11 +52,6 @@ linux-erofs mailing list:
 Mount options
 =============
 
-fault_injection=%d     Enable fault injection in all supported types with
-                       specified injection rate. Supported injection type:
-                       Type_Name                Type_Value
-                       FAULT_KMALLOC            0x000000001
-                       FAULT_READ_IO            0x000000002
 (no)user_xattr         Setup Extended User Attributes. Note: xattr is enabled
                        by default if CONFIG_EROFS_FS_XATTR is selected.
 (no)acl                Setup POSIX Access Control List. Note: acl is enabled
diff --git a/fs/erofs/Kconfig b/fs/erofs/Kconfig
index 16316d1adca3..9d634d3a1845 100644
--- a/fs/erofs/Kconfig
+++ b/fs/erofs/Kconfig
@@ -27,13 +27,6 @@ config EROFS_FS_DEBUG
 
 	  For daily use, say N.
 
-config EROFS_FAULT_INJECTION
-	bool "EROFS fault injection facility"
-	depends on EROFS_FS
-	help
-	  Test EROFS to inject faults such as ENOMEM, EIO, and so on.
-	  If unsure, say N.
-
 config EROFS_FS_XATTR
 	bool "EROFS extended attributes"
 	depends on EROFS_FS
diff --git a/fs/erofs/data.c b/fs/erofs/data.c
index 3ce87a88452a..b5f5b8592d14 100644
--- a/fs/erofs/data.c
+++ b/fs/erofs/data.c
@@ -11,16 +11,10 @@
 
 static void erofs_readendio(struct bio *bio)
 {
-	struct super_block *const sb = bio->bi_private;
 	struct bio_vec *bvec;
 	blk_status_t err = bio->bi_status;
 	struct bvec_iter_all iter_all;
 
-	if (time_to_inject(EROFS_SB(sb), FAULT_READ_IO)) {
-		erofs_show_injection_info(FAULT_READ_IO);
-		err = BLK_STS_IOERR;
-	}
-
 	bio_for_each_segment_all(bvec, bio, iter_all) {
 		struct page *page = bvec->bv_page;
 
@@ -48,7 +42,6 @@ static struct bio *erofs_grab_raw_bio(struct super_block *sb,
 	bio->bi_end_io = erofs_readendio;
 	bio_set_dev(bio, sb->s_bdev);
 	bio->bi_iter.bi_sector = (sector_t)blkaddr << LOG_SECTORS_PER_BLOCK;
-	bio->bi_private = sb;
 	if (ismeta)
 		bio->bi_opf = REQ_OP_READ | REQ_META;
 	else
diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
index 384905e0677c..8e53765a532c 100644
--- a/fs/erofs/inode.c
+++ b/fs/erofs/inode.c
@@ -131,7 +131,6 @@ static int erofs_fill_symlink(struct inode *inode, void *data,
 			      unsigned int m_pofs)
 {
 	struct erofs_inode *vi = EROFS_I(inode);
-	struct erofs_sb_info *sbi = EROFS_I_SB(inode);
 	char *lnk;
 
 	/* if it cannot be handled with fast symlink scheme */
@@ -141,7 +140,7 @@ static int erofs_fill_symlink(struct inode *inode, void *data,
 		return 0;
 	}
 
-	lnk = erofs_kmalloc(sbi, inode->i_size + 1, GFP_KERNEL);
+	lnk = kmalloc(inode->i_size + 1, GFP_KERNEL);
 	if (!lnk)
 		return -ENOMEM;
 
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 881eb2ee18b5..d659c1941f93 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -32,23 +32,6 @@
 #define DBG_BUGON(x)            ((void)(x))
 #endif	/* !CONFIG_EROFS_FS_DEBUG */
 
-enum {
-	FAULT_KMALLOC,
-	FAULT_READ_IO,
-	FAULT_MAX,
-};
-
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-extern const char *erofs_fault_name[FAULT_MAX];
-#define IS_FAULT_SET(fi, type) ((fi)->inject_type & (1 << (type)))
-
-struct erofs_fault_info {
-	atomic_t inject_ops;
-	unsigned int inject_rate;
-	unsigned int inject_type;
-};
-#endif	/* CONFIG_EROFS_FAULT_INJECTION */
-
 /* EROFS_SUPER_MAGIC_V1 to represent the whole file system */
 #define EROFS_SUPER_MAGIC   EROFS_SUPER_MAGIC_V1
 
@@ -99,62 +82,14 @@ struct erofs_sb_info {
 	u32 feature_incompat;
 
 	unsigned int mount_opt;
-
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-	struct erofs_fault_info fault_info;	/* For fault injection */
-#endif
 };
 
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-#define erofs_show_injection_info(type)					\
-	infoln("inject %s in %s of %pS", erofs_fault_name[type],        \
-		__func__, __builtin_return_address(0))
-
-static inline bool time_to_inject(struct erofs_sb_info *sbi, int type)
-{
-	struct erofs_fault_info *ffi = &sbi->fault_info;
-
-	if (!ffi->inject_rate)
-		return false;
-
-	if (!IS_FAULT_SET(ffi, type))
-		return false;
-
-	atomic_inc(&ffi->inject_ops);
-	if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) {
-		atomic_set(&ffi->inject_ops, 0);
-		return true;
-	}
-	return false;
-}
-#else
-static inline bool time_to_inject(struct erofs_sb_info *sbi, int type)
-{
-	return false;
-}
-
-static inline void erofs_show_injection_info(int type)
-{
-}
-#endif	/* !CONFIG_EROFS_FAULT_INJECTION */
-
-static inline void *erofs_kmalloc(struct erofs_sb_info *sbi,
-					size_t size, gfp_t flags)
-{
-	if (time_to_inject(sbi, FAULT_KMALLOC)) {
-		erofs_show_injection_info(FAULT_KMALLOC);
-		return NULL;
-	}
-	return kmalloc(size, flags);
-}
-
 #define EROFS_SB(sb) ((struct erofs_sb_info *)(sb)->s_fs_info)
 #define EROFS_I_SB(inode) ((struct erofs_sb_info *)(inode)->i_sb->s_fs_info)
 
 /* Mount flags set via mount options or defaults */
 #define EROFS_MOUNT_XATTR_USER		0x00000010
 #define EROFS_MOUNT_POSIX_ACL		0x00000020
-#define EROFS_MOUNT_FAULT_INJECTION	0x00000040
 
 #define clear_opt(sbi, option)	((sbi)->mount_opt &= ~EROFS_MOUNT_##option)
 #define set_opt(sbi, option)	((sbi)->mount_opt |= EROFS_MOUNT_##option)
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 36e569a79172..407c95854be1 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -126,63 +126,6 @@ static int erofs_read_superblock(struct super_block *sb)
 	return ret;
 }
 
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-const char *erofs_fault_name[FAULT_MAX] = {
-	[FAULT_KMALLOC]		= "kmalloc",
-	[FAULT_READ_IO]		= "read IO error",
-};
-
-static void __erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				     unsigned int rate)
-{
-	struct erofs_fault_info *ffi = &sbi->fault_info;
-
-	if (rate) {
-		atomic_set(&ffi->inject_ops, 0);
-		ffi->inject_rate = rate;
-		ffi->inject_type = (1 << FAULT_MAX) - 1;
-	} else {
-		memset(ffi, 0, sizeof(struct erofs_fault_info));
-	}
-
-	set_opt(sbi, FAULT_INJECTION);
-}
-
-static int erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				  substring_t *args)
-{
-	int rate = 0;
-
-	if (args->from && match_int(args, &rate))
-		return -EINVAL;
-
-	__erofs_build_fault_attr(sbi, rate);
-	return 0;
-}
-
-static unsigned int erofs_get_fault_rate(struct erofs_sb_info *sbi)
-{
-	return sbi->fault_info.inject_rate;
-}
-#else
-static void __erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				     unsigned int rate)
-{
-}
-
-static int erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				  substring_t *args)
-{
-	infoln("fault_injection options not supported");
-	return 0;
-}
-
-static unsigned int erofs_get_fault_rate(struct erofs_sb_info *sbi)
-{
-	return 0;
-}
-#endif
-
 #ifdef CONFIG_EROFS_FS_ZIP
 static int erofs_build_cache_strategy(struct erofs_sb_info *sbi,
 				      substring_t *args)
@@ -237,7 +180,6 @@ enum {
 	Opt_nouser_xattr,
 	Opt_acl,
 	Opt_noacl,
-	Opt_fault_injection,
 	Opt_cache_strategy,
 	Opt_err
 };
@@ -247,7 +189,6 @@ static match_table_t erofs_tokens = {
 	{Opt_nouser_xattr, "nouser_xattr"},
 	{Opt_acl, "acl"},
 	{Opt_noacl, "noacl"},
-	{Opt_fault_injection, "fault_injection=%u"},
 	{Opt_cache_strategy, "cache_strategy=%s"},
 	{Opt_err, NULL}
 };
@@ -301,11 +242,6 @@ static int erofs_parse_options(struct super_block *sb, char *options)
 			infoln("noacl options not supported");
 			break;
 #endif
-		case Opt_fault_injection:
-			err = erofs_build_fault_attr(EROFS_SB(sb), args);
-			if (err)
-				return err;
-			break;
 		case Opt_cache_strategy:
 			err = erofs_build_cache_strategy(EROFS_SB(sb), args);
 			if (err)
@@ -593,9 +529,6 @@ static int erofs_show_options(struct seq_file *seq, struct dentry *root)
 	else
 		seq_puts(seq, ",noacl");
 #endif
-	if (test_opt(sbi, FAULT_INJECTION))
-		seq_printf(seq, ",fault_injection=%u",
-			   erofs_get_fault_rate(sbi));
 #ifdef CONFIG_EROFS_FS_ZIP
 	if (sbi->cache_strategy == EROFS_ZIP_CACHE_DISABLED) {
 		seq_puts(seq, ",cache_strategy=disabled");
@@ -615,7 +548,6 @@ static int erofs_remount(struct super_block *sb, int *flags, char *data)
 {
 	struct erofs_sb_info *sbi = EROFS_SB(sb);
 	unsigned int org_mnt_opt = sbi->mount_opt;
-	unsigned int org_inject_rate = erofs_get_fault_rate(sbi);
 	int err;
 
 	DBG_BUGON(!sb_rdonly(sb));
@@ -631,9 +563,7 @@ static int erofs_remount(struct super_block *sb, int *flags, char *data)
 	*flags |= SB_RDONLY;
 	return 0;
 out:
-	__erofs_build_fault_attr(sbi, org_inject_rate);
 	sbi->mount_opt = org_mnt_opt;
-
 	return err;
 }
 
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 8587d6751c48..ff8ab444172d 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -724,15 +724,9 @@ static inline void z_erofs_vle_read_endio(struct bio *bio)
 		DBG_BUGON(PageUptodate(page));
 		DBG_BUGON(!page->mapping);
 
-		if (!sbi && !z_erofs_page_is_staging(page)) {
+		if (!sbi && !z_erofs_page_is_staging(page))
 			sbi = EROFS_SB(page->mapping->host->i_sb);
 
-			if (time_to_inject(sbi, FAULT_READ_IO)) {
-				erofs_show_injection_info(FAULT_READ_IO);
-				err = BLK_STS_IOERR;
-			}
-		}
-
 		/* sbi should already be gotten if the page is managed */
 		if (sbi)
 			cachemngd = erofs_page_is_managed(sbi, page);
-- 
2.17.1

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

WARNING: multiple messages have this Message-ID (diff)
From: Gao Xiang <gaoxiang25@huawei.com>
To: Chao Yu <yuchao0@huawei.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Christoph Hellwig <hch@lst.de>, <devel@driverdev.osuosl.org>
Cc: linux-fsdevel@vger.kernel.org, Miao Xie <miaoxie@huawei.com>,
	linux-erofs@lists.ozlabs.org
Subject: [PATCH v2 19/25] erofs: kill all erofs specific fault injection
Date: Wed, 4 Sep 2019 10:09:06 +0800	[thread overview]
Message-ID: <20190904020912.63925-20-gaoxiang25@huawei.com> (raw)
In-Reply-To: <20190904020912.63925-1-gaoxiang25@huawei.com>

As Christoph suggested [1], "Please just use plain kmalloc
everywhere and let the normal kernel error injection code
take care of injeting any errors."

[1] https://lore.kernel.org/r/20190829102426.GE20598@infradead.org/
Reported-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
---
 Documentation/filesystems/erofs.txt |  5 ---
 fs/erofs/Kconfig                    |  7 ---
 fs/erofs/data.c                     |  7 ---
 fs/erofs/inode.c                    |  3 +-
 fs/erofs/internal.h                 | 65 ---------------------------
 fs/erofs/super.c                    | 70 -----------------------------
 fs/erofs/zdata.c                    |  8 +---
 7 files changed, 2 insertions(+), 163 deletions(-)

diff --git a/Documentation/filesystems/erofs.txt b/Documentation/filesystems/erofs.txt
index 38aa9126ec98..c3b5f603b2b6 100644
--- a/Documentation/filesystems/erofs.txt
+++ b/Documentation/filesystems/erofs.txt
@@ -52,11 +52,6 @@ linux-erofs mailing list:
 Mount options
 =============
 
-fault_injection=%d     Enable fault injection in all supported types with
-                       specified injection rate. Supported injection type:
-                       Type_Name                Type_Value
-                       FAULT_KMALLOC            0x000000001
-                       FAULT_READ_IO            0x000000002
 (no)user_xattr         Setup Extended User Attributes. Note: xattr is enabled
                        by default if CONFIG_EROFS_FS_XATTR is selected.
 (no)acl                Setup POSIX Access Control List. Note: acl is enabled
diff --git a/fs/erofs/Kconfig b/fs/erofs/Kconfig
index 16316d1adca3..9d634d3a1845 100644
--- a/fs/erofs/Kconfig
+++ b/fs/erofs/Kconfig
@@ -27,13 +27,6 @@ config EROFS_FS_DEBUG
 
 	  For daily use, say N.
 
-config EROFS_FAULT_INJECTION
-	bool "EROFS fault injection facility"
-	depends on EROFS_FS
-	help
-	  Test EROFS to inject faults such as ENOMEM, EIO, and so on.
-	  If unsure, say N.
-
 config EROFS_FS_XATTR
 	bool "EROFS extended attributes"
 	depends on EROFS_FS
diff --git a/fs/erofs/data.c b/fs/erofs/data.c
index 3ce87a88452a..b5f5b8592d14 100644
--- a/fs/erofs/data.c
+++ b/fs/erofs/data.c
@@ -11,16 +11,10 @@
 
 static void erofs_readendio(struct bio *bio)
 {
-	struct super_block *const sb = bio->bi_private;
 	struct bio_vec *bvec;
 	blk_status_t err = bio->bi_status;
 	struct bvec_iter_all iter_all;
 
-	if (time_to_inject(EROFS_SB(sb), FAULT_READ_IO)) {
-		erofs_show_injection_info(FAULT_READ_IO);
-		err = BLK_STS_IOERR;
-	}
-
 	bio_for_each_segment_all(bvec, bio, iter_all) {
 		struct page *page = bvec->bv_page;
 
@@ -48,7 +42,6 @@ static struct bio *erofs_grab_raw_bio(struct super_block *sb,
 	bio->bi_end_io = erofs_readendio;
 	bio_set_dev(bio, sb->s_bdev);
 	bio->bi_iter.bi_sector = (sector_t)blkaddr << LOG_SECTORS_PER_BLOCK;
-	bio->bi_private = sb;
 	if (ismeta)
 		bio->bi_opf = REQ_OP_READ | REQ_META;
 	else
diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
index 384905e0677c..8e53765a532c 100644
--- a/fs/erofs/inode.c
+++ b/fs/erofs/inode.c
@@ -131,7 +131,6 @@ static int erofs_fill_symlink(struct inode *inode, void *data,
 			      unsigned int m_pofs)
 {
 	struct erofs_inode *vi = EROFS_I(inode);
-	struct erofs_sb_info *sbi = EROFS_I_SB(inode);
 	char *lnk;
 
 	/* if it cannot be handled with fast symlink scheme */
@@ -141,7 +140,7 @@ static int erofs_fill_symlink(struct inode *inode, void *data,
 		return 0;
 	}
 
-	lnk = erofs_kmalloc(sbi, inode->i_size + 1, GFP_KERNEL);
+	lnk = kmalloc(inode->i_size + 1, GFP_KERNEL);
 	if (!lnk)
 		return -ENOMEM;
 
diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h
index 881eb2ee18b5..d659c1941f93 100644
--- a/fs/erofs/internal.h
+++ b/fs/erofs/internal.h
@@ -32,23 +32,6 @@
 #define DBG_BUGON(x)            ((void)(x))
 #endif	/* !CONFIG_EROFS_FS_DEBUG */
 
-enum {
-	FAULT_KMALLOC,
-	FAULT_READ_IO,
-	FAULT_MAX,
-};
-
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-extern const char *erofs_fault_name[FAULT_MAX];
-#define IS_FAULT_SET(fi, type) ((fi)->inject_type & (1 << (type)))
-
-struct erofs_fault_info {
-	atomic_t inject_ops;
-	unsigned int inject_rate;
-	unsigned int inject_type;
-};
-#endif	/* CONFIG_EROFS_FAULT_INJECTION */
-
 /* EROFS_SUPER_MAGIC_V1 to represent the whole file system */
 #define EROFS_SUPER_MAGIC   EROFS_SUPER_MAGIC_V1
 
@@ -99,62 +82,14 @@ struct erofs_sb_info {
 	u32 feature_incompat;
 
 	unsigned int mount_opt;
-
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-	struct erofs_fault_info fault_info;	/* For fault injection */
-#endif
 };
 
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-#define erofs_show_injection_info(type)					\
-	infoln("inject %s in %s of %pS", erofs_fault_name[type],        \
-		__func__, __builtin_return_address(0))
-
-static inline bool time_to_inject(struct erofs_sb_info *sbi, int type)
-{
-	struct erofs_fault_info *ffi = &sbi->fault_info;
-
-	if (!ffi->inject_rate)
-		return false;
-
-	if (!IS_FAULT_SET(ffi, type))
-		return false;
-
-	atomic_inc(&ffi->inject_ops);
-	if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) {
-		atomic_set(&ffi->inject_ops, 0);
-		return true;
-	}
-	return false;
-}
-#else
-static inline bool time_to_inject(struct erofs_sb_info *sbi, int type)
-{
-	return false;
-}
-
-static inline void erofs_show_injection_info(int type)
-{
-}
-#endif	/* !CONFIG_EROFS_FAULT_INJECTION */
-
-static inline void *erofs_kmalloc(struct erofs_sb_info *sbi,
-					size_t size, gfp_t flags)
-{
-	if (time_to_inject(sbi, FAULT_KMALLOC)) {
-		erofs_show_injection_info(FAULT_KMALLOC);
-		return NULL;
-	}
-	return kmalloc(size, flags);
-}
-
 #define EROFS_SB(sb) ((struct erofs_sb_info *)(sb)->s_fs_info)
 #define EROFS_I_SB(inode) ((struct erofs_sb_info *)(inode)->i_sb->s_fs_info)
 
 /* Mount flags set via mount options or defaults */
 #define EROFS_MOUNT_XATTR_USER		0x00000010
 #define EROFS_MOUNT_POSIX_ACL		0x00000020
-#define EROFS_MOUNT_FAULT_INJECTION	0x00000040
 
 #define clear_opt(sbi, option)	((sbi)->mount_opt &= ~EROFS_MOUNT_##option)
 #define set_opt(sbi, option)	((sbi)->mount_opt |= EROFS_MOUNT_##option)
diff --git a/fs/erofs/super.c b/fs/erofs/super.c
index 36e569a79172..407c95854be1 100644
--- a/fs/erofs/super.c
+++ b/fs/erofs/super.c
@@ -126,63 +126,6 @@ static int erofs_read_superblock(struct super_block *sb)
 	return ret;
 }
 
-#ifdef CONFIG_EROFS_FAULT_INJECTION
-const char *erofs_fault_name[FAULT_MAX] = {
-	[FAULT_KMALLOC]		= "kmalloc",
-	[FAULT_READ_IO]		= "read IO error",
-};
-
-static void __erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				     unsigned int rate)
-{
-	struct erofs_fault_info *ffi = &sbi->fault_info;
-
-	if (rate) {
-		atomic_set(&ffi->inject_ops, 0);
-		ffi->inject_rate = rate;
-		ffi->inject_type = (1 << FAULT_MAX) - 1;
-	} else {
-		memset(ffi, 0, sizeof(struct erofs_fault_info));
-	}
-
-	set_opt(sbi, FAULT_INJECTION);
-}
-
-static int erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				  substring_t *args)
-{
-	int rate = 0;
-
-	if (args->from && match_int(args, &rate))
-		return -EINVAL;
-
-	__erofs_build_fault_attr(sbi, rate);
-	return 0;
-}
-
-static unsigned int erofs_get_fault_rate(struct erofs_sb_info *sbi)
-{
-	return sbi->fault_info.inject_rate;
-}
-#else
-static void __erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				     unsigned int rate)
-{
-}
-
-static int erofs_build_fault_attr(struct erofs_sb_info *sbi,
-				  substring_t *args)
-{
-	infoln("fault_injection options not supported");
-	return 0;
-}
-
-static unsigned int erofs_get_fault_rate(struct erofs_sb_info *sbi)
-{
-	return 0;
-}
-#endif
-
 #ifdef CONFIG_EROFS_FS_ZIP
 static int erofs_build_cache_strategy(struct erofs_sb_info *sbi,
 				      substring_t *args)
@@ -237,7 +180,6 @@ enum {
 	Opt_nouser_xattr,
 	Opt_acl,
 	Opt_noacl,
-	Opt_fault_injection,
 	Opt_cache_strategy,
 	Opt_err
 };
@@ -247,7 +189,6 @@ static match_table_t erofs_tokens = {
 	{Opt_nouser_xattr, "nouser_xattr"},
 	{Opt_acl, "acl"},
 	{Opt_noacl, "noacl"},
-	{Opt_fault_injection, "fault_injection=%u"},
 	{Opt_cache_strategy, "cache_strategy=%s"},
 	{Opt_err, NULL}
 };
@@ -301,11 +242,6 @@ static int erofs_parse_options(struct super_block *sb, char *options)
 			infoln("noacl options not supported");
 			break;
 #endif
-		case Opt_fault_injection:
-			err = erofs_build_fault_attr(EROFS_SB(sb), args);
-			if (err)
-				return err;
-			break;
 		case Opt_cache_strategy:
 			err = erofs_build_cache_strategy(EROFS_SB(sb), args);
 			if (err)
@@ -593,9 +529,6 @@ static int erofs_show_options(struct seq_file *seq, struct dentry *root)
 	else
 		seq_puts(seq, ",noacl");
 #endif
-	if (test_opt(sbi, FAULT_INJECTION))
-		seq_printf(seq, ",fault_injection=%u",
-			   erofs_get_fault_rate(sbi));
 #ifdef CONFIG_EROFS_FS_ZIP
 	if (sbi->cache_strategy == EROFS_ZIP_CACHE_DISABLED) {
 		seq_puts(seq, ",cache_strategy=disabled");
@@ -615,7 +548,6 @@ static int erofs_remount(struct super_block *sb, int *flags, char *data)
 {
 	struct erofs_sb_info *sbi = EROFS_SB(sb);
 	unsigned int org_mnt_opt = sbi->mount_opt;
-	unsigned int org_inject_rate = erofs_get_fault_rate(sbi);
 	int err;
 
 	DBG_BUGON(!sb_rdonly(sb));
@@ -631,9 +563,7 @@ static int erofs_remount(struct super_block *sb, int *flags, char *data)
 	*flags |= SB_RDONLY;
 	return 0;
 out:
-	__erofs_build_fault_attr(sbi, org_inject_rate);
 	sbi->mount_opt = org_mnt_opt;
-
 	return err;
 }
 
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 8587d6751c48..ff8ab444172d 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -724,15 +724,9 @@ static inline void z_erofs_vle_read_endio(struct bio *bio)
 		DBG_BUGON(PageUptodate(page));
 		DBG_BUGON(!page->mapping);
 
-		if (!sbi && !z_erofs_page_is_staging(page)) {
+		if (!sbi && !z_erofs_page_is_staging(page))
 			sbi = EROFS_SB(page->mapping->host->i_sb);
 
-			if (time_to_inject(sbi, FAULT_READ_IO)) {
-				erofs_show_injection_info(FAULT_READ_IO);
-				err = BLK_STS_IOERR;
-			}
-		}
-
 		/* sbi should already be gotten if the page is managed */
 		if (sbi)
 			cachemngd = erofs_page_is_managed(sbi, page);
-- 
2.17.1


  parent reply	other threads:[~2019-09-04  2:10 UTC|newest]

Thread overview: 432+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-02 12:53 [PATCH v6 00/24] erofs: promote erofs from staging Gao Xiang
2019-08-02 12:53 ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 01/24] erofs: add on-disk layout Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-29  9:59   ` Christoph Hellwig
2019-08-29  9:59     ` Christoph Hellwig
2019-08-29 10:32     ` Gao Xiang
2019-08-29 10:32       ` Gao Xiang
2019-08-29 10:36       ` Christoph Hellwig
2019-08-29 10:36         ` Christoph Hellwig
2019-08-29 10:58         ` Gao Xiang
2019-08-29 10:58           ` Gao Xiang
2019-08-29 15:58       ` Joe Perches
2019-08-29 15:58         ` Joe Perches
2019-08-29 17:26         ` Gao Xiang
2019-08-29 17:26           ` Gao Xiang
2019-08-30 12:07         ` David Sterba
2019-08-30 12:07           ` David Sterba
2019-08-30 12:18           ` Gao Xiang
2019-08-30 12:18             ` Gao Xiang via Linux-erofs
2019-09-02  8:43           ` Pavel Machek
2019-09-02  8:43             ` Pavel Machek
2019-09-02 14:07             ` David Sterba
2019-09-02 14:07               ` David Sterba
2019-09-02 14:07               ` David Sterba
2019-09-03 11:27               ` Pavel Machek
2019-09-03 11:27                 ` Pavel Machek
2019-08-29 15:41     ` Gao Xiang
2019-08-29 15:41       ` Gao Xiang
2019-09-01  7:54     ` Gao Xiang
2019-09-01  7:54       ` Gao Xiang via Linux-erofs
2019-09-01  7:54       ` Gao Xiang
2019-09-02 12:45       ` Christoph Hellwig
2019-09-02 12:45         ` Christoph Hellwig
2019-09-02 12:45         ` Christoph Hellwig
2019-09-02 13:02         ` Gao Xiang
2019-09-02 13:02           ` Gao Xiang
2019-09-02 13:02           ` Gao Xiang
2019-09-02  8:40     ` Pavel Machek
2019-09-02  8:40       ` Pavel Machek
2019-09-02  8:40       ` Pavel Machek
2019-09-02 10:35       ` Gao Xiang
2019-09-02 10:35         ` Gao Xiang
2019-09-02 10:35         ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 02/24] erofs: add erofs in-memory stuffs Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 03/24] erofs: add super block operations Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-29 10:15   ` Christoph Hellwig
2019-08-29 10:15     ` Christoph Hellwig
2019-08-29 10:50     ` Gao Xiang
2019-08-29 10:50       ` Gao Xiang
2019-08-30 16:39       ` Christoph Hellwig
2019-08-30 16:39         ` Christoph Hellwig
2019-08-30 16:39         ` Christoph Hellwig
2019-08-30 17:15         ` Gao Xiang
2019-08-30 17:15           ` Gao Xiang
2019-08-30 17:15           ` Gao Xiang
2019-08-31  0:54           ` Gao Xiang
2019-08-31  0:54             ` Gao Xiang
2019-08-31  0:54             ` Gao Xiang
2019-08-31  6:34           ` Amir Goldstein
2019-08-31  6:34             ` Amir Goldstein
2019-08-31  6:34             ` Amir Goldstein
2019-08-31  6:48             ` Gao Xiang
2019-08-31  6:48               ` Gao Xiang
2019-08-31  6:48               ` Gao Xiang
2019-09-01  8:54     ` Gao Xiang
2019-09-01  8:54       ` Gao Xiang via Linux-erofs
2019-09-01  8:54       ` Gao Xiang
2019-09-02 12:51       ` Christoph Hellwig
2019-09-02 12:51         ` Christoph Hellwig
2019-09-02 12:51         ` Christoph Hellwig
2019-09-02 14:43         ` Gao Xiang
2019-09-02 14:43           ` Gao Xiang
2019-09-02 14:43           ` Gao Xiang
2019-09-02 15:19           ` Christoph Hellwig
2019-09-02 15:19             ` Christoph Hellwig
2019-09-02 15:19             ` Christoph Hellwig
2019-09-02 15:24             ` Gao Xiang
2019-09-02 15:24               ` Gao Xiang
2019-09-02 15:24               ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 04/24] erofs: add raw address_space operations Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-29 10:17   ` Christoph Hellwig
2019-08-29 10:17     ` Christoph Hellwig
2019-08-29 11:46     ` Gao Xiang
2019-08-29 11:46       ` Gao Xiang
2019-08-30 16:40       ` Christoph Hellwig
2019-08-30 16:40         ` Christoph Hellwig
2019-08-30 16:40         ` Christoph Hellwig
2019-08-30 17:23         ` Gao Xiang
2019-08-30 17:23           ` Gao Xiang
2019-08-30 17:23           ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 05/24] erofs: add inode operations Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-29 10:24   ` Christoph Hellwig
2019-08-29 10:24     ` Christoph Hellwig
2019-08-29 11:59     ` Gao Xiang
2019-08-29 11:59       ` Gao Xiang
2019-08-30 16:42       ` Christoph Hellwig
2019-08-30 16:42         ` Christoph Hellwig
2019-08-30 16:42         ` Christoph Hellwig
2019-08-30 18:46         ` Gao Xiang
2019-08-30 18:46           ` Gao Xiang
2019-08-30 18:46           ` Gao Xiang
2019-09-01  9:34     ` Gao Xiang
2019-09-01  9:34       ` Gao Xiang via Linux-erofs
2019-09-01  9:34       ` Gao Xiang
2019-09-02 12:53       ` Christoph Hellwig
2019-09-02 12:53         ` Christoph Hellwig
2019-09-02 12:53         ` Christoph Hellwig
2019-09-02 13:43       ` David Sterba
2019-09-02 13:43         ` David Sterba
2019-09-02 13:43         ` David Sterba
2019-09-02 13:55         ` Gao Xiang
2019-09-02 13:55           ` Gao Xiang
2019-09-02 13:55           ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 06/24] erofs: support special inode Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-29 10:25   ` Christoph Hellwig
2019-08-29 10:25     ` Christoph Hellwig
2019-09-01  9:39     ` Gao Xiang
2019-09-01  9:39       ` Gao Xiang via Linux-erofs
2019-09-01  9:39       ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 07/24] erofs: add directory operations Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 08/24] erofs: add namei functions Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-29 10:28   ` Christoph Hellwig
2019-08-29 10:28     ` Christoph Hellwig
2019-08-29 11:28     ` Gao Xiang
2019-08-29 11:28       ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 09/24] erofs: support tracepoint Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 10/24] erofs: update Kconfig and Makefile Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 11/24] erofs: introduce xattr & posixacl support Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 12/24] erofs: introduce tagged pointer Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 13/24] erofs: add compression indexes support Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 14/24] erofs: introduce superblock registration Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 15/24] erofs: introduce erofs shrinker Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 16/24] erofs: introduce workstation for decompression Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 17/24] erofs: introduce per-CPU buffers implementation Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 18/24] erofs: introduce pagevec for decompression subsystem Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 19/24] erofs: add erofs_allocpage() Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 20/24] erofs: introduce generic decompression backend Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 21/24] erofs: introduce LZ4 decompression inplace Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 22/24] erofs: introduce the decompression frontend Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 23/24] erofs: introduce cached decompression Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-08-02 12:53 ` [PATCH v6 24/24] erofs: add document Gao Xiang
2019-08-02 12:53   ` Gao Xiang
2019-09-01  5:51 ` [PATCH 00/21] erofs: patchset addressing Christoph's comments Gao Xiang
2019-09-01  5:51   ` Gao Xiang via Linux-erofs
2019-09-01  5:51   ` Gao Xiang
2019-09-01  5:51   ` [PATCH 01/21] erofs: remove all the byte offset comments Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:05     ` Christoph Hellwig
2019-09-02 12:05       ` Christoph Hellwig
2019-09-02 12:05       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 02/21] erofs: on-disk format should have explicitly assigned numbers Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:05     ` Christoph Hellwig
2019-09-02 12:05       ` Christoph Hellwig
2019-09-02 12:05       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 03/21] erofs: some macros are much more readable as a function Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:06     ` Christoph Hellwig
2019-09-02 12:06       ` Christoph Hellwig
2019-09-02 12:06       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 04/21] erofs: kill __packed for on-disk structures Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:06     ` Christoph Hellwig
2019-09-02 12:06       ` Christoph Hellwig
2019-09-02 12:06       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 05/21] erofs: update erofs_inode_is_data_compressed helper Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:07     ` Christoph Hellwig
2019-09-02 12:07       ` Christoph Hellwig
2019-09-02 12:07       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 06/21] erofs: kill erofs_{init,exit}_inode_cache Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:09     ` Christoph Hellwig
2019-09-02 12:09       ` Christoph Hellwig
2019-09-02 12:09       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 07/21] erofs: use erofs_inode naming Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:10     ` Christoph Hellwig
2019-09-02 12:10       ` Christoph Hellwig
2019-09-02 12:10       ` Christoph Hellwig
2019-09-02 12:13       ` Gao Xiang
2019-09-02 12:13         ` Gao Xiang
2019-09-02 12:13         ` Gao Xiang
2019-09-02 12:47         ` Christoph Hellwig
2019-09-02 12:47           ` Christoph Hellwig
2019-09-02 12:47           ` Christoph Hellwig
2019-09-02 13:33           ` Gao Xiang
2019-09-02 13:33             ` Gao Xiang
2019-09-02 13:33             ` Gao Xiang
2019-09-01  5:51   ` [PATCH 08/21] erofs: update comments in inode.c Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-01  5:51   ` [PATCH 09/21] erofs: update erofs symlink stuffs Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:11     ` Christoph Hellwig
2019-09-02 12:11       ` Christoph Hellwig
2019-09-02 12:11       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 10/21] erofs: kill is_inode_layout_compression() Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:11     ` Christoph Hellwig
2019-09-02 12:11       ` Christoph Hellwig
2019-09-02 12:11       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 11/21] erofs: use dsb instead of layout for ondisk super_block Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:12     ` Christoph Hellwig
2019-09-02 12:12       ` Christoph Hellwig
2019-09-02 12:12       ` Christoph Hellwig
2019-09-02 12:15       ` Gao Xiang
2019-09-02 12:15         ` Gao Xiang
2019-09-02 12:15         ` Gao Xiang
2019-09-01  5:51   ` [PATCH 12/21] erofs: kill verbose debug info in erofs_fill_super Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:14     ` Christoph Hellwig
2019-09-02 12:14       ` Christoph Hellwig
2019-09-02 12:14       ` Christoph Hellwig
2019-09-02 12:18       ` Gao Xiang
2019-09-02 12:18         ` Gao Xiang
2019-09-02 12:18         ` Gao Xiang
2019-09-01  5:51   ` [PATCH 13/21] erofs: simplify erofs_grab_bio() since bio_alloc() never fail Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:20     ` Christoph Hellwig
2019-09-02 12:20       ` Christoph Hellwig
2019-09-02 12:20       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 14/21] erofs: kill prio and nofail of erofs_get_meta_page() Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:21     ` Christoph Hellwig
2019-09-02 12:21       ` Christoph Hellwig
2019-09-02 12:21       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 15/21] erofs: kill __submit_bio() Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-01  5:51   ` [PATCH 16/21] erofs: kill magic underscores Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:26     ` Christoph Hellwig
2019-09-02 12:26       ` Christoph Hellwig
2019-09-02 12:26       ` Christoph Hellwig
2019-09-02 12:39       ` Gao Xiang
2019-09-02 12:39         ` Gao Xiang
2019-09-02 12:39         ` Gao Xiang
2019-09-02 12:54         ` Christoph Hellwig
2019-09-02 12:54           ` Christoph Hellwig
2019-09-02 12:54           ` Christoph Hellwig
2019-09-02 13:38           ` Gao Xiang
2019-09-02 13:38             ` Gao Xiang
2019-09-02 13:38             ` Gao Xiang
2019-09-01  5:51   ` [PATCH 17/21] erofs: use a switch statement when dealing with the file modes Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:27     ` Christoph Hellwig
2019-09-02 12:27       ` Christoph Hellwig
2019-09-02 12:27       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 18/21] erofs: add "erofs_" prefix for common and short functions Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:28     ` Christoph Hellwig
2019-09-02 12:28       ` Christoph Hellwig
2019-09-02 12:28       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 19/21] erofs: kill all erofs specific fault injection Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:28     ` Christoph Hellwig
2019-09-02 12:28       ` Christoph Hellwig
2019-09-02 12:28       ` Christoph Hellwig
2019-09-01  5:51   ` [PATCH 20/21] erofs: kill use_vmap module parameter Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:31     ` Christoph Hellwig
2019-09-02 12:31       ` Christoph Hellwig
2019-09-02 12:31       ` Christoph Hellwig
2019-09-02 12:43       ` Gao Xiang
2019-09-02 12:43         ` Gao Xiang
2019-09-02 12:43         ` Gao Xiang
2019-09-01  5:51   ` [PATCH 21/21] erofs: save one level of indentation Gao Xiang
2019-09-01  5:51     ` Gao Xiang via Linux-erofs
2019-09-01  5:51     ` Gao Xiang
2019-09-02 12:31     ` Christoph Hellwig
2019-09-02 12:31       ` Christoph Hellwig
2019-09-02 12:31       ` Christoph Hellwig
2019-09-02 12:46   ` [PATCH 00/21] erofs: patchset addressing Christoph's comments Christoph Hellwig
2019-09-02 12:46     ` Christoph Hellwig
2019-09-02 12:46     ` Christoph Hellwig
2019-09-02 14:24     ` Gao Xiang
2019-09-02 14:24       ` Gao Xiang
2019-09-02 14:24       ` Gao Xiang
2019-09-02 15:23       ` Christoph Hellwig
2019-09-02 15:23         ` Christoph Hellwig
2019-09-02 15:23         ` Christoph Hellwig
2019-09-02 15:50         ` Gao Xiang
2019-09-02 15:50           ` Gao Xiang
2019-09-02 15:50           ` Gao Xiang
2019-09-03  6:58           ` Christoph Hellwig
2019-09-03  6:58             ` Christoph Hellwig
2019-09-03  6:58             ` Christoph Hellwig
2019-09-03  8:17             ` Gao Xiang
2019-09-03  8:17               ` Gao Xiang
2019-09-03  8:17               ` Gao Xiang
2019-09-03 15:37               ` Christoph Hellwig
2019-09-03 15:37                 ` Christoph Hellwig
2019-09-03 15:37                 ` Christoph Hellwig
2019-09-03 15:43                 ` Gao Xiang
2019-09-03 15:43                   ` Gao Xiang via Linux-erofs
2019-09-03 15:43                   ` Gao Xiang
2019-09-04  2:08   ` [PATCH v2 00/25] " Gao Xiang
2019-09-04  2:08     ` Gao Xiang
2019-09-04  2:08     ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 01/25] erofs: remove all the byte offset comments Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 02/25] erofs: on-disk format should have explicitly assigned numbers Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 03/25] erofs: some macros are much more readable as a function Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 04/25] erofs: kill __packed for on-disk structures Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 05/25] erofs: update erofs_inode_is_data_compressed helper Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 06/25] erofs: use feature_incompat rather than requirements Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 07/25] erofs: better naming for erofs inode related stuffs Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 08/25] erofs: kill erofs_{init,exit}_inode_cache Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 09/25] erofs: use erofs_inode naming Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 10/25] erofs: update erofs_fs.h comments Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 11/25] erofs: update comments in inode.c Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08     ` [PATCH v2 12/25] erofs: better erofs symlink stuffs Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:08       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 13/25] erofs: use dsb instead of layout for ondisk super_block Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 14/25] erofs: kill verbose debug info in erofs_fill_super Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 15/25] erofs: localize erofs_grab_bio() Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 16/25] erofs: kill prio and nofail of erofs_get_meta_page() Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 17/25] erofs: kill __submit_bio() Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 18/25] erofs: add "erofs_" prefix for common and short functions Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` Gao Xiang [this message]
2019-09-04  2:09       ` [PATCH v2 19/25] erofs: kill all erofs specific fault injection Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 20/25] erofs: kill use_vmap module parameter Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 21/25] erofs: save one level of indentation Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 22/25] erofs: rename errln/infoln/debugln to erofs_{err,info,dbg} Gao Xiang
2019-09-04  2:09       ` [PATCH v2 22/25] erofs: rename errln/infoln/debugln to erofs_{err, info, dbg} Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 23/25] erofs: use read_mapping_page instead of sb_bread Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 24/25] erofs: always use iget5_locked Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09     ` [PATCH v2 25/25] erofs: use read_cache_page_gfp for erofs_get_meta_page Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  2:09       ` Gao Xiang
2019-09-04  3:27     ` [PATCH v2 00/25] erofs: patchset addressing Christoph's comments Chao Yu
2019-09-04  3:27       ` Chao Yu
2019-09-04  3:27       ` Chao Yu
2019-09-05  1:03       ` Gao Xiang
2019-09-05  1:03         ` Gao Xiang via Linux-erofs
2019-09-05  1:03         ` Gao Xiang
2019-09-05 11:30         ` Christoph Hellwig
2019-09-05 11:30           ` Christoph Hellwig
2019-09-05 11:30           ` Christoph Hellwig
2019-09-04  5:16     ` Christoph Hellwig
2019-09-04  5:16       ` Christoph Hellwig
2019-09-04  5:16       ` Christoph Hellwig
2019-09-04  6:08       ` Gao Xiang
2019-09-04  6:08         ` Gao Xiang via Linux-erofs
2019-09-04  6:08         ` Gao Xiang

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=20190904020912.63925-20-gaoxiang25@huawei.com \
    --to=gaoxiang25@huawei.com \
    --cc=chao@kernel.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@lst.de \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=miaoxie@huawei.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.