Lines Matching defs:zfs

40 #include "zfs.h"
44 #include "zfs/fletcher.c"
45 #include "zfs/sha256.c"
83 vdev_pwrite(const zfs_opt_t *zfs, const void *buf, size_t len, off_t off)
87 assert(off >= 0 && off < zfs->asize);
90 off + (off_t)len < zfs->asize);
91 if (zfs->spacemap != NULL) {
98 assert(bit_ntest(zfs->spacemap, off >> zfs->ashift,
99 (off + len - 1) >> zfs->ashift, 1));
104 n = pwrite(zfs->fd, (const char *)buf + sofar, len - sofar,
113 vdev_pwrite_data(zfs_opt_t *zfs, uint8_t datatype, uint8_t cksumtype,
123 vdev_pwrite(zfs, data, sz, loc);
127 vdev_pwrite_dnode_indir(zfs_opt_t *zfs, dnode_phys_t *dnode, uint8_t level,
130 vdev_pwrite_data(zfs, dnode->dn_type, dnode->dn_checksum, level, fill,
138 vdev_pwrite_dnode_data(zfs_opt_t *zfs, dnode_phys_t *dnode, const void *data,
141 vdev_pwrite_dnode_indir(zfs, dnode, 0, 1, data, sz, loc,
164 vdev_label_write(zfs_opt_t *zfs, int ind, const vdev_label_t *labelp)
181 loff = zfs->vdevsize - (VDEV_LABELS - ind) * sizeof(*label);
203 blksz = ASHIFT_UBERBLOCK_SIZE(zfs->ashift);
212 n = pwrite(zfs->fd, label, sizeof(*label), loff);
236 vdev_space_alloc(zfs_opt_t *zfs, off_t *lenp)
241 minblksz = 1 << zfs->ashift;
257 bit_ffc_area_at(zfs->spacemap, loc, zfs->spacemapbits, nbits,
267 bit_nset(zfs->spacemap, loc, loc + nbits - 1);
270 return ((off_t)loc << zfs->ashift);
274 vdev_spacemap_init(zfs_opt_t *zfs)
278 assert(powerof2(zfs->mssize));
280 nbits = rounddown2(zfs->asize, zfs->mssize) >> zfs->ashift;
288 zfs->spacemapbits = (int)nbits;
289 zfs->spacemap = bit_alloc(zfs->spacemapbits);
290 if (zfs->spacemap == NULL)
295 vdev_spacemap_write(zfs_opt_t *zfs)
308 objarrblksz = sizeof(uint64_t) * zfs->mscount;
310 objarrloc = objset_space_alloc(zfs, zfs->mos, &objarrblksz);
313 objarr = objset_dnode_lookup(zfs->mos, zfs->objarrid);
320 smblksz = 1 << zfs->ashift;
326 sma = ecalloc(zfs->mscount, sizeof(*sma));
327 for (uint64_t i = 0; i < zfs->mscount; i++) {
328 sma[i].dnode = objset_dnode_bonus_alloc(zfs->mos,
331 sma[i].loc = objset_space_alloc(zfs, zfs->mos, &smblksz);
333 spacemap = zfs->spacemap;
334 zfs->spacemap = NULL;
340 for (uint64_t i = 0; i < zfs->mscount; i++) {
356 shift = zfs->msshift - zfs->ashift;
363 bit_ffs_at(spacemap, srunb, zfs->spacemapbits, &srunb);
367 bit_ffc_at(spacemap, srunb, zfs->spacemapbits, &erunb);
386 alloc += runlen << zfs->ashift;
394 vdev_pwrite_dnode_data(zfs, sma[i].dnode, smblk, smblksz,
405 vdev_pwrite_dnode_data(zfs, objarr, objarrblk, objarrblksz, objarrloc);
408 assert(zfs->spacemap == NULL);
414 vdev_init(zfs_opt_t *zfs, const char *image)
416 assert(zfs->ashift >= MINBLOCKSHIFT);
418 zfs->fd = open(image, O_RDWR | O_CREAT | O_TRUNC, 0644);
419 if (zfs->fd == -1)
421 if (ftruncate(zfs->fd, zfs->vdevsize) != 0)
424 vdev_spacemap_init(zfs);
428 vdev_fini(zfs_opt_t *zfs)
430 assert(zfs->spacemap == NULL);
432 if (zfs->fd != -1) {
433 if (close(zfs->fd) != 0)
435 zfs->fd = -1;