123 lines
3.5 KiB
Diff
123 lines
3.5 KiB
Diff
From 5cd80c5f33629a8f559b2f75a39ef49e782dbd27 Mon Sep 17 00:00:00 2001
|
|
From: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Date: Sun, 8 Dec 2024 21:42:49 -0500
|
|
Subject: [PATCH 189/233] bcachefs: Use proper errcodes for inode unpack errors
|
|
Content-Type: text/plain; charset="utf-8"
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
|
|
---
|
|
fs/bcachefs/errcode.h | 3 +++
|
|
fs/bcachefs/inode.c | 12 ++++++------
|
|
fs/bcachefs/varint.c | 5 +++--
|
|
3 files changed, 12 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/fs/bcachefs/errcode.h b/fs/bcachefs/errcode.h
|
|
index a6a9561a890d..5d17ceb1e83a 100644
|
|
--- a/fs/bcachefs/errcode.h
|
|
+++ b/fs/bcachefs/errcode.h
|
|
@@ -196,6 +196,8 @@
|
|
x(EINVAL, remove_with_metadata_missing_unimplemented)\
|
|
x(EINVAL, remove_would_lose_data) \
|
|
x(EINVAL, no_resize_with_buckets_nouse) \
|
|
+ x(EINVAL, inode_unpack_error) \
|
|
+ x(EINVAL, varint_decode_error) \
|
|
x(EROFS, erofs_trans_commit) \
|
|
x(EROFS, erofs_no_writes) \
|
|
x(EROFS, erofs_journal_err) \
|
|
@@ -313,6 +315,7 @@ static inline long bch2_err_class(long err)
|
|
|
|
#define BLK_STS_REMOVED ((__force blk_status_t)128)
|
|
|
|
+#include <linux/blk_types.h>
|
|
const char *bch2_blk_status_to_str(blk_status_t);
|
|
|
|
#endif /* _BCACHFES_ERRCODE_H */
|
|
diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c
|
|
index 8818e41883f2..f6245b78eb78 100644
|
|
--- a/fs/bcachefs/inode.c
|
|
+++ b/fs/bcachefs/inode.c
|
|
@@ -48,10 +48,10 @@ static int inode_decode_field(const u8 *in, const u8 *end,
|
|
u8 *p;
|
|
|
|
if (in >= end)
|
|
- return -1;
|
|
+ return -BCH_ERR_inode_unpack_error;
|
|
|
|
if (!*in)
|
|
- return -1;
|
|
+ return -BCH_ERR_inode_unpack_error;
|
|
|
|
/*
|
|
* position of highest set bit indicates number of bytes:
|
|
@@ -61,7 +61,7 @@ static int inode_decode_field(const u8 *in, const u8 *end,
|
|
bytes = byte_table[shift - 1];
|
|
|
|
if (in + bytes > end)
|
|
- return -1;
|
|
+ return -BCH_ERR_inode_unpack_error;
|
|
|
|
p = (u8 *) be + 16 - bytes;
|
|
memcpy(p, in, bytes);
|
|
@@ -177,7 +177,7 @@ static noinline int bch2_inode_unpack_v1(struct bkey_s_c_inode inode,
|
|
return ret; \
|
|
\
|
|
if (field_bits > sizeof(unpacked->_name) * 8) \
|
|
- return -1; \
|
|
+ return -BCH_ERR_inode_unpack_error; \
|
|
\
|
|
unpacked->_name = field[1]; \
|
|
in += ret;
|
|
@@ -218,7 +218,7 @@ static int bch2_inode_unpack_v2(struct bch_inode_unpacked *unpacked,
|
|
\
|
|
unpacked->_name = v[0]; \
|
|
if (v[1] || v[0] != unpacked->_name) \
|
|
- return -1; \
|
|
+ return -BCH_ERR_inode_unpack_error; \
|
|
fieldnr++;
|
|
|
|
BCH_INODE_FIELDS_v2()
|
|
@@ -269,7 +269,7 @@ static int bch2_inode_unpack_v3(struct bkey_s_c k,
|
|
\
|
|
unpacked->_name = v[0]; \
|
|
if (v[1] || v[0] != unpacked->_name) \
|
|
- return -1; \
|
|
+ return -BCH_ERR_inode_unpack_error; \
|
|
fieldnr++;
|
|
|
|
BCH_INODE_FIELDS_v3()
|
|
diff --git a/fs/bcachefs/varint.c b/fs/bcachefs/varint.c
|
|
index 6a78553d9b0c..6620ecae26af 100644
|
|
--- a/fs/bcachefs/varint.c
|
|
+++ b/fs/bcachefs/varint.c
|
|
@@ -9,6 +9,7 @@
|
|
#include <valgrind/memcheck.h>
|
|
#endif
|
|
|
|
+#include "errcode.h"
|
|
#include "varint.h"
|
|
|
|
/**
|
|
@@ -53,7 +54,7 @@ int bch2_varint_decode(const u8 *in, const u8 *end, u64 *out)
|
|
u64 v;
|
|
|
|
if (unlikely(in + bytes > end))
|
|
- return -1;
|
|
+ return -BCH_ERR_varint_decode_error;
|
|
|
|
if (likely(bytes < 9)) {
|
|
__le64 v_le = 0;
|
|
@@ -115,7 +116,7 @@ int bch2_varint_decode_fast(const u8 *in, const u8 *end, u64 *out)
|
|
unsigned bytes = ffz(*in) + 1;
|
|
|
|
if (unlikely(in + bytes > end))
|
|
- return -1;
|
|
+ return -BCH_ERR_varint_decode_error;
|
|
|
|
if (likely(bytes < 9)) {
|
|
v >>= bytes;
|
|
--
|
|
2.45.2
|
|
|