[v3,1/2] block: Add new BLK_STS_UCLEAN status
diff mbox series

Message ID 20190410074149.26646-1-wqu@suse.com
State New
Headers show
Series
  • [v3,1/2] block: Add new BLK_STS_UCLEAN status
Related show

Commit Message

Qu Wenruo April 10, 2019, 7:41 a.m. UTC
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 to indicate something
unexpected, and some of such verification either uses bio->bi_status or
users bio->bi_endio to return their value.

In such case, the missing of such corresponding BLK_STS_UCLEAN can lower
the severity just like:
  In endio function:
	return errno_to_blk_status(-EUCLEAN);
 	^^^ -EUCLEAN 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_UCLEAN, to allow -EUCLEAN to be
converted to BLK_STS_UCLEAN, and then converted back to -EUCLEAN without
losing anything.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
Changlog:
v2:
- Use BLK_STS_UCLEAN to replace the previous stupid naming scheme.
v3:
- Use "filesystem is corrupted" as error string.
- Add explanation about why filesystem code needs such status.
---
 block/blk-core.c          | 1 +
 include/linux/blk_types.h | 3 +++
 2 files changed, 4 insertions(+)

Comments

Christoph Hellwig April 10, 2019, 7:44 a.m. UTC | #1
Please keep linux-block and fsdevel in Cc.

Also as mentioned before UCLEAN is a horrible name, please use
the FSCORRUPTED one actually in use in the file systems that
actually describes what is going on.  Bonus points for also
moving the EFSCORRUPTED definition to common code.
Qu Wenruo April 10, 2019, 7:47 a.m. UTC | #2
On 2019/4/10 下午3:44, Christoph Hellwig wrote:
> Please keep linux-block and fsdevel in Cc.
> 
> Also as mentioned before UCLEAN is a horrible name, please use
> the FSCORRUPTED one actually in use in the file systems that
> actually describes what is going on.  Bonus points for also
> moving the EFSCORRUPTED definition to common code.

Then the problem is, if we're keeping EFSCORRUPTED, should it still be
the same value of EUCLEAN?

Or it's pretty common to have same error value while have two different
name for it?

Thanks,
Qu

Patch
diff mbox series

diff --git a/block/blk-core.c b/block/blk-core.c
index a55389ba8779..427528950dcc 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_UCLEAN]	= { -EUCLEAN,	"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..df0c470147c1 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_UCLEAN		((__force blk_status_t)14)
+
 /**
  * blk_path_error - returns true if error may be path related
  * @error: status the request was completed with