From ccdea233638e159afd4802db5c3e1ae9b1f5ee29 Mon Sep 17 00:00:00 2001 From: Tomohiro Kusumi Date: Fri, 26 Jun 2015 04:06:04 +0900 Subject: [PATCH] sys/vfs/hammer: Define HAMMER_ZONE2_MAPPED_INDEX for zone# assertions - Define HAMMER_ZONE2_MAPPED_INDEX as zone-8(btree zone) index and use this (instead of zone-8 index) to test if the given zone# is is valid zone#. This makes better sense as "btree" zone itself doesn't have much meaning with regards to checking zone# range (e.g. meta zone or large/small data zones could have been defined as zone-8 when hammer was designed and it would still work with the non-btree-zone-8). - This is similar to the way HAMMER_RECTYPE_ENTRY_START is defined and used to lookup range of records. --- sbin/hammer/cmd_blockmap.c | 4 +++- sbin/newfs_hammer/newfs_hammer.c | 2 +- sys/vfs/hammer/hammer.h | 2 +- sys/vfs/hammer/hammer_blockmap.c | 16 ++++++++-------- sys/vfs/hammer/hammer_disk.h | 6 ++++++ sys/vfs/hammer/hammer_ondisk.c | 2 +- 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/sbin/hammer/cmd_blockmap.c b/sbin/hammer/cmd_blockmap.c index 32d5031d10..b0c3d31537 100644 --- a/sbin/hammer/cmd_blockmap.c +++ b/sbin/hammer/cmd_blockmap.c @@ -183,6 +183,8 @@ hammer_cmd_checkmap(void) } rel_volume(volume); + assert(HAMMER_ZONE_UNDO_INDEX < HAMMER_ZONE2_MAPPED_INDEX); + assert(HAMMER_ZONE2_MAPPED_INDEX < HAMMER_MAX_ZONES); AssertOnFailure = 0; printf("Collecting allocation info from B-Tree: "); @@ -486,7 +488,7 @@ dump_collect(collect_t collect, int *stats) zone = layer2->zone; if (AssertOnFailure) { assert((zone == HAMMER_ZONE_UNDO_INDEX) || - (zone >= HAMMER_ZONE_BTREE_INDEX && + (zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES)); } stats[zone]++; diff --git a/sbin/newfs_hammer/newfs_hammer.c b/sbin/newfs_hammer/newfs_hammer.c index d235a5d49c..00ebee719a 100644 --- a/sbin/newfs_hammer/newfs_hammer.c +++ b/sbin/newfs_hammer/newfs_hammer.c @@ -584,7 +584,7 @@ format_volume(struct volume_info *vol, int nvols, const char *label, /* * Format zones that are mapped to zone-2. */ - for (i = HAMMER_ZONE_BTREE_INDEX; i < HAMMER_MAX_ZONES; ++i) { + for (i = HAMMER_ZONE2_MAPPED_INDEX; i < HAMMER_MAX_ZONES; ++i) { format_blockmap(&ondisk->vol0_blockmap[i], HAMMER_ZONE_ENCODE(i, 0)); } diff --git a/sys/vfs/hammer/hammer.h b/sys/vfs/hammer/hammer.h index ed41a0d569..c72364073b 100644 --- a/sys/vfs/hammer/hammer.h +++ b/sys/vfs/hammer/hammer.h @@ -1631,7 +1631,7 @@ hammer_blockmap_lookup(hammer_mount_t hmp, hammer_off_t zone_offset, { #if defined INVARIANTS int zone = HAMMER_ZONE_DECODE(zone_offset); - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); #endif /* diff --git a/sys/vfs/hammer/hammer_blockmap.c b/sys/vfs/hammer/hammer_blockmap.c index 8d05fa72bf..8cb7d0d3bd 100644 --- a/sys/vfs/hammer/hammer_blockmap.c +++ b/sys/vfs/hammer/hammer_blockmap.c @@ -97,7 +97,7 @@ hammer_blockmap_alloc(hammer_transaction_t trans, int zone, int bytes, */ bytes = (bytes + 15) & ~15; KKASSERT(bytes > 0 && bytes <= HAMMER_XBUFSIZE); - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); /* * Setup @@ -248,7 +248,7 @@ again: * We do this for B-Tree and meta-data allocations to provide * localization for updates. */ - if ((zone == HAMMER_ZONE_BTREE_INDEX || + if ((zone == HAMMER_ZONE2_MAPPED_INDEX || zone == HAMMER_ZONE_META_INDEX) && offset >= HAMMER_BIGBLOCK_OVERFILL && !((next_offset ^ blockmap->next_offset) & ~HAMMER_BIGBLOCK_MASK64) @@ -425,7 +425,7 @@ hammer_blockmap_reserve(hammer_mount_t hmp, int zone, int bytes, /* * Setup */ - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); root_volume = hammer_get_root_volume(hmp, errorp); if (*errorp) return(NULL); @@ -655,7 +655,7 @@ hammer_blockmap_reserve_dedup(hammer_mount_t hmp, int zone, int bytes, /* * Setup */ - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); root_volume = hammer_get_root_volume(hmp, errorp); if (*errorp) return (NULL); @@ -966,7 +966,7 @@ hammer_blockmap_free(hammer_transaction_t trans, * Basic zone validation & locking */ zone = HAMMER_ZONE_DECODE(zone_offset); - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); root_volume = trans->rootvol; error = 0; @@ -1101,7 +1101,7 @@ hammer_blockmap_dedup(hammer_transaction_t trans, * Basic zone validation & locking */ zone = HAMMER_ZONE_DECODE(zone_offset); - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); error = 0; freemap = &hmp->blockmap[HAMMER_ZONE_FREEMAP_INDEX]; @@ -1209,7 +1209,7 @@ hammer_blockmap_finalize(hammer_transaction_t trans, * Basic zone validation & locking */ zone = HAMMER_ZONE_DECODE(zone_offset); - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); root_volume = trans->rootvol; error = 0; @@ -1330,7 +1330,7 @@ hammer_blockmap_getfree(hammer_mount_t hmp, hammer_off_t zone_offset, int zone; zone = HAMMER_ZONE_DECODE(zone_offset); - KKASSERT(zone >= HAMMER_ZONE_BTREE_INDEX && zone < HAMMER_MAX_ZONES); + KKASSERT(zone >= HAMMER_ZONE2_MAPPED_INDEX && zone < HAMMER_MAX_ZONES); root_volume = hammer_get_root_volume(hmp, errorp); if (*errorp) { *curp = 0; diff --git a/sys/vfs/hammer/hammer_disk.h b/sys/vfs/hammer/hammer_disk.h index 3fea5af675..1bb91ce2dd 100644 --- a/sys/vfs/hammer/hammer_disk.h +++ b/sys/vfs/hammer/hammer_disk.h @@ -170,6 +170,12 @@ typedef u_int32_t hammer_crc_t; #define HAMMER_MAX_ZONES 16 +/* + * Backend zones that are mapped to zone-2 (except for zone-3) + * starts from this index which is 8. + */ +#define HAMMER_ZONE2_MAPPED_INDEX HAMMER_ZONE_BTREE_INDEX + #define HAMMER_VOL_ENCODE(vol_no) \ ((hammer_off_t)((vol_no) & 255) << 52) #define HAMMER_VOL_DECODE(ham_off) \ diff --git a/sys/vfs/hammer/hammer_ondisk.c b/sys/vfs/hammer/hammer_ondisk.c index b06645868e..9bfe50c83e 100644 --- a/sys/vfs/hammer/hammer_ondisk.c +++ b/sys/vfs/hammer/hammer_ondisk.c @@ -664,7 +664,7 @@ found_aliased: /* * Handle blockmap offset translations */ - if (zone >= HAMMER_ZONE_BTREE_INDEX) { + if (zone >= HAMMER_ZONE2_MAPPED_INDEX) { zone2_offset = hammer_blockmap_lookup(hmp, buf_offset, errorp); } else if (zone == HAMMER_ZONE_UNDO_INDEX) { zone2_offset = hammer_undo_lookup(hmp, buf_offset, errorp); -- 2.41.0