summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/block/block_read.c
diff options
context:
space:
mode:
authorMatt Kangas <matt.kangas@mongodb.com>2014-12-23 08:36:30 -0500
committerMatt Kangas <matt.kangas@mongodb.com>2014-12-23 12:03:28 -0500
commit55ae19200c7e17249420b4b34799e25b7d1ec92d (patch)
tree14b03241366fc2d0d53209b4f33371eb64a97d28 /src/third_party/wiredtiger/src/block/block_read.c
parente50c1c5e1e75f2da16f2b8c216b16afe93d83d8d (diff)
downloadmongo-55ae19200c7e17249420b4b34799e25b7d1ec92d.tar.gz
Import wiredtiger-wiredtiger-2.8-rc2-311-gbc7ed41.tar.gz from wiredtiger branch mongodb-2.8
Diffstat (limited to 'src/third_party/wiredtiger/src/block/block_read.c')
-rw-r--r--src/third_party/wiredtiger/src/block/block_read.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/third_party/wiredtiger/src/block/block_read.c b/src/third_party/wiredtiger/src/block/block_read.c
index c528ee4a6aa..c8a26e77341 100644
--- a/src/third_party/wiredtiger/src/block/block_read.c
+++ b/src/third_party/wiredtiger/src/block/block_read.c
@@ -168,6 +168,9 @@ __wt_block_read_off(WT_SESSION_IMPL *session, WT_BLOCK *block,
"off %" PRIuMAX ", size %" PRIu32 ", cksum %" PRIu32,
(uintmax_t)offset, size, cksum));
+ WT_STAT_FAST_CONN_INCR(session, block_read);
+ WT_STAT_FAST_CONN_INCRV(session, block_byte_read, size);
+
/*
* Grow the buffer as necessary and read the block. Buffers should be
* aligned for reading, but there are lots of buffers (for example, file
@@ -188,25 +191,24 @@ __wt_block_read_off(WT_SESSION_IMPL *session, WT_BLOCK *block,
buf->size = size;
blk = WT_BLOCK_HEADER_REF(buf->mem);
- blk->cksum = 0;
- page_cksum = __wt_cksum(buf->mem,
- F_ISSET(blk, WT_BLOCK_DATA_CKSUM) ? size : WT_BLOCK_COMPRESS_SKIP);
- if (cksum != page_cksum) {
- if (!F_ISSET(session, WT_SESSION_SALVAGE_CORRUPT_OK))
- __wt_errx(session,
- "read checksum error [%"
- PRIu32 "B @ %" PRIuMAX ", %"
- PRIu32 " != %" PRIu32 "]",
- size, (uintmax_t)offset, cksum, page_cksum);
-
- /* Panic if a checksum fails during an ordinary read. */
- return (block->verify ||
- F_ISSET(session, WT_SESSION_SALVAGE_CORRUPT_OK) ?
- WT_ERROR :
- __wt_illegal_value(session, block->name));
+ page_cksum = blk->cksum;
+ if (page_cksum == cksum) {
+ blk->cksum = 0;
+ page_cksum = __wt_cksum(buf->mem,
+ F_ISSET(blk, WT_BLOCK_DATA_CKSUM) ?
+ size : WT_BLOCK_COMPRESS_SKIP);
+ if (page_cksum == cksum)
+ return (0);
}
- WT_STAT_FAST_CONN_INCR(session, block_read);
- WT_STAT_FAST_CONN_INCRV(session, block_byte_read, size);
- return (0);
+ if (!F_ISSET(session, WT_SESSION_SALVAGE_CORRUPT_OK))
+ __wt_errx(session,
+ "read checksum error [%" PRIu32 "B @ %" PRIuMAX ", %"
+ PRIu32 " != %" PRIu32 "]",
+ size, (uintmax_t)offset, cksum, page_cksum);
+
+ /* Panic if a checksum fails during an ordinary read. */
+ return (block->verify ||
+ F_ISSET(session, WT_SESSION_SALVAGE_CORRUPT_OK) ?
+ WT_ERROR : __wt_illegal_value(session, block->name));
}