Lines Matching +full:n +full:- +full:mos

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
42 #pragma GCC diagnostic ignored "-Wunused-function"
70 memcpy(&bp->blk_cksum, cksum, sizeof(*cksum)); in blkptr_set()
84 ssize_t n; in vdev_pwrite() local
86 assert(off >= 0 && off < zfs->asize); in vdev_pwrite()
89 off + (off_t)len < zfs->asize); in vdev_pwrite()
90 if (zfs->spacemap != NULL) { in vdev_pwrite()
94 * The space map isn't available once the on-disk space map is in vdev_pwrite()
97 assert(bit_ntest(zfs->spacemap, off >> zfs->ashift, in vdev_pwrite()
98 (off + len - 1) >> zfs->ashift, 1)); in vdev_pwrite()
102 for (size_t sofar = 0; sofar < len; sofar += n) { in vdev_pwrite()
103 n = pwrite(zfs->fd, (const char *)buf + sofar, len - sofar, in vdev_pwrite()
105 if (n < 0) in vdev_pwrite()
107 assert(n > 0); in vdev_pwrite()
129 vdev_pwrite_data(zfs, dnode->dn_type, dnode->dn_checksum, level, fill, in vdev_pwrite_dnode_indir()
132 assert((dnode->dn_flags & DNODE_FLAG_USED_BYTES) != 0); in vdev_pwrite_dnode_indir()
133 dnode->dn_used += sz; in vdev_pwrite_dnode_indir()
141 &dnode->dn_blkptr[0]); in vdev_pwrite_dnode_data()
152 eck = (zio_eck_t *)((char *)buf + size) - 1; in vdev_label_set_checksum()
153 eck->zec_magic = ZEC_MAGIC; in vdev_label_set_checksum()
154 ZIO_SET_CHECKSUM(&eck->zec_cksum, off, 0, 0, 0); in vdev_label_set_checksum()
156 eck->zec_cksum = cksum; in vdev_label_set_checksum()
166 ssize_t n; in vdev_label_write() local
180 loff = zfs->vdevsize - (VDEV_LABELS - ind) * sizeof(*label); in vdev_label_write()
187 vdev_label_set_checksum(&label->vl_be, in vdev_label_write()
188 loff + __offsetof(vdev_label_t, vl_be), sizeof(label->vl_be)); in vdev_label_write()
193 vdev_label_set_checksum(&label->vl_vdev_phys, in vdev_label_write()
195 sizeof(label->vl_vdev_phys)); in vdev_label_write()
202 blksz = 1 << zfs->ashift; in vdev_label_write()
203 assert(sizeof(label->vl_uberblock) % blksz == 0); in vdev_label_write()
204 for (size_t roff = 0; roff < sizeof(label->vl_uberblock); in vdev_label_write()
206 vdev_label_set_checksum(&label->vl_uberblock[0] + roff, in vdev_label_write()
211 n = pwrite(zfs->fd, label, sizeof(*label), loff); in vdev_label_write()
212 if (n < 0) in vdev_label_write()
214 assert(n == sizeof(*label)); in vdev_label_write()
226 * 3. The returned run's length will be size-aligned up to 128KB.
228 * XXX-MJ the third rule isn't actually required, so this can just be a dumb
240 minblksz = 1 << zfs->ashift; in vdev_space_alloc()
247 if ((len & (len - 1)) != 0) in vdev_space_alloc()
256 bit_ffc_area_at(zfs->spacemap, loc, zfs->spacemapbits, nbits, in vdev_space_alloc()
258 if (loc == -1) { in vdev_space_alloc()
262 if ((loc & (align - 1)) == 0) in vdev_space_alloc()
266 bit_nset(zfs->spacemap, loc, loc + nbits - 1); in vdev_space_alloc()
269 return ((off_t)loc << zfs->ashift); in vdev_space_alloc()
277 assert(powerof2(zfs->mssize)); in vdev_spacemap_init()
279 nbits = rounddown2(zfs->asize, zfs->mssize) >> zfs->ashift; in vdev_spacemap_init()
287 zfs->spacemapbits = (int)nbits; in vdev_spacemap_init()
288 zfs->spacemap = bit_alloc(zfs->spacemapbits); in vdev_spacemap_init()
289 if (zfs->spacemap == NULL) in vdev_spacemap_init()
307 objarrblksz = sizeof(uint64_t) * zfs->mscount; in vdev_spacemap_write()
309 objarrloc = objset_space_alloc(zfs, zfs->mos, &objarrblksz); in vdev_spacemap_write()
312 objarr = objset_dnode_lookup(zfs->mos, zfs->objarrid); in vdev_spacemap_write()
313 objarr->dn_datablkszsec = objarrblksz >> MINBLOCKSHIFT; in vdev_spacemap_write()
319 smblksz = 1 << zfs->ashift; in vdev_spacemap_write()
325 sma = ecalloc(zfs->mscount, sizeof(*sma)); in vdev_spacemap_write()
326 for (uint64_t i = 0; i < zfs->mscount; i++) { in vdev_spacemap_write()
327 sma[i].dnode = objset_dnode_bonus_alloc(zfs->mos, in vdev_spacemap_write()
330 sma[i].loc = objset_space_alloc(zfs, zfs->mos, &smblksz); in vdev_spacemap_write()
332 spacemap = zfs->spacemap; in vdev_spacemap_write()
333 zfs->spacemap = NULL; in vdev_spacemap_write()
339 for (uint64_t i = 0; i < zfs->mscount; i++) { in vdev_spacemap_write()
349 sma[i].dnode->dn_nblkptr = 3; in vdev_spacemap_write()
350 sma[i].dnode->dn_datablkszsec = smblksz >> MINBLOCKSHIFT; in vdev_spacemap_write()
355 shift = zfs->msshift - zfs->ashift; in vdev_spacemap_write()
362 bit_ffs_at(spacemap, srunb, zfs->spacemapbits, &srunb); in vdev_spacemap_write()
363 if (srunb == -1 || srunb >= endb) in vdev_spacemap_write()
366 bit_ffc_at(spacemap, srunb, zfs->spacemapbits, &erunb); in vdev_spacemap_write()
367 if (erunb == -1 || erunb > endb) in vdev_spacemap_write()
376 runlen = erunb - srunb; in vdev_spacemap_write()
377 runoff = srunb - startb; in vdev_spacemap_write()
385 alloc += runlen << zfs->ashift; in vdev_spacemap_write()
390 sm->smp_length = length * sizeof(uint64_t); in vdev_spacemap_write()
391 sm->smp_alloc = alloc; in vdev_spacemap_write()
407 assert(zfs->spacemap == NULL); in vdev_spacemap_write()
415 assert(zfs->ashift >= MINBLOCKSHIFT); in vdev_init()
417 zfs->fd = open(image, O_RDWR | O_CREAT | O_TRUNC, 0644); in vdev_init()
418 if (zfs->fd == -1) in vdev_init()
420 if (ftruncate(zfs->fd, zfs->vdevsize) != 0) in vdev_init()
429 assert(zfs->spacemap == NULL); in vdev_fini()
431 if (zfs->fd != -1) { in vdev_fini()
432 if (close(zfs->fd) != 0) in vdev_fini()
434 zfs->fd = -1; in vdev_fini()