From 36211fc612d412f6cd1fb69dd094f2fa9c0b6e6c Mon Sep 17 00:00:00 2001 From: Tomohiro Kusumi Date: Fri, 10 Jul 2015 23:07:28 +0900 Subject: [PATCH] sys/vfs/hammer: Add hammer_node_max_elements() - Add inline function hammer_node_max_elements() and make it available to userspace. - The relation between btree node type and # of elements is a part of ondisk definition, so it's better to have it in the same header file. --- sbin/hammer/cmd_show.c | 4 ++-- sys/vfs/hammer/hammer_btree.c | 11 ++++++----- sys/vfs/hammer/hammer_btree.h | 13 +++++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/sbin/hammer/cmd_show.c b/sbin/hammer/cmd_show.c index 0c512d4e1c..2beba35dcb 100644 --- a/sbin/hammer/cmd_show.c +++ b/sbin/hammer/cmd_show.c @@ -170,8 +170,8 @@ print_btree_node(hammer_off_t node_offset, btree_search_t search, } printf(" {\n"); - maxcount = (node->type == HAMMER_BTREE_TYPE_INTERNAL) ? - HAMMER_BTREE_INT_ELMS : HAMMER_BTREE_LEAF_ELMS; + maxcount = hammer_node_max_elements(node->type); + assert(maxcount != -1); for (i = 0; i < node->count && i < maxcount; ++i) { elm = &node->elms[i]; diff --git a/sys/vfs/hammer/hammer_btree.c b/sys/vfs/hammer/hammer_btree.c index 27482dc88b..d27b7538db 100644 --- a/sys/vfs/hammer/hammer_btree.c +++ b/sys/vfs/hammer/hammer_btree.c @@ -3048,11 +3048,12 @@ static __inline int btree_max_elements(u_int8_t type) { - if (type == HAMMER_BTREE_TYPE_LEAF) - return(HAMMER_BTREE_LEAF_ELMS); - if (type == HAMMER_BTREE_TYPE_INTERNAL) - return(HAMMER_BTREE_INT_ELMS); - panic("btree_max_elements: bad type %d", type); + int n; + + n = hammer_node_max_elements(type); + if (n == -1) + panic("btree_max_elements: bad type %d", type); + return(n); } void diff --git a/sys/vfs/hammer/hammer_btree.h b/sys/vfs/hammer/hammer_btree.h index 526d59cdc1..ff664a0cab 100644 --- a/sys/vfs/hammer/hammer_btree.h +++ b/sys/vfs/hammer/hammer_btree.h @@ -209,6 +209,19 @@ typedef union hammer_btree_elm *hammer_btree_elm_t; #define HAMMER_BTREE_TYPE_RECORD ((u_int8_t)'R') #define HAMMER_BTREE_TYPE_DELETED ((u_int8_t)'D') +static __inline +int +hammer_node_max_elements(u_int8_t type) +{ + switch (type) { + case HAMMER_BTREE_TYPE_LEAF: + return(HAMMER_BTREE_LEAF_ELMS); + case HAMMER_BTREE_TYPE_INTERNAL: + return(HAMMER_BTREE_INT_ELMS); + } + return(-1); /* invalid type */ +} + struct hammer_node_ondisk { /* * B-Tree node header (64 bytes) -- 2.41.0