Lines Matching refs:dn

130 dmu_buf_hold_noread_by_dnode(dnode_t *dn, uint64_t offset,
136 blkid = dbuf_whichblock(dn, 0, offset);
137 rw_enter(&dn->dn_struct_rwlock, RW_READER);
138 db = dbuf_hold(dn, blkid, tag);
139 rw_exit(&dn->dn_struct_rwlock);
153 dnode_t *dn;
158 err = dnode_hold(os, object, FTAG, &dn);
161 blkid = dbuf_whichblock(dn, 0, offset);
162 rw_enter(&dn->dn_struct_rwlock, RW_READER);
163 db = dbuf_hold(dn, blkid, tag);
164 rw_exit(&dn->dn_struct_rwlock);
165 dnode_rele(dn, FTAG);
177 dmu_buf_hold_by_dnode(dnode_t *dn, uint64_t offset,
186 err = dmu_buf_hold_noread_by_dnode(dn, offset, tag, dbp);
232 dnode_t *dn;
236 dn = DB_DNODE(db);
238 if (dn->dn_bonus != db) {
243 dnode_setbonuslen(dn, newsize, tx);
255 dnode_t *dn;
259 dn = DB_DNODE(db);
263 } else if (dn->dn_bonus != db) {
266 dnode_setbonus_type(dn, type, tx);
278 dnode_t *dn;
282 dn = DB_DNODE(db);
283 type = dn->dn_bonustype;
292 dnode_t *dn;
295 error = dnode_hold(os, object, FTAG, &dn);
296 dbuf_rm_spill(dn, tx);
297 rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
298 dnode_rm_spill(dn, tx);
299 rw_exit(&dn->dn_struct_rwlock);
300 dnode_rele(dn, FTAG);
310 dnode_t *dn;
314 error = dnode_hold(os, object, FTAG, &dn);
318 rw_enter(&dn->dn_struct_rwlock, RW_READER);
319 if (dn->dn_bonus == NULL) {
320 rw_exit(&dn->dn_struct_rwlock);
321 rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
322 if (dn->dn_bonus == NULL)
323 dbuf_create_bonus(dn);
325 db = dn->dn_bonus;
329 VERIFY(dnode_add_ref(dn, db));
330 atomic_inc_32(&dn->dn_dbufs_count);
338 rw_exit(&dn->dn_struct_rwlock);
340 dnode_rele(dn, FTAG);
358 dmu_spill_hold_by_dnode(dnode_t *dn, uint32_t flags, void *tag, dmu_buf_t **dbp)
364 rw_enter(&dn->dn_struct_rwlock, RW_READER);
366 db = dbuf_hold(dn, DMU_SPILL_BLKID, tag);
369 rw_exit(&dn->dn_struct_rwlock);
384 dnode_t *dn;
388 dn = DB_DNODE(db);
390 if (spa_version(dn->dn_objset->os_spa) < SPA_VERSION_SA) {
393 rw_enter(&dn->dn_struct_rwlock, RW_READER);
395 if (!dn->dn_have_spill) {
398 err = dmu_spill_hold_by_dnode(dn,
402 rw_exit(&dn->dn_struct_rwlock);
413 dnode_t *dn;
417 dn = DB_DNODE(db);
418 err = dmu_spill_hold_by_dnode(dn, DB_RF_CANFAIL, tag, dbp);
431 dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset, uint64_t length,
450 rw_enter(&dn->dn_struct_rwlock, RW_READER);
451 if (dn->dn_datablkshift) {
452 int blkshift = dn->dn_datablkshift;
456 if (offset + length > dn->dn_datablksz) {
459 (longlong_t)dn->dn_objset->
461 (longlong_t)dn->dn_object, dn->dn_datablksz,
463 rw_exit(&dn->dn_struct_rwlock);
470 zio = zio_root(dn->dn_objset->os_spa, NULL, NULL, ZIO_FLAG_CANFAIL);
471 blkid = dbuf_whichblock(dn, 0, offset);
473 dmu_buf_impl_t *db = dbuf_hold(dn, blkid + i, tag);
475 rw_exit(&dn->dn_struct_rwlock);
488 DNODE_META_IS_CACHEABLE(dn) && length <= zfetch_array_rd_sz) {
489 dmu_zfetch(&dn->dn_zfetch, blkid, nblks,
490 read && DNODE_IS_CACHEABLE(dn));
492 rw_exit(&dn->dn_struct_rwlock);
528 dnode_t *dn;
531 err = dnode_hold(os, object, FTAG, &dn);
535 err = dmu_buf_hold_array_by_dnode(dn, offset, length, read, tag,
538 dnode_rele(dn, FTAG);
549 dnode_t *dn;
553 dn = DB_DNODE(db);
554 err = dmu_buf_hold_array_by_dnode(dn, offset, length, read, tag,
590 dnode_t *dn;
595 dn = DMU_META_DNODE(os);
600 rw_enter(&dn->dn_struct_rwlock, RW_READER);
601 blkid = dbuf_whichblock(dn, level,
603 dbuf_prefetch(dn, level, blkid, pri, 0);
604 rw_exit(&dn->dn_struct_rwlock);
613 err = dnode_hold(os, object, FTAG, &dn);
617 rw_enter(&dn->dn_struct_rwlock, RW_READER);
620 * is the first. Then dbuf_whichblk(dn, level, off + len - 1) is the
621 * last block we want to prefetch, and dbuf_whichblock(dn, level,
625 if (level > 0 || dn->dn_datablkshift != 0) {
626 nblks = dbuf_whichblock(dn, level, offset + len - 1) -
627 dbuf_whichblock(dn, level, offset) + 1;
629 nblks = (offset < dn->dn_datablksz);
633 blkid = dbuf_whichblock(dn, level, offset);
635 dbuf_prefetch(dn, level, blkid + i, pri, 0);
638 rw_exit(&dn->dn_struct_rwlock);
640 dnode_rele(dn, FTAG);
654 get_next_chunk(dnode_t *dn, uint64_t *start, uint64_t minimum)
656 uint64_t maxblks = DMU_MAX_ACCESS >> (dn->dn_indblkshift + 1);
659 dn->dn_datablksz * EPB(dn->dn_indblkshift, SPA_BLKPTRSHIFT);
679 err = dnode_next_offset(dn,
715 dmu_free_long_range_impl(objset_t *os, dnode_t *dn, uint64_t offset,
718 uint64_t object_size = (dn->dn_maxblkid + 1) * dn->dn_datablksz;
730 if (dmu_objset_zfs_unmounting(dn->dn_objset))
736 err = get_next_chunk(dn, &chunk_begin, offset);
743 dmu_tx_hold_free(tx, dn->dn_object,
756 dnode_free_range(dn, chunk_begin, chunk_end - chunk_begin, tx);
768 dnode_t *dn;
771 err = dnode_hold(os, object, FTAG, &dn);
774 err = dmu_free_long_range_impl(os, dn, offset, length);
783 dn->dn_maxblkid = 0;
785 dnode_rele(dn, FTAG);
818 dnode_t *dn;
819 int err = dnode_hold(os, object, FTAG, &dn);
824 dnode_free_range(dn, offset, size, tx);
825 dnode_rele(dn, FTAG);
833 dnode_t *dn;
837 err = dnode_hold(os, object, FTAG, &dn);
846 if (dn->dn_maxblkid == 0) {
847 int newsz = offset > dn->dn_datablksz ? 0 :
848 MIN(size, dn->dn_datablksz - offset);
861 err = dmu_buf_hold_array_by_dnode(dn, offset, mylen,
884 dnode_rele(dn, FTAG);
1095 dmu_read_uio_dnode(dnode_t *dn, uio_t *uio, uint64_t size)
1105 err = dmu_buf_hold_array_by_dnode(dn, uio->uio_loffset, size,
1164 dnode_t *dn;
1171 dn = DB_DNODE(db);
1172 err = dmu_read_uio_dnode(dn, uio, size);
1186 dnode_t *dn;
1192 err = dnode_hold(os, object, FTAG, &dn);
1196 err = dmu_read_uio_dnode(dn, uio, size);
1198 dnode_rele(dn, FTAG);
1204 dmu_write_uio_dnode(dnode_t *dn, uio_t *uio, uint64_t size, dmu_tx_t *tx)
1211 err = dmu_buf_hold_array_by_dnode(dn, uio->uio_loffset, size,
1269 dnode_t *dn;
1276 dn = DB_DNODE(db);
1277 err = dmu_write_uio_dnode(dn, uio, size, tx);
1292 dnode_t *dn;
1298 err = dnode_hold(os, object, FTAG, &dn);
1302 err = dmu_write_uio_dnode(dn, uio, size, tx);
1304 dnode_rele(dn, FTAG);
1396 dnode_t *dn;
1402 dn = DB_DNODE(dbuf);
1403 rw_enter(&dn->dn_struct_rwlock, RW_READER);
1404 blkid = dbuf_whichblock(dn, 0, offset);
1405 VERIFY((db = dbuf_hold(dn, blkid, FTAG)) != NULL);
1406 rw_exit(&dn->dn_struct_rwlock);
1425 dn = DB_DNODE(dbuf);
1426 os = dn->dn_objset;
1427 object = dn->dn_object;
1618 dnode_t *dn;
1627 dn = DB_DNODE(db);
1628 dmu_write_policy(os, dn, db->db_level, WP_DMU_SYNC,
1701 dn = DB_DNODE(db);
1702 if (dr->dr_next != NULL || dnode_block_freed(dn, db->db_blkid))
1740 dnode_t *dn;
1743 err = dnode_hold(os, object, FTAG, &dn);
1746 err = dnode_set_blksz(dn, size, ibs, tx);
1747 dnode_rele(dn, FTAG);
1755 dnode_t *dn;
1764 VERIFY0(dnode_hold(os, object, FTAG, &dn));
1766 dn->dn_checksum = checksum;
1767 dnode_setdirty(dn, tx);
1768 dnode_rele(dn, FTAG);
1775 dnode_t *dn;
1784 VERIFY0(dnode_hold(os, object, FTAG, &dn));
1785 dn->dn_compress = compress;
1786 dnode_setdirty(dn, tx);
1787 dnode_rele(dn, FTAG);
1799 dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp,
1802 dmu_object_type_t type = dn ? dn->dn_type : DMU_OT_OBJSET;
1868 compress = zio_compress_select(os->os_spa, dn->dn_compress,
1872 zio_checksum_select(dn->dn_checksum, checksum) :
1913 zp->zp_type = (wp & WP_SPILL) ? dn->dn_bonustype : type;
1924 dnode_t *dn;
1936 err = dnode_hold(os, object, FTAG, &dn);
1941 err = dnode_next_offset(dn, (hole ? DNODE_FIND_HOLE : 0), off, 1, 1, 0);
1942 dnode_rele(dn, FTAG);
1957 dnode_t *dn;
1960 error = dnode_hold(os, object, FTAG, &dn);
1966 if (list_link_active(&dn->dn_dirty_link[i])) {
1970 dnode_rele(dn, FTAG);
1979 dmu_object_info_from_dnode(dnode_t *dn, dmu_object_info_t *doi)
1983 rw_enter(&dn->dn_struct_rwlock, RW_READER);
1984 mutex_enter(&dn->dn_mtx);
1986 dnp = dn->dn_phys;
1988 doi->doi_data_block_size = dn->dn_datablksz;
1989 doi->doi_metadata_block_size = dn->dn_indblkshift ?
1990 1ULL << dn->dn_indblkshift : 0;
1991 doi->doi_type = dn->dn_type;
1992 doi->doi_bonus_type = dn->dn_bonustype;
1993 doi->doi_bonus_size = dn->dn_bonuslen;
1994 doi->doi_indirection = dn->dn_nlevels;
1995 doi->doi_checksum = dn->dn_checksum;
1996 doi->doi_compress = dn->dn_compress;
1997 doi->doi_nblkptr = dn->dn_nblkptr;
1999 doi->doi_max_offset = (dn->dn_maxblkid + 1) * dn->dn_datablksz;
2004 mutex_exit(&dn->dn_mtx);
2005 rw_exit(&dn->dn_struct_rwlock);
2015 dnode_t *dn;
2016 int err = dnode_hold(os, object, FTAG, &dn);
2022 dmu_object_info_from_dnode(dn, doi);
2024 dnode_rele(dn, FTAG);
2050 dnode_t *dn;
2053 dn = DB_DNODE(db);
2055 *blksize = dn->dn_datablksz;
2057 *nblk512 = ((DN_USED_BYTES(dn->dn_phys) + SPA_MINBLOCKSIZE/2) >>