mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 16:56:26 +00:00
bcachefs: bkey errors are only AUTOFIX during read
Newly generated keys, in the transaction commit path or write path,
should not be AUTOFIX; those indicate bugs that we need to fail fast
for.
Fixes: 5612daafb7
("bcachefs: Fix fsck warnings from bkey validation")
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
fda7b1ffde
commit
658c82f41e
@ -430,10 +430,17 @@ int __bch2_fsck_err(struct bch_fs *c,
|
||||
|
||||
int __bch2_bkey_fsck_err(struct bch_fs *c,
|
||||
struct bkey_s_c k,
|
||||
enum bch_fsck_flags flags,
|
||||
enum bch_validate_flags validate_flags,
|
||||
enum bch_sb_error_id err,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
if (validate_flags & BCH_VALIDATE_silent)
|
||||
return -BCH_ERR_fsck_delete_bkey;
|
||||
|
||||
unsigned fsck_flags = 0;
|
||||
if (!(validate_flags & (BCH_VALIDATE_write|BCH_VALIDATE_commit)))
|
||||
fsck_flags |= FSCK_AUTOFIX|FSCK_CAN_FIX;
|
||||
|
||||
struct printbuf buf = PRINTBUF;
|
||||
va_list args;
|
||||
|
||||
@ -445,7 +452,7 @@ int __bch2_bkey_fsck_err(struct bch_fs *c,
|
||||
va_end(args);
|
||||
prt_str(&buf, ": delete?");
|
||||
|
||||
int ret = __bch2_fsck_err(c, NULL, flags, err, "%s", buf.buf);
|
||||
int ret = __bch2_fsck_err(c, NULL, fsck_flags, err, "%s", buf.buf);
|
||||
printbuf_exit(&buf);
|
||||
return ret;
|
||||
}
|
||||
|
@ -167,10 +167,11 @@ void bch2_flush_fsck_errs(struct bch_fs *);
|
||||
#define fsck_err_on(cond, c, _err_type, ...) \
|
||||
__fsck_err_on(cond, c, FSCK_CAN_FIX|FSCK_CAN_IGNORE, _err_type, __VA_ARGS__)
|
||||
|
||||
enum bch_validate_flags;
|
||||
__printf(5, 6)
|
||||
int __bch2_bkey_fsck_err(struct bch_fs *,
|
||||
struct bkey_s_c,
|
||||
enum bch_fsck_flags,
|
||||
enum bch_validate_flags,
|
||||
enum bch_sb_error_id,
|
||||
const char *, ...);
|
||||
|
||||
@ -180,11 +181,7 @@ int __bch2_bkey_fsck_err(struct bch_fs *,
|
||||
*/
|
||||
#define bkey_fsck_err(c, _err_type, _err_msg, ...) \
|
||||
do { \
|
||||
if ((flags & BCH_VALIDATE_silent)) { \
|
||||
ret = -BCH_ERR_fsck_delete_bkey; \
|
||||
goto fsck_err; \
|
||||
} \
|
||||
int _ret = __bch2_bkey_fsck_err(c, k, FSCK_CAN_FIX|FSCK_AUTOFIX,\
|
||||
int _ret = __bch2_bkey_fsck_err(c, k, flags, \
|
||||
BCH_FSCK_ERR_##_err_type, \
|
||||
_err_msg, ##__VA_ARGS__); \
|
||||
if (_ret != -BCH_ERR_fsck_fix && \
|
||||
|
Loading…
Reference in New Issue
Block a user