diff options
author | Keith Bostic <keith.bostic@mongodb.com> | 2015-07-17 11:14:33 -0400 |
---|---|---|
committer | Michael Cahill <michael.cahill@mongodb.com> | 2015-07-24 11:37:34 +1000 |
commit | 0969f76b03c0cfcad011c2b7cc2fa4548d65fc88 (patch) | |
tree | 8e97d0416fefd64db4871235596865aff57d213f | |
parent | 3963315911b94296889f4cacc226e84ae2cda817 (diff) | |
download | mongo-0969f76b03c0cfcad011c2b7cc2fa4548d65fc88.tar.gz |
Merge pull request #2070 from wiredtiger/verify-no-panic
WT-2002 If a file is corrupted, verify should not panic.
(cherry picked from commit 8af8b8a7ce21ca0ee6743c6af9313fd76817bc9c)
-rw-r--r-- | src/block/block_ckpt.c | 11 | ||||
-rw-r--r-- | src/block/block_ext.c | 148 | ||||
-rw-r--r-- | src/block/block_slvg.c | 2 | ||||
-rw-r--r-- | src/block/block_vrfy.c | 14 | ||||
-rw-r--r-- | src/include/extern.h | 6 |
5 files changed, 107 insertions, 74 deletions
diff --git a/src/block/block_ckpt.c b/src/block/block_ckpt.c index 18c3978c90f..40bba8184a1 100644 --- a/src/block/block_ckpt.c +++ b/src/block/block_ckpt.c @@ -315,7 +315,7 @@ __ckpt_extlist_fblocks( * file that contains a previous checkpoint's extents. */ return (__wt_block_insert_ext( - session, &block->live.ckpt_avail, el->offset, el->size)); + session, block, &block->live.ckpt_avail, el->offset, el->size)); } #ifdef HAVE_DIAGNOSTIC @@ -537,7 +537,7 @@ __ckpt_process(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_CKPT *ckptbase) * must be paired in the checkpoint. */ if (a->root_offset != WT_BLOCK_INVALID_OFFSET) - WT_ERR(__wt_block_insert_ext(session, + WT_ERR(__wt_block_insert_ext(session, block, &a->discard, a->root_offset, a->root_size)); /* @@ -554,10 +554,10 @@ __ckpt_process(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_CKPT *ckptbase) */ if (a->alloc.entries != 0) WT_ERR(__wt_block_extlist_merge( - session, &a->alloc, &b->alloc)); + session, block, &a->alloc, &b->alloc)); if (a->discard.entries != 0) WT_ERR(__wt_block_extlist_merge( - session, &a->discard, &b->discard)); + session, block, &a->discard, &b->discard)); /* * If the "to" checkpoint is also being deleted, we're done with @@ -775,7 +775,8 @@ __wt_block_checkpoint_resolve(WT_SESSION_IMPL *session, WT_BLOCK *block) block->ckpt_inprogress = 0; __wt_spin_lock(session, &block->live_lock); - ret = __wt_block_extlist_merge(session, &ci->ckpt_avail, &ci->avail); + ret = __wt_block_extlist_merge( + session, block, &ci->ckpt_avail, &ci->avail); __wt_spin_unlock(session, &block->live_lock); /* Discard the lists remaining after the checkpoint call. */ diff --git a/src/block/block_ext.c b/src/block/block_ext.c index e89c70060f3..0dcc1a4bd81 100644 --- a/src/block/block_ext.c +++ b/src/block/block_ext.c @@ -8,12 +8,20 @@ #include "wt_internal.h" -static int __block_append(WT_SESSION_IMPL *, WT_EXTLIST *, wt_off_t, wt_off_t); +#define WT_BLOCK_ERROR(session, block, ...) do { \ + if (block->verify) \ + WT_RET_MSG(session, __VA_ARGS__); \ + WT_PANIC_RET(session, __VA_ARGS__); \ +} while (0) + +static int __block_append(WT_SESSION_IMPL *, + WT_BLOCK *, WT_EXTLIST *, wt_off_t, wt_off_t); static int __block_ext_overlap(WT_SESSION_IMPL *, WT_BLOCK *, WT_EXTLIST *, WT_EXT **, WT_EXTLIST *, WT_EXT **); static int __block_extlist_dump( WT_SESSION_IMPL *, const char *, WT_EXTLIST *, int); -static int __block_merge(WT_SESSION_IMPL *, WT_EXTLIST *, wt_off_t, wt_off_t); +static int __block_merge(WT_SESSION_IMPL *, + WT_BLOCK *, WT_EXTLIST *, wt_off_t, wt_off_t); /* * __block_off_srch_last -- @@ -308,8 +316,8 @@ __wt_block_misplaced(WT_SESSION_IMPL *session, * Remove a record from an extent list. */ static int -__block_off_remove( - WT_SESSION_IMPL *session, WT_EXTLIST *el, wt_off_t off, WT_EXT **extp) +__block_off_remove(WT_SESSION_IMPL *session, WT_BLOCK *block, + WT_EXTLIST *el, wt_off_t off, WT_EXT **extp) { WT_EXT *ext, **astack[WT_SKIP_MAXDEPTH]; WT_SIZE *szp, **sstack[WT_SKIP_MAXDEPTH]; @@ -370,7 +378,7 @@ __block_off_remove( return (0); corrupt: - WT_PANIC_RET(session, EINVAL, + WT_BLOCK_ERROR(session, block, EINVAL, "attempt to remove non-existent offset from an extent list"); } @@ -380,8 +388,8 @@ corrupt: * overlapping entry. */ int -__wt_block_off_remove_overlap( - WT_SESSION_IMPL *session, WT_EXTLIST *el, wt_off_t off, wt_off_t size) +__wt_block_off_remove_overlap(WT_SESSION_IMPL *session, WT_BLOCK *block, + WT_EXTLIST *el, wt_off_t off, wt_off_t size) { WT_EXT *before, *after, *ext; wt_off_t a_off, a_size, b_off, b_size; @@ -393,7 +401,8 @@ __wt_block_off_remove_overlap( /* If "before" or "after" overlaps, retrieve the overlapping entry. */ if (before != NULL && before->off + before->size > off) { - WT_RET(__block_off_remove(session, el, before->off, &ext)); + WT_RET(__block_off_remove( + session, block, el, before->off, &ext)); /* Calculate overlapping extents. */ a_off = ext->off; @@ -401,7 +410,8 @@ __wt_block_off_remove_overlap( b_off = off + size; b_size = ext->size - (a_size + size); } else if (after != NULL && off + size > after->off) { - WT_RET(__block_off_remove(session, el, after->off, &ext)); + WT_RET(__block_off_remove( + session, block, el, after->off, &ext)); /* * Calculate overlapping extents. There's no initial overlap @@ -525,7 +535,7 @@ __wt_block_alloc( __block_size_srch(block->live.avail.sz, size, sstack); if ((szp = *sstack[0]) == NULL) { append: WT_RET(__block_extend(session, block, offp, size)); - WT_RET(__block_append(session, + WT_RET(__block_append(session, block, &block->live.alloc, *offp, (wt_off_t)size)); return (0); } @@ -535,7 +545,8 @@ append: WT_RET(__block_extend(session, block, offp, size)); } /* Remove the record, and set the returned offset. */ - WT_RET(__block_off_remove(session, &block->live.avail, ext->off, &ext)); + WT_RET(__block_off_remove( + session, block, &block->live.avail, ext->off, &ext)); *offp = ext->off; /* If doing a partial allocation, adjust the record and put it back. */ @@ -561,7 +572,7 @@ append: WT_RET(__block_extend(session, block, offp, size)); /* Add the newly allocated extent to the list of allocations. */ WT_RET(__block_merge( - session, &block->live.alloc, *offp, (wt_off_t)size)); + session, block, &block->live.alloc, *offp, (wt_off_t)size)); return (0); } @@ -618,12 +629,12 @@ __wt_block_off_free( * list. */ if ((ret = __wt_block_off_remove_overlap( - session, &block->live.alloc, offset, size)) == 0) - ret = __block_merge( - session, &block->live.avail, offset, (wt_off_t)size); + session, block, &block->live.alloc, offset, size)) == 0) + ret = __block_merge(session, block, + &block->live.avail, offset, (wt_off_t)size); else if (ret == WT_NOTFOUND) - ret = __block_merge( - session, &block->live.discard, offset, (wt_off_t)size); + ret = __block_merge(session, block, + &block->live.discard, offset, (wt_off_t)size); return (ret); } @@ -770,9 +781,12 @@ __block_ext_overlap(WT_SESSION_IMPL *session, */ *ap = (*ap)->next[0]; *bp = (*bp)->next[0]; - WT_RET(__block_merge(session, avail, b->off, b->size)); - WT_RET(__block_off_remove(session, ael, a->off, NULL)); - WT_RET(__block_off_remove(session, bel, b->off, NULL)); + WT_RET(__block_merge( + session, block, avail, b->off, b->size)); + WT_RET(__block_off_remove( + session, block, ael, a->off, NULL)); + WT_RET(__block_off_remove( + session, block, bel, b->off, NULL)); } else if (a->size > b->size) { /* Case #4 */ /* @@ -780,7 +794,8 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Increment/Decrement A's offset/size by the size of B * Insert A on its list */ - WT_RET(__block_off_remove(session, ael, a->off, &a)); + WT_RET(__block_off_remove( + session, block, ael, a->off, &a)); a->off += b->size; a->size -= b->size; WT_RET(__block_ext_insert(session, ael, a)); @@ -791,15 +806,18 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Delete B */ *bp = (*bp)->next[0]; - WT_RET(__block_merge(session, avail, b->off, b->size)); - WT_RET(__block_off_remove(session, bel, b->off, NULL)); + WT_RET(__block_merge( + session, block, avail, b->off, b->size)); + WT_RET(__block_off_remove( + session, block, bel, b->off, NULL)); } else { /* Case #9 */ /* * Remove B from its list * Increment/Decrement B's offset/size by the size of A * Insert B on its list */ - WT_RET(__block_off_remove(session, bel, b->off, &b)); + WT_RET(__block_off_remove( + session, block, bel, b->off, &b)); b->off += a->size; b->size -= a->size; WT_RET(__block_ext_insert(session, bel, b)); @@ -810,8 +828,10 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Delete A */ *ap = (*ap)->next[0]; - WT_RET(__block_merge(session, avail, a->off, a->size)); - WT_RET(__block_off_remove(session, ael, a->off, NULL)); + WT_RET(__block_merge( + session, block, avail, a->off, a->size)); + WT_RET(__block_off_remove( + session, block, ael, a->off, NULL)); } /* Case #6 */ } else if (a->off + a->size == b->off + b->size) { /* @@ -819,7 +839,7 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Decrement A's size by the size of B * Insert A on its list */ - WT_RET(__block_off_remove(session, ael, a->off, &a)); + WT_RET(__block_off_remove(session, block, ael, a->off, &a)); a->size -= b->size; WT_RET(__block_ext_insert(session, ael, a)); @@ -829,8 +849,8 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Delete B */ *bp = (*bp)->next[0]; - WT_RET(__block_merge(session, avail, b->off, b->size)); - WT_RET(__block_off_remove(session, bel, b->off, NULL)); + WT_RET(__block_merge(session, block, avail, b->off, b->size)); + WT_RET(__block_off_remove(session, block, bel, b->off, NULL)); } else if /* Case #3, #7 */ (a->off + a->size < b->off + b->size) { /* @@ -838,14 +858,14 @@ __block_ext_overlap(WT_SESSION_IMPL *session, */ off = b->off; size = (a->off + a->size) - b->off; - WT_RET(__block_merge(session, avail, off, size)); + WT_RET(__block_merge(session, block, avail, off, size)); /* * Remove A from its list * Decrement A's size by the overlap * Insert A on its list */ - WT_RET(__block_off_remove(session, ael, a->off, &a)); + WT_RET(__block_off_remove(session, block, ael, a->off, &a)); a->size -= size; WT_RET(__block_ext_insert(session, ael, a)); @@ -854,7 +874,7 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Increment/Decrement B's offset/size by the overlap * Insert B on its list */ - WT_RET(__block_off_remove(session, bel, b->off, &b)); + WT_RET(__block_off_remove(session, block, bel, b->off, &b)); b->off += size; b->size -= size; WT_RET(__block_ext_insert(session, bel, b)); @@ -868,12 +888,12 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Decrement A's size by trailing part of A plus B's size * Insert A on its list */ - WT_RET(__block_off_remove(session, ael, a->off, &a)); + WT_RET(__block_off_remove(session, block, ael, a->off, &a)); a->size = b->off - a->off; WT_RET(__block_ext_insert(session, ael, a)); /* Add trailing part of A to A's list as a new element. */ - WT_RET(__block_merge(session, ael, off, size)); + WT_RET(__block_merge(session, block, ael, off, size)); /* * Move caller's B to the next element @@ -881,8 +901,8 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Delete B */ *bp = (*bp)->next[0]; - WT_RET(__block_merge(session, avail, b->off, b->size)); - WT_RET(__block_off_remove(session, bel, b->off, NULL)); + WT_RET(__block_merge(session, block, avail, b->off, b->size)); + WT_RET(__block_off_remove(session, block, bel, b->off, NULL)); } return (0); @@ -893,7 +913,8 @@ __block_ext_overlap(WT_SESSION_IMPL *session, * Merge one extent list into another. */ int -__wt_block_extlist_merge(WT_SESSION_IMPL *session, WT_EXTLIST *a, WT_EXTLIST *b) +__wt_block_extlist_merge(WT_SESSION_IMPL *session, WT_BLOCK *block, + WT_EXTLIST *a, WT_EXTLIST *b) { WT_EXT *ext; WT_EXTLIST tmp; @@ -923,7 +944,7 @@ __wt_block_extlist_merge(WT_SESSION_IMPL *session, WT_EXTLIST *a, WT_EXTLIST *b) } WT_EXT_FOREACH(ext, a->off) - WT_RET(__block_merge(session, b, ext->off, ext->size)); + WT_RET(__block_merge(session, block, b, ext->off, ext->size)); return (0); } @@ -933,12 +954,13 @@ __wt_block_extlist_merge(WT_SESSION_IMPL *session, WT_EXTLIST *a, WT_EXTLIST *b) * Append a new entry to the allocation list. */ static int -__block_append( - WT_SESSION_IMPL *session, WT_EXTLIST *el, wt_off_t off, wt_off_t size) +__block_append(WT_SESSION_IMPL *session, WT_BLOCK *block, + WT_EXTLIST *el, wt_off_t off, wt_off_t size) { WT_EXT *ext, **astack[WT_SKIP_MAXDEPTH]; u_int i; + WT_UNUSED(block); WT_ASSERT(session, el->track_size == 0); /* @@ -979,8 +1001,8 @@ __block_append( * Insert an extent into an extent list, merging if possible. */ int -__wt_block_insert_ext( - WT_SESSION_IMPL *session, WT_EXTLIST *el, wt_off_t off, wt_off_t size) +__wt_block_insert_ext(WT_SESSION_IMPL *session, WT_BLOCK *block, + WT_EXTLIST *el, wt_off_t off, wt_off_t size) { /* * There are currently two copies of this function (this code is a one- @@ -993,7 +1015,7 @@ __wt_block_insert_ext( * Callers of this function are expected to have already acquired any * locks required to manipulate the extent list. */ - return (__block_merge(session, el, off, size)); + return (__block_merge(session, block, el, off, size)); } /* @@ -1002,8 +1024,8 @@ __wt_block_insert_ext( * version). */ static int -__block_merge( - WT_SESSION_IMPL *session, WT_EXTLIST *el, wt_off_t off, wt_off_t size) +__block_merge(WT_SESSION_IMPL *session, WT_BLOCK *block, + WT_EXTLIST *el, wt_off_t off, wt_off_t size) { WT_EXT *ext, *after, *before; @@ -1014,7 +1036,7 @@ __block_merge( __block_off_srch_pair(el, off, &before, &after); if (before != NULL) { if (before->off + before->size > off) - WT_PANIC_RET(session, EINVAL, + WT_BLOCK_ERROR(session, block, EINVAL, "%s: existing range %" PRIdMAX "-%" PRIdMAX " overlaps with merge range %" PRIdMAX "-%" PRIdMAX, el->name, @@ -1025,8 +1047,8 @@ __block_merge( before = NULL; } if (after != NULL) { - if (off + size > after->off) - WT_PANIC_RET(session, EINVAL, + if (off + size > after->off) { + WT_BLOCK_ERROR(session, block, EINVAL, "%s: merge range %" PRIdMAX "-%" PRIdMAX " overlaps with existing range %" PRIdMAX "-%" PRIdMAX, @@ -1034,6 +1056,7 @@ __block_merge( (intmax_t)off, (intmax_t)(off + size), (intmax_t)after->off, (intmax_t)(after->off + after->size)); + } if (off + size != after->off) after = NULL; } @@ -1053,7 +1076,8 @@ __block_merge( * the record we're going to use, adjust it and re-insert it. */ if (before == NULL) { - WT_RET(__block_off_remove(session, el, after->off, &ext)); + WT_RET(__block_off_remove( + session, block, el, after->off, &ext)); WT_RET(__wt_verbose(session, WT_VERB_BLOCK, "%s: range grows from %" PRIdMAX "-%" PRIdMAX ", to %" @@ -1067,10 +1091,11 @@ __block_merge( } else { if (after != NULL) { size += after->size; - WT_RET( - __block_off_remove(session, el, after->off, NULL)); + WT_RET(__block_off_remove( + session, block, el, after->off, NULL)); } - WT_RET(__block_off_remove(session, el, before->off, &ext)); + WT_RET(__block_off_remove( + session, block, el, before->off, &ext)); WT_RET(__wt_verbose(session, WT_VERB_BLOCK, "%s: range grows from %" PRIdMAX "-%" PRIdMAX ", to %" @@ -1115,8 +1140,8 @@ __wt_block_extlist_read_avail(WT_SESSION_IMPL *session, * Extent blocks are allocated from the available list: if reading the * avail list, the extent blocks might be included, remove them. */ - WT_ERR_NOTFOUND_OK( - __wt_block_off_remove_overlap(session, el, el->offset, el->size)); + WT_ERR_NOTFOUND_OK(__wt_block_off_remove_overlap( + session, block, el, el->offset, el->size)); err: #ifdef HAVE_DIAGNOSTIC @@ -1137,7 +1162,8 @@ __wt_block_extlist_read(WT_SESSION_IMPL *session, WT_DECL_ITEM(tmp); WT_DECL_RET; wt_off_t off, size; - int (*func)(WT_SESSION_IMPL *, WT_EXTLIST *, wt_off_t, wt_off_t); + int (*func)( + WT_SESSION_IMPL *, WT_BLOCK *, WT_EXTLIST *, wt_off_t, wt_off_t); const uint8_t *p; /* If there isn't a list, we're done. */ @@ -1187,14 +1213,16 @@ __wt_block_extlist_read(WT_SESSION_IMPL *session, if (off < block->allocsize || off % block->allocsize != 0 || size % block->allocsize != 0 || - off + size > ckpt_size) -corrupted: WT_PANIC_RET(session, WT_ERROR, + off + size > ckpt_size) { +corrupted: __wt_scr_free(session, &tmp); + WT_BLOCK_ERROR(session, block, WT_ERROR, "file contains a corrupted %s extent list, range %" PRIdMAX "-%" PRIdMAX " past end-of-file", el->name, (intmax_t)off, (intmax_t)(off + size)); + } - WT_ERR(func(session, el, off, size)); + WT_ERR(func(session, block, el, off, size)); } if (WT_VERBOSE_ISSET(session, WT_VERB_BLOCK)) @@ -1290,7 +1318,7 @@ __wt_block_extlist_write(WT_SESSION_IMPL *session, * blocks never appear on any allocation list. */ WT_TRET(__wt_block_off_remove_overlap( - session, &block->live.alloc, el->offset, el->size)); + session, block, &block->live.alloc, el->offset, el->size)); WT_ERR(__wt_verbose(session, WT_VERB_BLOCK, "%s written %" PRIdMAX "/%" PRIu32, @@ -1331,7 +1359,7 @@ __wt_block_extlist_truncate( */ orig = fh->size; size = ext->off; - WT_RET(__block_off_remove(session, el, size, NULL)); + WT_RET(__block_off_remove(session, block, el, size, NULL)); fh->size = size; /* diff --git a/src/block/block_slvg.c b/src/block/block_slvg.c index 517fb92491e..c78a6c39942 100644 --- a/src/block/block_slvg.c +++ b/src/block/block_slvg.c @@ -53,7 +53,7 @@ __wt_block_salvage_start(WT_SESSION_IMPL *session, WT_BLOCK *block) * any blocks we don't want as we process the file. */ WT_RET(__wt_block_insert_ext( - session, &block->live.alloc, allocsize, len - allocsize)); + session, block, &block->live.alloc, allocsize, len - allocsize)); return (0); } diff --git a/src/block/block_vrfy.c b/src/block/block_vrfy.c index 29a9e4950b4..c9df768a624 100644 --- a/src/block/block_vrfy.c +++ b/src/block/block_vrfy.c @@ -87,6 +87,12 @@ __wt_block_verify_start(WT_SESSION_IMPL *session, WT_RET(__bit_alloc(session, block->frags, &block->fragfile)); /* + * Set this before reading any extent lists: don't panic if we see + * corruption. + */ + block->verify = 1; + + /* * We maintain an allocation list that is rolled forward through the * set of checkpoints. */ @@ -102,8 +108,6 @@ __wt_block_verify_start(WT_SESSION_IMPL *session, /* Configuration: strict behavior on any error. */ WT_RET(__wt_config_gets(session, cfg, "strict", &cval)); block->verify_strict = cval.val ? 1 : 0; - - block->verify = 1; return (0); } @@ -228,7 +232,7 @@ __wt_verify_ckpt_load( WT_RET(__wt_block_extlist_read( session, block, el, ci->file_size)); WT_RET(__wt_block_extlist_merge( - session, el, &block->verify_alloc)); + session, block, el, &block->verify_alloc)); __wt_block_extlist_free(session, el); } el = &ci->discard; @@ -236,7 +240,7 @@ __wt_verify_ckpt_load( WT_RET(__wt_block_extlist_read( session, block, el, ci->file_size)); WT_EXT_FOREACH(ext, el->off) - WT_RET(__wt_block_off_remove_overlap(session, + WT_RET(__wt_block_off_remove_overlap(session, block, &block->verify_alloc, ext->off, ext->size)); __wt_block_extlist_free(session, el); } @@ -265,7 +269,7 @@ __wt_verify_ckpt_load( * checkpoints. */ if (ci->root_offset != WT_BLOCK_INVALID_OFFSET) - WT_RET(__wt_block_off_remove_overlap(session, + WT_RET(__wt_block_off_remove_overlap(session, block, &block->verify_alloc, ci->root_offset, ci->root_size)); /* diff --git a/src/include/extern.h b/src/include/extern.h index 63b6bb2cbc5..d8820d0eda7 100644 --- a/src/include/extern.h +++ b/src/include/extern.h @@ -26,14 +26,14 @@ extern int __wt_block_compact_end(WT_SESSION_IMPL *session, WT_BLOCK *block); extern int __wt_block_compact_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, int *skipp); extern int __wt_block_compact_page_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, const uint8_t *addr, size_t addr_size, int *skipp); extern int __wt_block_misplaced(WT_SESSION_IMPL *session, WT_BLOCK *block, const char *tag, wt_off_t offset, uint32_t size, int live); -extern int __wt_block_off_remove_overlap( WT_SESSION_IMPL *session, WT_EXTLIST *el, wt_off_t off, wt_off_t size); +extern int __wt_block_off_remove_overlap(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_EXTLIST *el, wt_off_t off, wt_off_t size); extern int __wt_block_alloc( WT_SESSION_IMPL *session, WT_BLOCK *block, wt_off_t *offp, wt_off_t size); extern int __wt_block_free(WT_SESSION_IMPL *session, WT_BLOCK *block, const uint8_t *addr, size_t addr_size); extern int __wt_block_off_free( WT_SESSION_IMPL *session, WT_BLOCK *block, wt_off_t offset, wt_off_t size); extern int __wt_block_extlist_check( WT_SESSION_IMPL *session, WT_EXTLIST *al, WT_EXTLIST *bl); extern int __wt_block_extlist_overlap( WT_SESSION_IMPL *session, WT_BLOCK *block, WT_BLOCK_CKPT *ci); -extern int __wt_block_extlist_merge(WT_SESSION_IMPL *session, WT_EXTLIST *a, WT_EXTLIST *b); -extern int __wt_block_insert_ext( WT_SESSION_IMPL *session, WT_EXTLIST *el, wt_off_t off, wt_off_t size); +extern int __wt_block_extlist_merge(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_EXTLIST *a, WT_EXTLIST *b); +extern int __wt_block_insert_ext(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_EXTLIST *el, wt_off_t off, wt_off_t size); extern int __wt_block_extlist_read_avail(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_EXTLIST *el, wt_off_t ckpt_size); extern int __wt_block_extlist_read(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_EXTLIST *el, wt_off_t ckpt_size); extern int __wt_block_extlist_write(WT_SESSION_IMPL *session, WT_BLOCK *block, WT_EXTLIST *el, WT_EXTLIST *additional); |