[PATCH 1/9] db: don't claim unchecked CRCs are correct
Dave Chinner
david at fromorbit.com
Tue Apr 15 03:24:53 CDT 2014
From: Dave Chinner <dchinner at redhat.com>
Currently xfs_db will claim the CRC on a structure is correct if the
buffer is not marked with an error. However, buffers may have been
read without a verifier, and hence have not had their CRCs
validated. in this case, we shoul dreport "unchecked" rather than
"correct". For example:
xfs_db> fsb 0x6003f
xfs_db> type dir3
xfs_db> p
dhdr.hdr.magic = 0x58444433
dhdr.hdr.crc = 0x2d0f9c9d (unchecked)
....
Signed-off-by: Dave Chinner <dchinner at redhat.com>
---
db/fprint.c | 15 ++++++++++++++-
db/io.c | 2 ++
db/io.h | 12 +++++++++---
3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/db/fprint.c b/db/fprint.c
index 435d984..52782e2 100644
--- a/db/fprint.c
+++ b/db/fprint.c
@@ -206,7 +206,20 @@ fp_crc(
__int64_t val;
char *ok;
- ok = iocur_crc_valid() ? "correct" : "bad";
+ switch (iocur_crc_valid()) {
+ case -1:
+ ok = "unchecked";
+ break;
+ case 0:
+ ok = "bad";
+ break;
+ case 1:
+ ok = "correct";
+ break;
+ default:
+ ok = "unknown state";
+ break;
+ }
for (i = 0, bitpos = bit;
i < count && !seenint();
diff --git a/db/io.c b/db/io.c
index 5eb61d9..387f171 100644
--- a/db/io.c
+++ b/db/io.c
@@ -531,6 +531,8 @@ set_cur(
return;
iocur_top->buf = bp->b_addr;
iocur_top->bp = bp;
+ if (!ops)
+ bp->b_flags |= LIBXFS_B_UNCHECKED;
iocur_top->bb = d;
iocur_top->blen = c;
diff --git a/db/io.h b/db/io.h
index ad39bee..7875119 100644
--- a/db/io.h
+++ b/db/io.h
@@ -63,10 +63,16 @@ extern void set_cur(const struct typ *t, __int64_t d, int c, int ring_add,
bbmap_t *bbmap);
extern void ring_add(void);
-static inline bool
+/*
+ * returns -1 for unchecked, 0 for bad and 1 for good
+ */
+static inline int
iocur_crc_valid()
{
- return (iocur_top->bp &&
- iocur_top->bp->b_error != EFSBADCRC &&
+ if (!iocur_top->bp)
+ return -1;
+ if (iocur_top->bp->b_flags & LIBXFS_B_UNCHECKED)
+ return -1;
+ return (iocur_top->bp->b_error != EFSBADCRC &&
(!iocur_top->ino_buf || iocur_top->ino_crc_ok));
}
--
1.9.0
More information about the xfs
mailing list