BMT
#define BM_BYTE(p, vnid) (p->bitmap[(vnid % p->bmsize) / sizeof(BMT)])
#define BM_ISSET(p, vnid) (BM_BYTE(p, vnid) & (1 << (p->nextvnid % sizeof(BMT))))
#define BM_SET(p, vnid) (BM_BYTE(p, vnid) |= (1 << (p->nextvnid % sizeof(BMT))))
#define BM_UNSET(p, vnid) (BM_BYTE(p, vnid) &= ~(1 << (p->nextvnid % sizeof(BMT))))
size = (size + sizeof(BMT) - 1) / sizeof(BMT);
size *= sizeof(BMT);
p = malloc(sizeof(struct vnidpool) + size / sizeof(BMT));
p->bitmap = (BMT *)(p + 1);
memset(p->bitmap, 0, size / sizeof(BMT));
for (i = 0; i < (pool->bmsize % sizeof(BMT)); i++) {