usr/src/uts/common/fs/zfs/dnode_sync.c
changeset 13764 38b4aca480b3
parent 13700 2889e2596bd6
child 13765 9410cf539b11
equal deleted inserted replaced
13763:0a4839ba58c3 13764:38b4aca480b3
   272 	for (i = start; i <= end; i++, bp++) {
   272 	for (i = start; i <= end; i++, bp++) {
   273 		if (BP_IS_HOLE(bp))
   273 		if (BP_IS_HOLE(bp))
   274 			continue;
   274 			continue;
   275 		rw_enter(&dn->dn_struct_rwlock, RW_READER);
   275 		rw_enter(&dn->dn_struct_rwlock, RW_READER);
   276 		err = dbuf_hold_impl(dn, db->db_level-1, i, TRUE, FTAG, &subdb);
   276 		err = dbuf_hold_impl(dn, db->db_level-1, i, TRUE, FTAG, &subdb);
   277 		ASSERT3U(err, ==, 0);
   277 		ASSERT0(err);
   278 		rw_exit(&dn->dn_struct_rwlock);
   278 		rw_exit(&dn->dn_struct_rwlock);
   279 
   279 
   280 		if (free_children(subdb, blkid, nblks, trunc, tx) == ALL) {
   280 		if (free_children(subdb, blkid, nblks, trunc, tx) == ALL) {
   281 			ASSERT3P(subdb->db_blkptr, ==, bp);
   281 			ASSERT3P(subdb->db_blkptr, ==, bp);
   282 			blocks_freed += free_blocks(dn, bp, 1, tx);
   282 			blocks_freed += free_blocks(dn, bp, 1, tx);
   292 	for (i = start; i <= end; i++, bp++) {
   292 	for (i = start; i <= end; i++, bp++) {
   293 		if (i == start && blkid != 0)
   293 		if (i == start && blkid != 0)
   294 			continue;
   294 			continue;
   295 		else if (i == end && !trunc)
   295 		else if (i == end && !trunc)
   296 			continue;
   296 			continue;
   297 		ASSERT3U(bp->blk_birth, ==, 0);
   297 		ASSERT0(bp->blk_birth);
   298 	}
   298 	}
   299 #endif
   299 #endif
   300 	ASSERT(all || blocks_freed == 0 || db->db_last_dirty);
   300 	ASSERT(all || blocks_freed == 0 || db->db_last_dirty);
   301 	return (all ? ALL : blocks_freed);
   301 	return (all ? ALL : blocks_freed);
   302 }
   302 }
   348 	for (i = start; i <= end; i++, bp++) {
   348 	for (i = start; i <= end; i++, bp++) {
   349 		if (BP_IS_HOLE(bp))
   349 		if (BP_IS_HOLE(bp))
   350 			continue;
   350 			continue;
   351 		rw_enter(&dn->dn_struct_rwlock, RW_READER);
   351 		rw_enter(&dn->dn_struct_rwlock, RW_READER);
   352 		err = dbuf_hold_impl(dn, dnlevel-1, i, TRUE, FTAG, &db);
   352 		err = dbuf_hold_impl(dn, dnlevel-1, i, TRUE, FTAG, &db);
   353 		ASSERT3U(err, ==, 0);
   353 		ASSERT0(err);
   354 		rw_exit(&dn->dn_struct_rwlock);
   354 		rw_exit(&dn->dn_struct_rwlock);
   355 
   355 
   356 		if (free_children(db, blkid, nblks, trunc, tx) == ALL) {
   356 		if (free_children(db, blkid, nblks, trunc, tx) == ALL) {
   357 			ASSERT3P(db->db_blkptr, ==, bp);
   357 			ASSERT3P(db->db_blkptr, ==, bp);
   358 			(void) free_blocks(dn, bp, 1, tx);
   358 			(void) free_blocks(dn, bp, 1, tx);
   469 
   469 
   470 	/*
   470 	/*
   471 	 * Our contents should have been freed in dnode_sync() by the
   471 	 * Our contents should have been freed in dnode_sync() by the
   472 	 * free range record inserted by the caller of dnode_free().
   472 	 * free range record inserted by the caller of dnode_free().
   473 	 */
   473 	 */
   474 	ASSERT3U(DN_USED_BYTES(dn->dn_phys), ==, 0);
   474 	ASSERT0(DN_USED_BYTES(dn->dn_phys));
   475 	ASSERT(BP_IS_HOLE(dn->dn_phys->dn_blkptr));
   475 	ASSERT(BP_IS_HOLE(dn->dn_phys->dn_blkptr));
   476 
   476 
   477 	dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]);
   477 	dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]);
   478 	dnode_evict_dbufs(dn);
   478 	dnode_evict_dbufs(dn);
   479 	ASSERT3P(list_head(&dn->dn_dbufs), ==, NULL);
   479 	ASSERT3P(list_head(&dn->dn_dbufs), ==, NULL);