int dmu_set_bonus(dmu_buf_t *db, int newsize, dmu_tx_t *tx) { dnode_t *dn = ((dmu_buf_impl_t *)db)->db_dnode; if (dn->dn_bonus != (dmu_buf_impl_t *)db) return (EINVAL); if (newsize < 0 || newsize > db->db_size) return (EINVAL); dnode_setbonuslen(dn, newsize, tx); return (0); }
int dmu_set_bonus(dmu_buf_t *db_fake, int newsize, dmu_tx_t *tx) { dmu_buf_impl_t *db = (dmu_buf_impl_t *)db_fake; dnode_t *dn; int error; DB_DNODE_ENTER(db); dn = DB_DNODE(db); if (dn->dn_bonus != db) { error = SET_ERROR(EINVAL); } else if (newsize < 0 || newsize > db_fake->db_size) { error = SET_ERROR(EINVAL); } else { dnode_setbonuslen(dn, newsize, tx); error = 0; } DB_DNODE_EXIT(db); return (error); }