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 |