On 6.04.19 г. 12:18 ч., Qu Wenruo wrote: > > > On 2019/4/6 下午4:41, Nikolay Borisov wrote: >> >> >> On 6.04.19 г. 6:14 ч., Qu Wenruo wrote: >>> There are a lot of end_io hooks which can do some self test at >>> read/write time. >>> >>> Normally such selftest should return -EUCLEAN to indicate something >>> unexpected. >>> >>> However there is no BLK_STS_* bit for that, this makes every selftest >>> error to be interpreted to EIO, which lowers the severity. >>> >>> This patch will add a new BLK_STS_SELFTEST, to allow the error from >>> endio to be passed to filesystem. >>> >>> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx> >>> --- >>> 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 4673ebe42255..66967642a5ef 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_SELFTEST] = { -EUCLEAN, "filesystem selftest" }, >> >> SELFTEST is ambiguous, I personally relate it to the selftests that some >> subsystems have. This should be changed to STS_CLEANUP or STS_CORRUPT or >> some such. > > Considering my poor naming schemes, what about sticking to EUCLEAN > across all of these? > BLK_STS_UCLEAN -ECULEAN "Structure needs clean up" Sounds good! > > Thanks, > Qu > >> >>> >>> /* 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..5bba24c3753c 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) >>> >>> +/* Filesystem selftest error */ >>> +#define BLK_STS_SELFTEST ((__force blk_status_t)14) >>> + >>> /** >>> * blk_path_error - returns true if error may be path related >>> * @error: status the request was completed with >>> >