Lines Matching defs:dn
43 typedef void (*dmu_tx_hold_func_t)(dmu_tx_t *tx, struct dnode *dn,
113 dmu_tx_hold_dnode_impl(dmu_tx_t *tx, dnode_t *dn, enum dmu_tx_hold_type type,
118 if (dn != NULL) {
119 (void) zfs_refcount_add(&dn->dn_holds, tx);
121 mutex_enter(&dn->dn_mtx);
123 * dn->dn_assigned_txg == tx->tx_txg doesn't pose a
127 ASSERT(dn->dn_assigned_txg == 0);
128 dn->dn_assigned_txg = tx->tx_txg;
129 (void) zfs_refcount_add(&dn->dn_tx_holds, tx);
130 mutex_exit(&dn->dn_mtx);
136 txh->txh_dnode = dn;
151 dnode_t *dn = NULL;
156 err = dnode_hold(os, object, FTAG, &dn);
162 txh = dmu_tx_hold_dnode_impl(tx, dn, type, arg1, arg2);
163 if (dn != NULL)
164 dnode_rele(dn, FTAG);
169 dmu_tx_add_new_object(dmu_tx_t *tx, dnode_t *dn)
176 (void) dmu_tx_hold_dnode_impl(tx, dn, THT_NEWOBJECT, 0, 0);
208 dmu_tx_check_ioerr(zio_t *zio, dnode_t *dn, int level, uint64_t blkid)
213 rw_enter(&dn->dn_struct_rwlock, RW_READER);
214 err = dbuf_hold_impl(dn, level, blkid, TRUE, FALSE, FTAG, &db);
215 rw_exit(&dn->dn_struct_rwlock);
233 dnode_t *dn = txh->txh_dnode;
241 if (dn == NULL)
250 if (dn->dn_maxblkid == 0) {
251 if (off < dn->dn_datablksz &&
252 (off > 0 || len < dn->dn_datablksz)) {
253 err = dmu_tx_check_ioerr(NULL, dn, 0, 0);
259 zio_t *zio = zio_root(dn->dn_objset->os_spa,
263 uint64_t start = off >> dn->dn_datablkshift;
264 if (P2PHASE(off, dn->dn_datablksz) || len < dn->dn_datablksz) {
265 err = dmu_tx_check_ioerr(zio, dn, 0, start);
272 uint64_t end = (off + len - 1) >> dn->dn_datablkshift;
273 if (end != start && end <= dn->dn_maxblkid &&
274 P2PHASE(off + len, dn->dn_datablksz)) {
275 err = dmu_tx_check_ioerr(zio, dn, 0, end);
282 if (dn->dn_nlevels > 1) {
283 int shft = dn->dn_indblkshift - SPA_BLKPTRSHIFT;
286 err = dmu_tx_check_ioerr(zio, dn, 1, i);
303 dnode_t *dn = txh->txh_dnode;
311 if (dn == NULL)
319 if (dn->dn_maxblkid == 0) {
320 if (off < dn->dn_datablksz &&
321 (off > 0 || len < dn->dn_datablksz)) {
322 err = dmu_tx_check_ioerr(NULL, dn, 0, 0);
328 zio_t *zio = zio_root(dn->dn_objset->os_spa,
332 uint64_t start = off >> dn->dn_datablkshift;
333 if (P2PHASE(off, dn->dn_datablksz) || len < dn->dn_datablksz) {
334 err = dmu_tx_check_ioerr(zio, dn, 0, start);
372 dmu_tx_hold_write_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, int len)
380 txh = dmu_tx_hold_dnode_impl(tx, dn, THT_WRITE, off, len);
409 dmu_tx_hold_append_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, int len)
416 txh = dmu_tx_hold_dnode_impl(tx, dn, THT_APPEND, off, DMU_OBJECT_END);
441 dnode_t *dn = txh->txh_dnode;
446 if (off >= (dn->dn_maxblkid + 1) * dn->dn_datablksz)
449 len = (dn->dn_maxblkid + 1) * dn->dn_datablksz - off;
460 if (dn->dn_datablkshift == 0) {
461 if (off != 0 || len < dn->dn_datablksz)
462 dmu_tx_count_write(txh, 0, dn->dn_datablksz);
465 if (!IS_P2ALIGNED(off, 1 << dn->dn_datablkshift))
468 if (!IS_P2ALIGNED(off + len, 1 << dn->dn_datablkshift))
475 if (dn->dn_nlevels > 1) {
476 int shift = dn->dn_datablkshift + dn->dn_indblkshift -
481 ASSERT(dn->dn_indblkshift != 0);
488 if (dn->dn_datablkshift == 0)
495 err = dnode_next_offset(dn, 0, &ibyte, 2, 1, 0);
506 1 << dn->dn_indblkshift, FTAG);
508 err = dmu_tx_check_ioerr(zio, dn, 1, i);
537 dmu_tx_hold_free_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, uint64_t len)
541 txh = dmu_tx_hold_dnode_impl(tx, dn, THT_FREE, off, len);
559 dmu_tx_hold_clone_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off, int len)
566 txh = dmu_tx_hold_dnode_impl(tx, dn, THT_CLONE, off, len);
577 dnode_t *dn = txh->txh_dnode;
596 if (dn == NULL)
599 ASSERT3U(DMU_OT_BYTESWAP(dn->dn_type), ==, DMU_BSWAP_ZAP);
601 if (dn->dn_maxblkid == 0 || name == NULL) {
606 err = dmu_tx_check_ioerr(NULL, dn, 0, 0);
616 err = zap_lookup_by_dnode(dn, name, 8, 0, NULL);
637 dmu_tx_hold_zap_by_dnode(dmu_tx_t *tx, dnode_t *dn, int add, const char *name)
642 ASSERT(dn != NULL);
644 txh = dmu_tx_hold_dnode_impl(tx, dn, THT_ZAP, add, (uintptr_t)name);
663 dmu_tx_hold_bonus_by_dnode(dmu_tx_t *tx, dnode_t *dn)
669 txh = dmu_tx_hold_dnode_impl(tx, dn, THT_BONUS, 0, 0);
697 dnode_t *dn = DB_DNODE(db);
699 ASSERT(tx->tx_objset == NULL || dn->dn_objset == tx->tx_objset);
700 ASSERT3U(dn->dn_object, ==, db->db.db_object);
715 ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg);
716 if (txh->txh_dnode == dn && txh->txh_type != THT_NEWOBJECT)
718 if (txh->txh_dnode == NULL || txh->txh_dnode == dn) {
719 int datablkshift = dn->dn_datablkshift ?
720 dn->dn_datablkshift : SPA_MAXBLOCKSHIFT;
721 int epbs = dn->dn_indblkshift - SPA_BLKPTRSHIFT;
1076 dnode_t *dn = txh->txh_dnode;
1077 if (dn != NULL) {
1095 ASSERT(!RW_WRITE_HELD(&dn->dn_struct_rwlock));
1097 mutex_enter(&dn->dn_mtx);
1098 if (dn->dn_assigned_txg == tx->tx_txg - 1) {
1099 mutex_exit(&dn->dn_mtx);
1104 if (dn->dn_assigned_txg == 0)
1105 dn->dn_assigned_txg = tx->tx_txg;
1106 ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg);
1107 (void) zfs_refcount_add(&dn->dn_tx_holds, tx);
1108 mutex_exit(&dn->dn_mtx);
1146 dnode_t *dn = txh->txh_dnode;
1148 if (dn == NULL)
1150 mutex_enter(&dn->dn_mtx);
1151 ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg);
1153 if (zfs_refcount_remove(&dn->dn_tx_holds, tx) == 0) {
1154 dn->dn_assigned_txg = 0;
1155 cv_broadcast(&dn->dn_notxholds);
1157 mutex_exit(&dn->dn_mtx);
1280 dnode_t *dn = tx->tx_needassign_txh->txh_dnode;
1282 mutex_enter(&dn->dn_mtx);
1283 while (dn->dn_assigned_txg == tx->tx_lasttried_txg - 1)
1284 cv_wait(&dn->dn_notxholds, &dn->dn_mtx);
1285 mutex_exit(&dn->dn_mtx);
1305 dnode_t *dn = txh->txh_dnode;
1313 if (dn != NULL)
1314 dnode_rele(dn, tx);
1333 dnode_t *dn = txh->txh_dnode;
1335 if (dn == NULL)
1338 mutex_enter(&dn->dn_mtx);
1339 ASSERT3U(dn->dn_assigned_txg, ==, tx->tx_txg);
1341 if (zfs_refcount_remove(&dn->dn_tx_holds, tx) == 0) {
1342 dn->dn_assigned_txg = 0;
1343 cv_broadcast(&dn->dn_notxholds);
1345 mutex_exit(&dn->dn_mtx);