linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number
@ 2019-04-10  8:35 Qu Wenruo
  2019-04-10  8:35 ` [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status Qu Wenruo
  2019-04-10 15:11 ` [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Darrick J. Wong
  0 siblings, 2 replies; 10+ messages in thread
From: Qu Wenruo @ 2019-04-10  8:35 UTC (permalink / raw)
  To: linux-btrfs, linux-block, linux-fsdevel

Xfs and Ext* uses EFSCORRUPTED to indicate filesystem corruption.
They both map EFSCORRUPTED to EUCLEAN.

Btrfs/Ubifs/fscrypto all use EUCLEAN directly to indicate filesystem
corruption.

And block layer is going to distinguish filesystem corruption with
oridinary EIO error, it's a good idea to export the initial EFSCORRUPTED
declaration to <linux/errno.h> so all filesystems and block layer can
take advantage of this easier-to-read error number.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 fs/ext2/ext2.h                   | 1 -
 fs/ext4/ext4.h                   | 1 -
 fs/xfs/xfs_linux.h               | 1 -
 include/uapi/asm-generic/errno.h | 3 +++
 4 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
index 10ab238de9a6..03d0ca8fae42 100644
--- a/fs/ext2/ext2.h
+++ b/fs/ext2/ext2.h
@@ -369,7 +369,6 @@ struct ext2_inode {
  */
 #define	EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
 #define	EXT2_ERROR_FS			0x0002	/* Errors detected */
-#define	EFSCORRUPTED			EUCLEAN	/* Filesystem is corrupted */
 
 /*
  * Mount flags
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 82ffdacdc7fa..f906b5cbf96d 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -3248,6 +3248,5 @@ extern const struct iomap_ops ext4_iomap_ops;
 #endif	/* __KERNEL__ */
 
 #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
-#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
 
 #endif	/* _EXT4_H */
diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
index edbd5a210df2..36e5c6549f15 100644
--- a/fs/xfs/xfs_linux.h
+++ b/fs/xfs/xfs_linux.h
@@ -125,7 +125,6 @@ typedef __u32			xfs_nlink_t;
 
 #define ENOATTR		ENODATA		/* Attribute not found */
 #define EWRONGFS	EINVAL		/* Mount with wrong filesystem type */
-#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
 #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
 
 #define SYNCHRONIZE()	barrier()
diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
index cf9c51ac49f9..ebd6e7e76a98 100644
--- a/include/uapi/asm-generic/errno.h
+++ b/include/uapi/asm-generic/errno.h
@@ -98,6 +98,9 @@
 #define	EINPROGRESS	115	/* Operation now in progress */
 #define	ESTALE		116	/* Stale file handle */
 #define	EUCLEAN		117	/* Structure needs cleaning */
+
+#define EFSCORRUPTED	EUCLEAN	/* Filesystem is corrupted */
+
 #define	ENOTNAM		118	/* Not a XENIX named type file */
 #define	ENAVAIL		119	/* No XENIX semaphores available */
 #define	EISNAM		120	/* Is a named type file */
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status
  2019-04-10  8:35 [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Qu Wenruo
@ 2019-04-10  8:35 ` Qu Wenruo
  2019-04-10  8:55   ` Nikolay Borisov
  2019-04-10 13:04   ` kbuild test robot
  2019-04-10 15:11 ` [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Darrick J. Wong
  1 sibling, 2 replies; 10+ messages in thread
From: Qu Wenruo @ 2019-04-10  8:35 UTC (permalink / raw)
  To: linux-btrfs, linux-block, linux-fsdevel

There are quite a lot of filesystems doing their verification work done
at endio hook or hook before submitting bio.

Normally such verification returns -EUCLEAN/-EFSCORRUPTED to indicate
something unexpected, and some of such verification either use
bio->bi_status or users bio->bi_endio to return their value.

In such case, the missing of corresponding BLK_STS_ bit can lower
the severity just like:

  In endio function:
	return errno_to_blk_status(-EFSCORRUPTED);
 	^^^ -EFSCORRUPTED gets interpreted to BLK_STS_IOERR

  In the filesystem code:
	ret = blk_status_to_errno(bi->bi_status);
	^^^ BLK_STS_IOERR gets interpreted to -EIO;

This lowers the severity, making the filesystem layer to believe it's
just an ordinary error.

This patch will add a new BLK_STS_FSCORRUPTED, to allow -EFSCORRUPTED to
be converted to BLK_STS_FSCORRUPTED, and then converted back to
-EFSCORRUPTED without losing info.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 block/blk-core.c          | 1 +
 include/linux/blk_types.h | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/block/blk-core.c b/block/blk-core.c
index a55389ba8779..ba7acfc3d8e0 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -135,6 +135,7 @@ static const struct {
 	[BLK_STS_RESOURCE]	= { -ENOMEM,	"kernel resource" },
 	[BLK_STS_DEV_RESOURCE]	= { -EBUSY,	"device resource" },
 	[BLK_STS_AGAIN]		= { -EAGAIN,	"nonblocking retry" },
+	[BLK_STS_FSCORRUPTED]	= { -EFSCORRUPTED, "filesystem is corrupted" },
 
 	/* device mapper special case, should not leak out: */
 	[BLK_STS_DM_REQUEUE]	= { -EREMCHG, "dm internal retry" },
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index 791fee35df88..8f70bbec6c83 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -63,6 +63,9 @@ typedef u8 __bitwise blk_status_t;
  */
 #define BLK_STS_DEV_RESOURCE	((__force blk_status_t)13)
 
+/* Normally filesystem layer generated error */
+#define BLK_STS_FSCORRUPTED	((__force blk_status_t)14)
+
 /**
  * blk_path_error - returns true if error may be path related
  * @error: status the request was completed with
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status
  2019-04-10  8:35 ` [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status Qu Wenruo
@ 2019-04-10  8:55   ` Nikolay Borisov
  2019-04-10 13:04   ` kbuild test robot
  1 sibling, 0 replies; 10+ messages in thread
From: Nikolay Borisov @ 2019-04-10  8:55 UTC (permalink / raw)
  To: Qu Wenruo, linux-btrfs, linux-block, linux-fsdevel



On 10.04.19 г. 11:35 ч., Qu Wenruo wrote:
> There are quite a lot of filesystems doing their verification work done
> at endio hook or hook before submitting bio.
> 
> Normally such verification returns -EUCLEAN/-EFSCORRUPTED to indicate
> something unexpected, and some of such verification either use> bio->bi_status or users bio->bi_endio to return their value.

Usually filesystems return -EUCLEAN/-EFSCORRUPTED to indicate failed
verification. Currently there is no strict way how this information is
communicated - either via bio->bi_status or through the bio's endio
return value.

> 
> In such case, the missing of corresponding BLK_STS_ bit can lower
> the severity just like:
> 
>   In endio function:
> 	return errno_to_blk_status(-EFSCORRUPTED);
>  	^^^ -EFSCORRUPTED gets interpreted to BLK_STS_IOERR
> 
>   In the filesystem code:
> 	ret = blk_status_to_errno(bi->bi_status);
> 	^^^ BLK_STS_IOERR gets interpreted to -EIO;
> 
> This lowers the severity, making the filesystem layer to believe it's
> just an ordinary error.
> 
> This patch will add a new BLK_STS_FSCORRUPTED, to allow -EFSCORRUPTED to
> be converted to BLK_STS_FSCORRUPTED, and then converted back to
> -EFSCORRUPTED without losing info.

This patch will add a new BLK_STS_FSCORRUPTED block status code,
allowing filesystem corruptions to be properly communicated to upper
layers.

> 
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
>  block/blk-core.c          | 1 +
>  include/linux/blk_types.h | 3 +++
>  2 files changed, 4 insertions(+)
> 
> diff --git a/block/blk-core.c b/block/blk-core.c
> index a55389ba8779..ba7acfc3d8e0 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -135,6 +135,7 @@ static const struct {
>  	[BLK_STS_RESOURCE]	= { -ENOMEM,	"kernel resource" },
>  	[BLK_STS_DEV_RESOURCE]	= { -EBUSY,	"device resource" },
>  	[BLK_STS_AGAIN]		= { -EAGAIN,	"nonblocking retry" },
> +	[BLK_STS_FSCORRUPTED]	= { -EFSCORRUPTED, "filesystem is corrupted" },
>  
>  	/* device mapper special case, should not leak out: */
>  	[BLK_STS_DM_REQUEUE]	= { -EREMCHG, "dm internal retry" },
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 791fee35df88..8f70bbec6c83 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -63,6 +63,9 @@ typedef u8 __bitwise blk_status_t;
>   */
>  #define BLK_STS_DEV_RESOURCE	((__force blk_status_t)13)
>  
> +/* Normally filesystem layer generated error */
> +#define BLK_STS_FSCORRUPTED	((__force blk_status_t)14)
> +
>  /**
>   * blk_path_error - returns true if error may be path related
>   * @error: status the request was completed with
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status
  2019-04-10  8:35 ` [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status Qu Wenruo
  2019-04-10  8:55   ` Nikolay Borisov
@ 2019-04-10 13:04   ` kbuild test robot
  1 sibling, 0 replies; 10+ messages in thread
From: kbuild test robot @ 2019-04-10 13:04 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: kbuild-all, linux-btrfs, linux-block, linux-fsdevel

[-- Attachment #1: Type: text/plain, Size: 2404 bytes --]

Hi Qu,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.1-rc4 next-20190410]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Qu-Wenruo/errno-h-Export-EFSCORRUPTED-error-number/20190410-183556
config: sparc64-allyesconfig (attached as .config)
compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=sparc64 

All errors (new ones prefixed by >>):

>> block/blk-core.c:138:29: error: 'EFSCORRUPTED' undeclared here (not in a function); did you mean 'FS_NRSUPER'?
     [BLK_STS_FSCORRUPTED] = { -EFSCORRUPTED, "filesystem is corrupted" },
                                ^~~~~~~~~~~~
                                FS_NRSUPER

vim +138 block/blk-core.c

   121	
   122	static const struct {
   123		int		errno;
   124		const char	*name;
   125	} blk_errors[] = {
   126		[BLK_STS_OK]		= { 0,		"" },
   127		[BLK_STS_NOTSUPP]	= { -EOPNOTSUPP, "operation not supported" },
   128		[BLK_STS_TIMEOUT]	= { -ETIMEDOUT,	"timeout" },
   129		[BLK_STS_NOSPC]		= { -ENOSPC,	"critical space allocation" },
   130		[BLK_STS_TRANSPORT]	= { -ENOLINK,	"recoverable transport" },
   131		[BLK_STS_TARGET]	= { -EREMOTEIO,	"critical target" },
   132		[BLK_STS_NEXUS]		= { -EBADE,	"critical nexus" },
   133		[BLK_STS_MEDIUM]	= { -ENODATA,	"critical medium" },
   134		[BLK_STS_PROTECTION]	= { -EILSEQ,	"protection" },
   135		[BLK_STS_RESOURCE]	= { -ENOMEM,	"kernel resource" },
   136		[BLK_STS_DEV_RESOURCE]	= { -EBUSY,	"device resource" },
   137		[BLK_STS_AGAIN]		= { -EAGAIN,	"nonblocking retry" },
 > 138		[BLK_STS_FSCORRUPTED]	= { -EFSCORRUPTED, "filesystem is corrupted" },
   139	
   140		/* device mapper special case, should not leak out: */
   141		[BLK_STS_DM_REQUEUE]	= { -EREMCHG, "dm internal retry" },
   142	
   143		/* everything else not covered above: */
   144		[BLK_STS_IOERR]		= { -EIO,	"I/O" },
   145	};
   146	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 56171 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number
  2019-04-10  8:35 [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Qu Wenruo
  2019-04-10  8:35 ` [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status Qu Wenruo
@ 2019-04-10 15:11 ` Darrick J. Wong
  2019-04-10 15:28   ` Nikolay Borisov
  2019-04-11  0:28   ` Qu Wenruo
  1 sibling, 2 replies; 10+ messages in thread
From: Darrick J. Wong @ 2019-04-10 15:11 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-btrfs, linux-block, linux-fsdevel

On Wed, Apr 10, 2019 at 04:35:07PM +0800, Qu Wenruo wrote:
> Xfs and Ext* uses EFSCORRUPTED to indicate filesystem corruption.
> They both map EFSCORRUPTED to EUCLEAN.
> 
> Btrfs/Ubifs/fscrypto all use EUCLEAN directly to indicate filesystem
> corruption.

I don't know if you (btrfs folks specifically) care but ext* and xfs
also use EFSBADCRC to signal unrecovered checksum validation failures.
Can we promote both of them to asm-generic/errno.h at the same time?

#define EFSBADCRC   EBADMSG

--D

> And block layer is going to distinguish filesystem corruption with
> oridinary EIO error, it's a good idea to export the initial EFSCORRUPTED
> declaration to <linux/errno.h> so all filesystems and block layer can
> take advantage of this easier-to-read error number.
> 
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
>  fs/ext2/ext2.h                   | 1 -
>  fs/ext4/ext4.h                   | 1 -
>  fs/xfs/xfs_linux.h               | 1 -
>  include/uapi/asm-generic/errno.h | 3 +++
>  4 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
> index 10ab238de9a6..03d0ca8fae42 100644
> --- a/fs/ext2/ext2.h
> +++ b/fs/ext2/ext2.h
> @@ -369,7 +369,6 @@ struct ext2_inode {
>   */
>  #define	EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
>  #define	EXT2_ERROR_FS			0x0002	/* Errors detected */
> -#define	EFSCORRUPTED			EUCLEAN	/* Filesystem is corrupted */
>  
>  /*
>   * Mount flags
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index 82ffdacdc7fa..f906b5cbf96d 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -3248,6 +3248,5 @@ extern const struct iomap_ops ext4_iomap_ops;
>  #endif	/* __KERNEL__ */
>  
>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>  
>  #endif	/* _EXT4_H */
> diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
> index edbd5a210df2..36e5c6549f15 100644
> --- a/fs/xfs/xfs_linux.h
> +++ b/fs/xfs/xfs_linux.h
> @@ -125,7 +125,6 @@ typedef __u32			xfs_nlink_t;
>  
>  #define ENOATTR		ENODATA		/* Attribute not found */
>  #define EWRONGFS	EINVAL		/* Mount with wrong filesystem type */
> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
>  
>  #define SYNCHRONIZE()	barrier()
> diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
> index cf9c51ac49f9..ebd6e7e76a98 100644
> --- a/include/uapi/asm-generic/errno.h
> +++ b/include/uapi/asm-generic/errno.h
> @@ -98,6 +98,9 @@
>  #define	EINPROGRESS	115	/* Operation now in progress */
>  #define	ESTALE		116	/* Stale file handle */
>  #define	EUCLEAN		117	/* Structure needs cleaning */
> +
> +#define EFSCORRUPTED	EUCLEAN	/* Filesystem is corrupted */
> +
>  #define	ENOTNAM		118	/* Not a XENIX named type file */
>  #define	ENAVAIL		119	/* No XENIX semaphores available */
>  #define	EISNAM		120	/* Is a named type file */
> -- 
> 2.21.0
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number
  2019-04-10 15:11 ` [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Darrick J. Wong
@ 2019-04-10 15:28   ` Nikolay Borisov
  2019-04-11  0:28   ` Qu Wenruo
  1 sibling, 0 replies; 10+ messages in thread
From: Nikolay Borisov @ 2019-04-10 15:28 UTC (permalink / raw)
  To: Darrick J. Wong, Qu Wenruo; +Cc: linux-btrfs, linux-block, linux-fsdevel



On 10.04.19 г. 18:11 ч., Darrick J. Wong wrote:
> On Wed, Apr 10, 2019 at 04:35:07PM +0800, Qu Wenruo wrote:
>> Xfs and Ext* uses EFSCORRUPTED to indicate filesystem corruption.
>> They both map EFSCORRUPTED to EUCLEAN.
>>
>> Btrfs/Ubifs/fscrypto all use EUCLEAN directly to indicate filesystem
>> corruption.
> 
> I don't know if you (btrfs folks specifically) care but ext* and xfs
> also use EFSBADCRC to signal unrecovered checksum validation failures.
> Can we promote both of them to asm-generic/errno.h at the same time?
> 
> #define EFSBADCRC   EBADMSG

No we don't but I think we ought to start since this is more precise
than simple -EUCLEAN. So I agree with your suggestion

> 
> --D
> 
>> And block layer is going to distinguish filesystem corruption with
>> oridinary EIO error, it's a good idea to export the initial EFSCORRUPTED
>> declaration to <linux/errno.h> so all filesystems and block layer can
>> take advantage of this easier-to-read error number.
>>
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>> ---
>>  fs/ext2/ext2.h                   | 1 -
>>  fs/ext4/ext4.h                   | 1 -
>>  fs/xfs/xfs_linux.h               | 1 -
>>  include/uapi/asm-generic/errno.h | 3 +++
>>  4 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
>> index 10ab238de9a6..03d0ca8fae42 100644
>> --- a/fs/ext2/ext2.h
>> +++ b/fs/ext2/ext2.h
>> @@ -369,7 +369,6 @@ struct ext2_inode {
>>   */
>>  #define	EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
>>  #define	EXT2_ERROR_FS			0x0002	/* Errors detected */
>> -#define	EFSCORRUPTED			EUCLEAN	/* Filesystem is corrupted */
>>  
>>  /*
>>   * Mount flags
>> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
>> index 82ffdacdc7fa..f906b5cbf96d 100644
>> --- a/fs/ext4/ext4.h
>> +++ b/fs/ext4/ext4.h
>> @@ -3248,6 +3248,5 @@ extern const struct iomap_ops ext4_iomap_ops;
>>  #endif	/* __KERNEL__ */
>>  
>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>>  
>>  #endif	/* _EXT4_H */
>> diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
>> index edbd5a210df2..36e5c6549f15 100644
>> --- a/fs/xfs/xfs_linux.h
>> +++ b/fs/xfs/xfs_linux.h
>> @@ -125,7 +125,6 @@ typedef __u32			xfs_nlink_t;
>>  
>>  #define ENOATTR		ENODATA		/* Attribute not found */
>>  #define EWRONGFS	EINVAL		/* Mount with wrong filesystem type */
>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
>>  
>>  #define SYNCHRONIZE()	barrier()
>> diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
>> index cf9c51ac49f9..ebd6e7e76a98 100644
>> --- a/include/uapi/asm-generic/errno.h
>> +++ b/include/uapi/asm-generic/errno.h
>> @@ -98,6 +98,9 @@
>>  #define	EINPROGRESS	115	/* Operation now in progress */
>>  #define	ESTALE		116	/* Stale file handle */
>>  #define	EUCLEAN		117	/* Structure needs cleaning */
>> +
>> +#define EFSCORRUPTED	EUCLEAN	/* Filesystem is corrupted */
>> +
>>  #define	ENOTNAM		118	/* Not a XENIX named type file */
>>  #define	ENAVAIL		119	/* No XENIX semaphores available */
>>  #define	EISNAM		120	/* Is a named type file */
>> -- 
>> 2.21.0
>>
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number
  2019-04-10 15:11 ` [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Darrick J. Wong
  2019-04-10 15:28   ` Nikolay Borisov
@ 2019-04-11  0:28   ` Qu Wenruo
  2019-04-11  1:06     ` Darrick J. Wong
  1 sibling, 1 reply; 10+ messages in thread
From: Qu Wenruo @ 2019-04-11  0:28 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-block, linux-btrfs, linux-fsdevel


[-- Attachment #1.1: Type: text/plain, Size: 3498 bytes --]



On 2019/4/10 下午11:11,  Darrick J. Wong  wrote:
> On Wed, Apr 10, 2019 at 04:35:07PM +0800, Qu Wenruo wrote:
>> Xfs and Ext* uses EFSCORRUPTED to indicate filesystem corruption.
>> They both map EFSCORRUPTED to EUCLEAN.
>>
>> Btrfs/Ubifs/fscrypto all use EUCLEAN directly to indicate filesystem
>> corruption.
> 
> I don't know if you (btrfs folks specifically) care but ext* and xfs
> also use EFSBADCRC to signal unrecovered checksum validation failures.
> Can we promote both of them to asm-generic/errno.h at the same time?

It looks pretty good to me in fact.

I'm really tired of using -EIO for csum mismatch/any other higher level
mismatch.

The only concern is the "CRC" part. Yes, btrfs uses and only supports
CRC32 so far, but I'm sure btrfs will support cryptographic hash.

So what about renaming it to EFSBADCSUM?

Thanks,
Qu

> 
> #define EFSBADCRC   EBADMSG
> 
> --D
> 
>> And block layer is going to distinguish filesystem corruption with
>> oridinary EIO error, it's a good idea to export the initial EFSCORRUPTED
>> declaration to <linux/errno.h> so all filesystems and block layer can
>> take advantage of this easier-to-read error number.
>>
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>> ---
>>  fs/ext2/ext2.h                   | 1 -
>>  fs/ext4/ext4.h                   | 1 -
>>  fs/xfs/xfs_linux.h               | 1 -
>>  include/uapi/asm-generic/errno.h | 3 +++
>>  4 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
>> index 10ab238de9a6..03d0ca8fae42 100644
>> --- a/fs/ext2/ext2.h
>> +++ b/fs/ext2/ext2.h
>> @@ -369,7 +369,6 @@ struct ext2_inode {
>>   */
>>  #define	EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
>>  #define	EXT2_ERROR_FS			0x0002	/* Errors detected */
>> -#define	EFSCORRUPTED			EUCLEAN	/* Filesystem is corrupted */
>>  
>>  /*
>>   * Mount flags
>> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
>> index 82ffdacdc7fa..f906b5cbf96d 100644
>> --- a/fs/ext4/ext4.h
>> +++ b/fs/ext4/ext4.h
>> @@ -3248,6 +3248,5 @@ extern const struct iomap_ops ext4_iomap_ops;
>>  #endif	/* __KERNEL__ */
>>  
>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>>  
>>  #endif	/* _EXT4_H */
>> diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
>> index edbd5a210df2..36e5c6549f15 100644
>> --- a/fs/xfs/xfs_linux.h
>> +++ b/fs/xfs/xfs_linux.h
>> @@ -125,7 +125,6 @@ typedef __u32			xfs_nlink_t;
>>  
>>  #define ENOATTR		ENODATA		/* Attribute not found */
>>  #define EWRONGFS	EINVAL		/* Mount with wrong filesystem type */
>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
>>  
>>  #define SYNCHRONIZE()	barrier()
>> diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
>> index cf9c51ac49f9..ebd6e7e76a98 100644
>> --- a/include/uapi/asm-generic/errno.h
>> +++ b/include/uapi/asm-generic/errno.h
>> @@ -98,6 +98,9 @@
>>  #define	EINPROGRESS	115	/* Operation now in progress */
>>  #define	ESTALE		116	/* Stale file handle */
>>  #define	EUCLEAN		117	/* Structure needs cleaning */
>> +
>> +#define EFSCORRUPTED	EUCLEAN	/* Filesystem is corrupted */
>> +
>>  #define	ENOTNAM		118	/* Not a XENIX named type file */
>>  #define	ENAVAIL		119	/* No XENIX semaphores available */
>>  #define	EISNAM		120	/* Is a named type file */
>> -- 
>> 2.21.0
>>
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number
  2019-04-11  0:28   ` Qu Wenruo
@ 2019-04-11  1:06     ` Darrick J. Wong
  2019-04-11  1:43       ` Qu Wenruo
  0 siblings, 1 reply; 10+ messages in thread
From: Darrick J. Wong @ 2019-04-11  1:06 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-block, linux-btrfs, linux-fsdevel

On Thu, Apr 11, 2019 at 08:28:44AM +0800, Qu Wenruo wrote:
> 
> 
> On 2019/4/10 下午11:11,  Darrick J. Wong  wrote:
> > On Wed, Apr 10, 2019 at 04:35:07PM +0800, Qu Wenruo wrote:
> >> Xfs and Ext* uses EFSCORRUPTED to indicate filesystem corruption.
> >> They both map EFSCORRUPTED to EUCLEAN.
> >>
> >> Btrfs/Ubifs/fscrypto all use EUCLEAN directly to indicate filesystem
> >> corruption.
> > 
> > I don't know if you (btrfs folks specifically) care but ext* and xfs
> > also use EFSBADCRC to signal unrecovered checksum validation failures.
> > Can we promote both of them to asm-generic/errno.h at the same time?
> 
> It looks pretty good to me in fact.
> 
> I'm really tired of using -EIO for csum mismatch/any other higher level
> mismatch.
> 
> The only concern is the "CRC" part. Yes, btrfs uses and only supports
> CRC32 so far, but I'm sure btrfs will support cryptographic hash.
> 
> So what about renaming it to EFSBADCSUM?

We've been shipping EFSBADCRC in xfslibs-dev userspace libraries for
years now, so we can't change the symbol name.

--D

> Thanks,
> Qu
> 
> > 
> > #define EFSBADCRC   EBADMSG
> > 
> > --D
> > 
> >> And block layer is going to distinguish filesystem corruption with
> >> oridinary EIO error, it's a good idea to export the initial EFSCORRUPTED
> >> declaration to <linux/errno.h> so all filesystems and block layer can
> >> take advantage of this easier-to-read error number.
> >>
> >> Signed-off-by: Qu Wenruo <wqu@suse.com>
> >> ---
> >>  fs/ext2/ext2.h                   | 1 -
> >>  fs/ext4/ext4.h                   | 1 -
> >>  fs/xfs/xfs_linux.h               | 1 -
> >>  include/uapi/asm-generic/errno.h | 3 +++
> >>  4 files changed, 3 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
> >> index 10ab238de9a6..03d0ca8fae42 100644
> >> --- a/fs/ext2/ext2.h
> >> +++ b/fs/ext2/ext2.h
> >> @@ -369,7 +369,6 @@ struct ext2_inode {
> >>   */
> >>  #define	EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
> >>  #define	EXT2_ERROR_FS			0x0002	/* Errors detected */
> >> -#define	EFSCORRUPTED			EUCLEAN	/* Filesystem is corrupted */
> >>  
> >>  /*
> >>   * Mount flags
> >> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> >> index 82ffdacdc7fa..f906b5cbf96d 100644
> >> --- a/fs/ext4/ext4.h
> >> +++ b/fs/ext4/ext4.h
> >> @@ -3248,6 +3248,5 @@ extern const struct iomap_ops ext4_iomap_ops;
> >>  #endif	/* __KERNEL__ */
> >>  
> >>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
> >> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
> >>  
> >>  #endif	/* _EXT4_H */
> >> diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
> >> index edbd5a210df2..36e5c6549f15 100644
> >> --- a/fs/xfs/xfs_linux.h
> >> +++ b/fs/xfs/xfs_linux.h
> >> @@ -125,7 +125,6 @@ typedef __u32			xfs_nlink_t;
> >>  
> >>  #define ENOATTR		ENODATA		/* Attribute not found */
> >>  #define EWRONGFS	EINVAL		/* Mount with wrong filesystem type */
> >> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
> >>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
> >>  
> >>  #define SYNCHRONIZE()	barrier()
> >> diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
> >> index cf9c51ac49f9..ebd6e7e76a98 100644
> >> --- a/include/uapi/asm-generic/errno.h
> >> +++ b/include/uapi/asm-generic/errno.h
> >> @@ -98,6 +98,9 @@
> >>  #define	EINPROGRESS	115	/* Operation now in progress */
> >>  #define	ESTALE		116	/* Stale file handle */
> >>  #define	EUCLEAN		117	/* Structure needs cleaning */
> >> +
> >> +#define EFSCORRUPTED	EUCLEAN	/* Filesystem is corrupted */
> >> +
> >>  #define	ENOTNAM		118	/* Not a XENIX named type file */
> >>  #define	ENAVAIL		119	/* No XENIX semaphores available */
> >>  #define	EISNAM		120	/* Is a named type file */
> >> -- 
> >> 2.21.0
> >>
> > 
> 




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number
  2019-04-11  1:06     ` Darrick J. Wong
@ 2019-04-11  1:43       ` Qu Wenruo
  2019-04-11  1:47         ` Darrick J. Wong
  0 siblings, 1 reply; 10+ messages in thread
From: Qu Wenruo @ 2019-04-11  1:43 UTC (permalink / raw)
  To: Darrick J. Wong, Qu Wenruo; +Cc: linux-block, linux-btrfs, linux-fsdevel


[-- Attachment #1.1: Type: text/plain, Size: 4040 bytes --]



On 2019/4/11 上午9:06, Darrick J. Wong wrote:
> On Thu, Apr 11, 2019 at 08:28:44AM +0800, Qu Wenruo wrote:
>>
>>
>> On 2019/4/10 下午11:11,  Darrick J. Wong  wrote:
>>> On Wed, Apr 10, 2019 at 04:35:07PM +0800, Qu Wenruo wrote:
>>>> Xfs and Ext* uses EFSCORRUPTED to indicate filesystem corruption.
>>>> They both map EFSCORRUPTED to EUCLEAN.
>>>>
>>>> Btrfs/Ubifs/fscrypto all use EUCLEAN directly to indicate filesystem
>>>> corruption.
>>>
>>> I don't know if you (btrfs folks specifically) care but ext* and xfs
>>> also use EFSBADCRC to signal unrecovered checksum validation failures.
>>> Can we promote both of them to asm-generic/errno.h at the same time?
>>
>> It looks pretty good to me in fact.
>>
>> I'm really tired of using -EIO for csum mismatch/any other higher level
>> mismatch.
>>
>> The only concern is the "CRC" part. Yes, btrfs uses and only supports
>> CRC32 so far, but I'm sure btrfs will support cryptographic hash.
>>
>> So what about renaming it to EFSBADCSUM?
> 
> We've been shipping EFSBADCRC in xfslibs-dev userspace libraries for
> years now, so we can't change the symbol name.

Fair enough.

Any extra error number worthy export?

Thanks,
Qu

> 
> --D
> 
>> Thanks,
>> Qu
>>
>>>
>>> #define EFSBADCRC   EBADMSG
>>>
>>> --D
>>>
>>>> And block layer is going to distinguish filesystem corruption with
>>>> oridinary EIO error, it's a good idea to export the initial EFSCORRUPTED
>>>> declaration to <linux/errno.h> so all filesystems and block layer can
>>>> take advantage of this easier-to-read error number.
>>>>
>>>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>>>> ---
>>>>  fs/ext2/ext2.h                   | 1 -
>>>>  fs/ext4/ext4.h                   | 1 -
>>>>  fs/xfs/xfs_linux.h               | 1 -
>>>>  include/uapi/asm-generic/errno.h | 3 +++
>>>>  4 files changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
>>>> index 10ab238de9a6..03d0ca8fae42 100644
>>>> --- a/fs/ext2/ext2.h
>>>> +++ b/fs/ext2/ext2.h
>>>> @@ -369,7 +369,6 @@ struct ext2_inode {
>>>>   */
>>>>  #define	EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
>>>>  #define	EXT2_ERROR_FS			0x0002	/* Errors detected */
>>>> -#define	EFSCORRUPTED			EUCLEAN	/* Filesystem is corrupted */
>>>>  
>>>>  /*
>>>>   * Mount flags
>>>> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
>>>> index 82ffdacdc7fa..f906b5cbf96d 100644
>>>> --- a/fs/ext4/ext4.h
>>>> +++ b/fs/ext4/ext4.h
>>>> @@ -3248,6 +3248,5 @@ extern const struct iomap_ops ext4_iomap_ops;
>>>>  #endif	/* __KERNEL__ */
>>>>  
>>>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
>>>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>>>>  
>>>>  #endif	/* _EXT4_H */
>>>> diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
>>>> index edbd5a210df2..36e5c6549f15 100644
>>>> --- a/fs/xfs/xfs_linux.h
>>>> +++ b/fs/xfs/xfs_linux.h
>>>> @@ -125,7 +125,6 @@ typedef __u32			xfs_nlink_t;
>>>>  
>>>>  #define ENOATTR		ENODATA		/* Attribute not found */
>>>>  #define EWRONGFS	EINVAL		/* Mount with wrong filesystem type */
>>>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
>>>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
>>>>  
>>>>  #define SYNCHRONIZE()	barrier()
>>>> diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
>>>> index cf9c51ac49f9..ebd6e7e76a98 100644
>>>> --- a/include/uapi/asm-generic/errno.h
>>>> +++ b/include/uapi/asm-generic/errno.h
>>>> @@ -98,6 +98,9 @@
>>>>  #define	EINPROGRESS	115	/* Operation now in progress */
>>>>  #define	ESTALE		116	/* Stale file handle */
>>>>  #define	EUCLEAN		117	/* Structure needs cleaning */
>>>> +
>>>> +#define EFSCORRUPTED	EUCLEAN	/* Filesystem is corrupted */
>>>> +
>>>>  #define	ENOTNAM		118	/* Not a XENIX named type file */
>>>>  #define	ENAVAIL		119	/* No XENIX semaphores available */
>>>>  #define	EISNAM		120	/* Is a named type file */
>>>> -- 
>>>> 2.21.0
>>>>
>>>
>>
> 
> 
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number
  2019-04-11  1:43       ` Qu Wenruo
@ 2019-04-11  1:47         ` Darrick J. Wong
  0 siblings, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2019-04-11  1:47 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: Qu Wenruo, linux-block, linux-btrfs, linux-fsdevel

On Thu, Apr 11, 2019 at 09:43:05AM +0800, Qu Wenruo wrote:
> 
> 
> On 2019/4/11 上午9:06, Darrick J. Wong wrote:
> > On Thu, Apr 11, 2019 at 08:28:44AM +0800, Qu Wenruo wrote:
> >>
> >>
> >> On 2019/4/10 下午11:11,  Darrick J. Wong  wrote:
> >>> On Wed, Apr 10, 2019 at 04:35:07PM +0800, Qu Wenruo wrote:
> >>>> Xfs and Ext* uses EFSCORRUPTED to indicate filesystem corruption.
> >>>> They both map EFSCORRUPTED to EUCLEAN.
> >>>>
> >>>> Btrfs/Ubifs/fscrypto all use EUCLEAN directly to indicate filesystem
> >>>> corruption.
> >>>
> >>> I don't know if you (btrfs folks specifically) care but ext* and xfs
> >>> also use EFSBADCRC to signal unrecovered checksum validation failures.
> >>> Can we promote both of them to asm-generic/errno.h at the same time?
> >>
> >> It looks pretty good to me in fact.
> >>
> >> I'm really tired of using -EIO for csum mismatch/any other higher level
> >> mismatch.
> >>
> >> The only concern is the "CRC" part. Yes, btrfs uses and only supports
> >> CRC32 so far, but I'm sure btrfs will support cryptographic hash.
> >>
> >> So what about renaming it to EFSBADCSUM?
> > 
> > We've been shipping EFSBADCRC in xfslibs-dev userspace libraries for
> > years now, so we can't change the symbol name.
> 
> Fair enough.
> 
> Any extra error number worthy export?

None that I can think of...

--D

> Thanks,
> Qu
> 
> > 
> > --D
> > 
> >> Thanks,
> >> Qu
> >>
> >>>
> >>> #define EFSBADCRC   EBADMSG
> >>>
> >>> --D
> >>>
> >>>> And block layer is going to distinguish filesystem corruption with
> >>>> oridinary EIO error, it's a good idea to export the initial EFSCORRUPTED
> >>>> declaration to <linux/errno.h> so all filesystems and block layer can
> >>>> take advantage of this easier-to-read error number.
> >>>>
> >>>> Signed-off-by: Qu Wenruo <wqu@suse.com>
> >>>> ---
> >>>>  fs/ext2/ext2.h                   | 1 -
> >>>>  fs/ext4/ext4.h                   | 1 -
> >>>>  fs/xfs/xfs_linux.h               | 1 -
> >>>>  include/uapi/asm-generic/errno.h | 3 +++
> >>>>  4 files changed, 3 insertions(+), 3 deletions(-)
> >>>>
> >>>> diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h
> >>>> index 10ab238de9a6..03d0ca8fae42 100644
> >>>> --- a/fs/ext2/ext2.h
> >>>> +++ b/fs/ext2/ext2.h
> >>>> @@ -369,7 +369,6 @@ struct ext2_inode {
> >>>>   */
> >>>>  #define	EXT2_VALID_FS			0x0001	/* Unmounted cleanly */
> >>>>  #define	EXT2_ERROR_FS			0x0002	/* Errors detected */
> >>>> -#define	EFSCORRUPTED			EUCLEAN	/* Filesystem is corrupted */
> >>>>  
> >>>>  /*
> >>>>   * Mount flags
> >>>> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> >>>> index 82ffdacdc7fa..f906b5cbf96d 100644
> >>>> --- a/fs/ext4/ext4.h
> >>>> +++ b/fs/ext4/ext4.h
> >>>> @@ -3248,6 +3248,5 @@ extern const struct iomap_ops ext4_iomap_ops;
> >>>>  #endif	/* __KERNEL__ */
> >>>>  
> >>>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
> >>>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
> >>>>  
> >>>>  #endif	/* _EXT4_H */
> >>>> diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
> >>>> index edbd5a210df2..36e5c6549f15 100644
> >>>> --- a/fs/xfs/xfs_linux.h
> >>>> +++ b/fs/xfs/xfs_linux.h
> >>>> @@ -125,7 +125,6 @@ typedef __u32			xfs_nlink_t;
> >>>>  
> >>>>  #define ENOATTR		ENODATA		/* Attribute not found */
> >>>>  #define EWRONGFS	EINVAL		/* Mount with wrong filesystem type */
> >>>> -#define EFSCORRUPTED	EUCLEAN		/* Filesystem is corrupted */
> >>>>  #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
> >>>>  
> >>>>  #define SYNCHRONIZE()	barrier()
> >>>> diff --git a/include/uapi/asm-generic/errno.h b/include/uapi/asm-generic/errno.h
> >>>> index cf9c51ac49f9..ebd6e7e76a98 100644
> >>>> --- a/include/uapi/asm-generic/errno.h
> >>>> +++ b/include/uapi/asm-generic/errno.h
> >>>> @@ -98,6 +98,9 @@
> >>>>  #define	EINPROGRESS	115	/* Operation now in progress */
> >>>>  #define	ESTALE		116	/* Stale file handle */
> >>>>  #define	EUCLEAN		117	/* Structure needs cleaning */
> >>>> +
> >>>> +#define EFSCORRUPTED	EUCLEAN	/* Filesystem is corrupted */
> >>>> +
> >>>>  #define	ENOTNAM		118	/* Not a XENIX named type file */
> >>>>  #define	ENAVAIL		119	/* No XENIX semaphores available */
> >>>>  #define	EISNAM		120	/* Is a named type file */
> >>>> -- 
> >>>> 2.21.0
> >>>>
> >>>
> >>
> > 
> > 
> > 
> 




^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-04-11  1:47 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-10  8:35 [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Qu Wenruo
2019-04-10  8:35 ` [PATCH 2/2] block: Add new BLK_STS_FSCORRUPTED status Qu Wenruo
2019-04-10  8:55   ` Nikolay Borisov
2019-04-10 13:04   ` kbuild test robot
2019-04-10 15:11 ` [PATCH RFC 1/2] errno.h: Export EFSCORRUPTED error number Darrick J. Wong
2019-04-10 15:28   ` Nikolay Borisov
2019-04-11  0:28   ` Qu Wenruo
2019-04-11  1:06     ` Darrick J. Wong
2019-04-11  1:43       ` Qu Wenruo
2019-04-11  1:47         ` Darrick J. Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).