bfs
bfs[0].counter = BF_ALLOC; /* pass out the first buffer */
bfs[1].counter = BF_FREE;
return (&bfs[0].buf.tb_hdr);
bfs[current].counter = BF_FREE; /* free old one */
b = &bfs[current]; /* look at new buffer */
b = &bfs[nextone]; /* look at "next" buffer */
bfs[current].counter = ct; /* set size of data to write */
if (bfs[current].counter != BF_FREE) /* if not free */
bfs[current].counter = BF_ALLOC; /* mark as alloc'd */
*dpp = &bfs[current].buf.tb_hdr;
b = &bfs[nextone];
} bfs[2];
const char *bfs;
if ((bfs = find_bootprop(str, BPROP_ZFSBOOTFS)) == NULL ||
n = bfs - str;
bootpath, bfs) >= strsz - n)
return (struct bfs){ .a = 1, .b = 2}.b;
struct bfs bf = { .a = 1, .b = 2 };
return (struct bfs[]){bf}[0].b;
struct bfs bf = { .a = 1, .b = 4 };
return (struct bfs[]){bf, { .a = 3, .b = 6}}[1].b;
struct bfs bfsu_init(unsigned int a)
struct bfs bf = { .f = a, };
struct bfs bfss_init(int a)
struct bfs bf = { .f = a, };
struct bfs bf = { };
signed int get__bfs_a(struct bfs bf) { return bf.a; }
signed int get__bfs_b(struct bfs bf) { return bf.b; }
signed int get_pbfs_a(struct bfs *bf) { return bf->a; }
signed int get_pbfs_b(struct bfs *bf) { return bf->b; }
bootfs_node_init(bootfs_t *bfs, bootfs_node_t *bnp, const struct vattr *vap,
bnp->bvn_vnp->v_vfsp = bfs->bfs_vfsp;
bnp->bvn_attr.va_fsid = makedevice(bootfs_major, bfs->bfs_minor);
bnp->bvn_attr.va_nodeid = bfs->bfs_ninode;
bfs->bfs_ninode++;
list_insert_tail(&bfs->bfs_nodes, bnp);
bootfs_mkroot(bootfs_t *bfs)
bootfs_node_init(bfs, bnp, &bootfs_vattr_dir, "/", 1);
bfs->bfs_rootvn = bnp;
bfs->bfs_stat.bfss_ndirs.value.ui32++;
bootfs_mknode(bootfs_t *bfs, bootfs_node_t *parent, bootfs_node_t **outp,
bootfs_node_init(bfs, bnp, vap, name, namelen);
bfs->bfs_stat.bfss_ndirs.value.ui32++;
bfs->bfs_stat.bfss_nfiles.value.ui32++;
bfs->bfs_stat.bfss_nbytes.value.ui64 += size;
bootfs_construct_entry(bootfs_t *bfs, uintptr_t addr, uint64_t size,
bootfs_node_t *bnp = bfs->bfs_rootvn;
VERIFY(bootfs_mknode(bfs, bnp, &nbnp, p, nlen,
ret = bootfs_mknode(bfs, bnp, &nbnp, p, nlen, &bootfs_vattr_reg,
bootfs_construct(bootfs_t *bfs)
bootfs_mkroot(bfs);
ret = bootfs_construct_entry(bfs, addr, size, mname);
bfs->bfs_stat.bfss_ndiscards.value.ui32++;
bfs->bfs_stat.bfss_ndups.value.ui32++;
bootfs_destruct(bootfs_t *bfs)
while ((bnp = list_remove_head(&bfs->bfs_nodes)) != NULL) {
kmem_free(bfs, sizeof (bfs));
bfs->bfs_minor = id_alloc(bootfs_idspace);
bfs->bfs_kstat = kstat_create_zone("bootfs", bfs->bfs_minor, "bootfs",
if (bfs->bfs_kstat == NULL) {
id_free(bootfs_idspace, bfs->bfs_minor);
kmem_free(bfs, sizeof (bfs));
bfs->bfs_kstat->ks_data = &bfs->bfs_stat;
fsdev = makedevice(bootfs_major, bfs->bfs_minor);
bfs->bfs_vfsp = vfsp;
vfsp->vfs_data = (caddr_t)bfs;
bfs->bfs_mntpath = kmem_alloc(dpn.pn_pathlen + 1, KM_SLEEP);
bcopy(dpn.pn_path, bfs->bfs_mntpath, dpn.pn_pathlen);
bfs->bfs_mntpath[dpn.pn_pathlen] = '\0';
list_create(&bfs->bfs_nodes, sizeof (bootfs_node_t),
kstat_named_init(&bfs->bfs_stat.bfss_nfiles, "nfiles",
kstat_named_init(&bfs->bfs_stat.bfss_ndirs, "ndirs",
kstat_named_init(&bfs->bfs_stat.bfss_nbytes, "nbytes",
kstat_named_init(&bfs->bfs_stat.bfss_ndups, "ndup",
kstat_named_init(&bfs->bfs_stat.bfss_ndiscards, "ndiscard",
bootfs_construct(bfs);
kstat_install(bfs->bfs_kstat);
bootfs_t *bfs = vfsp->vfs_data;
for (bnp = list_head(&bfs->bfs_nodes); bnp != NULL;
bnp = list_next(&bfs->bfs_nodes, bnp)) {
kstat_delete(bfs->bfs_kstat);
bootfs_destruct(bfs);
list_destroy(&bfs->bfs_nodes);
kmem_free(bfs->bfs_mntpath, strlen(bfs->bfs_mntpath) + 1);
id_free(bootfs_idspace, bfs->bfs_minor);
kmem_free(bfs, sizeof (bootfs_t));
bootfs_t *bfs;
bfs = (bootfs_t *)vfsp->vfs_data;
*vpp = bfs->bfs_rootvn->bvn_vnp;
const bootfs_t *bfs = (bootfs_t *)vfsp;
sbp->f_blocks = bfs->bfs_stat.bfss_nbytes.value.ui64 >> PAGESHIFT;
sbp->f_files = bfs->bfs_stat.bfss_nfiles.value.ui32 +
bfs->bfs_stat.bfss_ndirs.value.ui32;
bootfs_t *bfs;
bfs = kmem_zalloc(sizeof (bootfs_t), KM_NOSLEEP_LAZY);
if (bfs == NULL)