On 6.04.19 г. 8:05 ч., Qu Wenruo wrote: > > > On 2019/4/6 下午12:50, Darrick J. Wong wrote: >> On Sat, Apr 06, 2019 at 11:14:26AM +0800, Qu Wenruo wrote: >>> Since we're going to support write time tree checker, it's possible that >>> transaction get aborted due to tree-checker, also due to new >>> BLK_STS_SELFTEST bit, we can distinguish real EIO error and EUCLEAN >>> error. >>> >>> Now add error string for EUCLEAN too. >>> >>> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx> >>> --- >>> fs/btrfs/super.c | 3 +++ >>> 1 file changed, 3 insertions(+) >>> >>> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c >>> index 120e4340792a..a4cbbd7861d3 100644 >>> --- a/fs/btrfs/super.c >>> +++ b/fs/btrfs/super.c >>> @@ -86,6 +86,9 @@ const char *btrfs_decode_error(int errno) >>> case -ENOENT: >>> errstr = "No such entry"; >>> break; >>> + case -EUCLEAN: >>> + errstr = "Selftest failure"; >>> + break; >> >> EUCLEAN usually spits out "Structure needs cleaning" in userspace (and >> ext4 & xfs have been using it for years to complain about corrupt data), >> so why diverge here? > > Because the original "structure needs cleaning" doesn't really show the > meaning we're using. On the contrary, structure needs cleaning means the filesystem has detected a consistency error. How that detection has happened shouldn't burden the user, the important fact is it has. Selftest is somewhat cryptic, I'd suggest at least "verification error" or just go with canonical "Structure needs cleaning". > > We really means, something wrong happened, thus I prefer something like > selftest failure. > > And, the idea of adding -EUCLEAN, is to replace the original "unknown" > output, if you're sticking with the original error string, we still need > that branch. > >> >> Wait... does "tree-checker" mean online metadata checking, and 'selftest >> failure' is what gets spit out when it finds some metadata it doesn't >> like? > > Yep. > > Thanks, > Qu > >> >> --D >> >>> } >>> >>> return errstr; >>> -- >>> 2.21.0 >>> >