usr/src/cmd/zdb/zdb.c
changeset 10298 a0d52501437c
parent 10242 c40d075fbca6
child 10594 986cb68d2347
equal deleted inserted replaced
10297:614c29db4bc4 10298:a0d52501437c
   722 	int j;
   722 	int j;
   723 	zbookmark_t czb;
   723 	zbookmark_t czb;
   724 
   724 
   725 	(void) printf("Indirect blocks:\n");
   725 	(void) printf("Indirect blocks:\n");
   726 
   726 
   727 	SET_BOOKMARK(&czb, dmu_objset_id(&dn->dn_objset->os),
   727 	SET_BOOKMARK(&czb, dmu_objset_id(dn->dn_objset),
   728 	    dn->dn_object, dnp->dn_nlevels - 1, 0);
   728 	    dn->dn_object, dnp->dn_nlevels - 1, 0);
   729 	for (j = 0; j < dnp->dn_nblkptr; j++) {
   729 	for (j = 0; j < dnp->dn_nblkptr; j++) {
   730 		czb.zb_blkid = j;
   730 		czb.zb_blkid = j;
   731 		(void) visit_indirect(dmu_objset_spa(&dn->dn_objset->os), dnp,
   731 		(void) visit_indirect(dmu_objset_spa(dn->dn_objset), dnp,
   732 		    &dnp->dn_blkptr[j], &czb);
   732 		    &dnp->dn_blkptr[j], &czb);
   733 	}
   733 	}
   734 
   734 
   735 	(void) printf("\n");
   735 	(void) printf("\n");
   736 }
   736 }
  1071 		    "  asize  type\n");
  1071 		    "  asize  type\n");
  1072 		*print_header = 0;
  1072 		*print_header = 0;
  1073 	}
  1073 	}
  1074 
  1074 
  1075 	if (object == 0) {
  1075 	if (object == 0) {
  1076 		dn = os->os->os_meta_dnode;
  1076 		dn = os->os_meta_dnode;
  1077 	} else {
  1077 	} else {
  1078 		error = dmu_bonus_hold(os, object, FTAG, &db);
  1078 		error = dmu_bonus_hold(os, object, FTAG, &db);
  1079 		if (error)
  1079 		if (error)
  1080 			fatal("dmu_bonus_hold(%llu) failed, errno %u",
  1080 			fatal("dmu_bonus_hold(%llu) failed, errno %u",
  1081 			    object, error);
  1081 			    object, error);
  1189 	if (dds.dds_type < DMU_OST_NUMTYPES)
  1189 	if (dds.dds_type < DMU_OST_NUMTYPES)
  1190 		type = objset_types[dds.dds_type];
  1190 		type = objset_types[dds.dds_type];
  1191 
  1191 
  1192 	if (dds.dds_type == DMU_OST_META) {
  1192 	if (dds.dds_type == DMU_OST_META) {
  1193 		dds.dds_creation_txg = TXG_INITIAL;
  1193 		dds.dds_creation_txg = TXG_INITIAL;
  1194 		usedobjs = os->os->os_rootbp->blk_fill;
  1194 		usedobjs = os->os_rootbp->blk_fill;
  1195 		refdbytes = os->os->os_spa->spa_dsl_pool->
  1195 		refdbytes = os->os_spa->spa_dsl_pool->
  1196 		    dp_mos_dir->dd_phys->dd_used_bytes;
  1196 		    dp_mos_dir->dd_phys->dd_used_bytes;
  1197 	} else {
  1197 	} else {
  1198 		dmu_objset_space(os, &refdbytes, &scratch, &usedobjs, &scratch);
  1198 		dmu_objset_space(os, &refdbytes, &scratch, &usedobjs, &scratch);
  1199 	}
  1199 	}
  1200 
  1200 
  1201 	ASSERT3U(usedobjs, ==, os->os->os_rootbp->blk_fill);
  1201 	ASSERT3U(usedobjs, ==, os->os_rootbp->blk_fill);
  1202 
  1202 
  1203 	nicenum(refdbytes, numbuf);
  1203 	nicenum(refdbytes, numbuf);
  1204 
  1204 
  1205 	if (verbosity >= 4) {
  1205 	if (verbosity >= 4) {
  1206 		(void) sprintf(blkbuf + strlen(blkbuf), ", rootbp ");
  1206 		(void) sprintf(blkbuf + strlen(blkbuf), ", rootbp ");
  1207 		(void) sprintf_blkptr(blkbuf + strlen(blkbuf),
  1207 		(void) sprintf_blkptr(blkbuf + strlen(blkbuf),
  1208 		    BP_SPRINTF_LEN - strlen(blkbuf), os->os->os_rootbp);
  1208 		    BP_SPRINTF_LEN - strlen(blkbuf), os->os_rootbp);
  1209 	} else {
  1209 	} else {
  1210 		blkbuf[0] = '\0';
  1210 		blkbuf[0] = '\0';
  1211 	}
  1211 	}
  1212 
  1212 
  1213 	dmu_objset_name(os, osname);
  1213 	dmu_objset_name(os, osname);
  1225 		    dmu_objset_ds(os)->ds_phys->ds_deadlist_obj, "Deadlist");
  1225 		    dmu_objset_ds(os)->ds_phys->ds_deadlist_obj, "Deadlist");
  1226 
  1226 
  1227 	if (verbosity < 2)
  1227 	if (verbosity < 2)
  1228 		return;
  1228 		return;
  1229 
  1229 
  1230 	if (os->os->os_rootbp->blk_birth == 0)
  1230 	if (os->os_rootbp->blk_birth == 0)
  1231 		return;
  1231 		return;
  1232 
  1232 
  1233 	if (zopt_objects != 0) {
  1233 	if (zopt_objects != 0) {
  1234 		for (i = 0; i < zopt_objects; i++)
  1234 		for (i = 0; i < zopt_objects; i++)
  1235 			dump_object(os, zopt_object[i], verbosity,
  1235 			dump_object(os, zopt_object[i], verbosity,
  1238 		return;
  1238 		return;
  1239 	}
  1239 	}
  1240 
  1240 
  1241 	dump_object(os, 0, verbosity, &print_header);
  1241 	dump_object(os, 0, verbosity, &print_header);
  1242 	object_count = 0;
  1242 	object_count = 0;
  1243 	if (os->os->os_userused_dnode &&
  1243 	if (os->os_userused_dnode &&
  1244 	    os->os->os_userused_dnode->dn_type != 0) {
  1244 	    os->os_userused_dnode->dn_type != 0) {
  1245 		dump_object(os, DMU_USERUSED_OBJECT, verbosity, &print_header);
  1245 		dump_object(os, DMU_USERUSED_OBJECT, verbosity, &print_header);
  1246 		dump_object(os, DMU_GROUPUSED_OBJECT, verbosity, &print_header);
  1246 		dump_object(os, DMU_GROUPUSED_OBJECT, verbosity, &print_header);
  1247 	}
  1247 	}
  1248 
  1248 
  1249 	object = 0;
  1249 	object = 0;
  1396 dump_one_dir(char *dsname, void *arg)
  1396 dump_one_dir(char *dsname, void *arg)
  1397 {
  1397 {
  1398 	int error;
  1398 	int error;
  1399 	objset_t *os;
  1399 	objset_t *os;
  1400 
  1400 
  1401 	error = dmu_objset_open(dsname, DMU_OST_ANY,
  1401 	error = dmu_objset_own(dsname, DMU_OST_ANY, B_TRUE, FTAG, &os);
  1402 	    DS_MODE_USER | DS_MODE_READONLY, &os);
       
  1403 	if (error) {
  1402 	if (error) {
  1404 		(void) printf("Could not open %s\n", dsname);
  1403 		(void) printf("Could not open %s\n", dsname);
  1405 		return (0);
  1404 		return (0);
  1406 	}
  1405 	}
  1407 	dump_dir(os);
  1406 	dump_dir(os);
  1408 	dmu_objset_close(os);
  1407 	dmu_objset_disown(os, FTAG);
  1409 	fuid_table_destroy();
  1408 	fuid_table_destroy();
  1410 	return (0);
  1409 	return (0);
  1411 }
  1410 }
  1412 
  1411 
  1413 static void
  1412 static void
  2472 			*slash = '/';
  2471 			*slash = '/';
  2473 	}
  2472 	}
  2474 
  2473 
  2475 	if (error == 0) {
  2474 	if (error == 0) {
  2476 		if (strchr(argv[0], '/') != NULL) {
  2475 		if (strchr(argv[0], '/') != NULL) {
  2477 			error = dmu_objset_open(argv[0], DMU_OST_ANY,
  2476 			error = dmu_objset_own(argv[0], DMU_OST_ANY,
  2478 			    DS_MODE_USER | DS_MODE_READONLY, &os);
  2477 			    B_TRUE, FTAG, &os);
  2479 		} else {
  2478 		} else {
  2480 			error = spa_open(argv[0], &spa, FTAG);
  2479 			error = spa_open(argv[0], &spa, FTAG);
  2481 		}
  2480 		}
  2482 	}
  2481 	}
  2483 
  2482 
  2497 		}
  2496 		}
  2498 	}
  2497 	}
  2499 
  2498 
  2500 	if (os != NULL) {
  2499 	if (os != NULL) {
  2501 		dump_dir(os);
  2500 		dump_dir(os);
  2502 		dmu_objset_close(os);
  2501 		dmu_objset_disown(os, FTAG);
  2503 	} else {
  2502 	} else {
  2504 		dump_zpool(spa);
  2503 		dump_zpool(spa);
  2505 		spa_close(spa, FTAG);
  2504 		spa_close(spa, FTAG);
  2506 	}
  2505 	}
  2507 
  2506