usr/src/cmd/mdb/common/modules/zfs/zfs.c
changeset 1732 9e3ae798af31
parent 1544 938876158511
child 1775 e51e26b432c0
equal deleted inserted replaced
1731:1efa8b3d1296 1732:9e3ae798af31
   403 /* ARGSUSED */
   403 /* ARGSUSED */
   404 static int
   404 static int
   405 blkptr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
   405 blkptr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
   406 {
   406 {
   407 	blkptr_t bp;
   407 	blkptr_t bp;
   408 	dva_t *dva;
       
   409 	dmu_object_type_info_t *doti;
   408 	dmu_object_type_info_t *doti;
   410 	zio_compress_info_t *zct;
   409 	zio_compress_info_t *zct;
   411 	zio_checksum_info_t *zci;
   410 	zio_checksum_info_t *zci;
   412 	int i;
   411 	int i;
   413 	char buf[MAXPATHLEN];
   412 	char buf[MAXPATHLEN];
   437 		mdb_readstr(buf, sizeof (buf), (uintptr_t)zct[i].ci_name);
   436 		mdb_readstr(buf, sizeof (buf), (uintptr_t)zct[i].ci_name);
   438 		zct[i].ci_name = local_strdup(buf);
   437 		zct[i].ci_name = local_strdup(buf);
   439 	}
   438 	}
   440 
   439 
   441 	for (i = 0; i < SPA_DVAS_PER_BP; i++) {
   440 	for (i = 0; i < SPA_DVAS_PER_BP; i++) {
   442 		dva = &bp.blk_dva[i];
   441 		dva_t *dva = &bp.blk_dva[i];
   443 		mdb_printf("DVA[%d]: vdev_id %lld / %llx\n", i,
   442 		mdb_printf("DVA[%d]: GANG: %-5s  GRID: %2x  ASIZE: %5x  "
   444 		    DVA_GET_VDEV(dva), DVA_GET_OFFSET(dva));
   443 		    "vdev %llu  offset %llx\n",
   445 		mdb_printf("DVA[%d]:                    GRID:  %04x\t"
   444 		    i,
   446 		    "ASIZE: %llx\n", i, DVA_GET_GRID(dva), DVA_GET_ASIZE(dva));
   445 		    DVA_GET_GANG(dva) ? "TRUE" : "FALSE",
       
   446 		    DVA_GET_GRID(dva),
       
   447 		    DVA_GET_ASIZE(dva),
       
   448 		    DVA_GET_VDEV(dva),
       
   449 		    DVA_GET_OFFSET(dva));
   447 	}
   450 	}
   448 	mdb_printf("LSIZE:  %-16llx\t\tPSIZE: %llx\n",
   451 	mdb_printf("LSIZE:  %-16llx\t\tPSIZE: %llx\n",
   449 	    BP_GET_LSIZE(&bp), BP_GET_PSIZE(&bp));
   452 	    BP_GET_LSIZE(&bp), BP_GET_PSIZE(&bp));
   450 	mdb_printf("ENDIAN: %6s             GANG:  %-5s\tTYPE:  %s\n",
   453 	mdb_printf("ENDIAN: %-6s  TYPE: %s\n",
   451 	    BP_GET_BYTEORDER(&bp) ? "LITTLE" : "BIG",
   454 	    BP_GET_BYTEORDER(&bp) ? "LITTLE" : "BIG",
   452 	    DVA_GET_GANG(dva) ? "TRUE" : "FALSE",
       
   453 	    doti[BP_GET_TYPE(&bp)].ot_name);
   455 	    doti[BP_GET_TYPE(&bp)].ot_name);
   454 	mdb_printf("BIRTH:  %-16llx   LEVEL: %-2d\tFILL:  %llx\n",
   456 	mdb_printf("BIRTH:  %-16llx   LEVEL: %-2d\tFILL:  %llx\n",
   455 	    bp.blk_birth, BP_GET_LEVEL(&bp), bp.blk_fill);
   457 	    bp.blk_birth, BP_GET_LEVEL(&bp), bp.blk_fill);
   456 	mdb_printf("CKFUNC: %-16s\t\tCOMP:  %s\n",
   458 	mdb_printf("CKFUNC: %-16s\t\tCOMP:  %s\n",
   457 	    zci[BP_GET_CHECKSUM(&bp)].ci_name,
   459 	    zci[BP_GET_CHECKSUM(&bp)].ci_name,
  1144 
  1146 
  1145 typedef struct mdb_metaslab {
  1147 typedef struct mdb_metaslab {
  1146 	space_map_t ms_allocmap[TXG_SIZE];
  1148 	space_map_t ms_allocmap[TXG_SIZE];
  1147 	space_map_t ms_freemap[TXG_SIZE];
  1149 	space_map_t ms_freemap[TXG_SIZE];
  1148 	space_map_t ms_map;
  1150 	space_map_t ms_map;
  1149 	uint64_t ms_usable_space;
  1151 	space_map_obj_t ms_smo;
  1150 } mdb_metaslab_t;
  1152 } mdb_metaslab_t;
  1151 
  1153 
  1152 /*
  1154 /*
  1153  * ::spa_space [-b]
  1155  * ::spa_space [-b]
  1154  *
  1156  *
  1168 	uintptr_t childaddr;
  1170 	uintptr_t childaddr;
  1169 	uintptr_t *child;
  1171 	uintptr_t *child;
  1170 	uint64_t ms_allocmap[TXG_SIZE] = {0, 0, 0, 0};
  1172 	uint64_t ms_allocmap[TXG_SIZE] = {0, 0, 0, 0};
  1171 	uint64_t ms_freemap[TXG_SIZE] = {0, 0, 0, 0};
  1173 	uint64_t ms_freemap[TXG_SIZE] = {0, 0, 0, 0};
  1172 	uint64_t ms_map = 0;
  1174 	uint64_t ms_map = 0;
  1173 	uint64_t ms_usable_space = 0;
  1175 	uint64_t avail = 0;
  1174 	int i, j;
  1176 	int i, j;
  1175 	int havecompressed = TRUE;
  1177 	int havecompressed = TRUE;
  1176 	int shift = 20;
  1178 	int shift = 20;
  1177 	char *suffix = "M";
  1179 	char *suffix = "M";
  1178 	int bits = FALSE;
  1180 	int bits = FALSE;
  1280 			    GETMEMB(vdev_ms[j], struct metaslab,
  1282 			    GETMEMB(vdev_ms[j], struct metaslab,
  1281 			    ms_freemap, ms.ms_freemap) ||
  1283 			    ms_freemap, ms.ms_freemap) ||
  1282 			    GETMEMB(vdev_ms[j], struct metaslab,
  1284 			    GETMEMB(vdev_ms[j], struct metaslab,
  1283 			    ms_map, ms.ms_map) ||
  1285 			    ms_map, ms.ms_map) ||
  1284 			    GETMEMB(vdev_ms[j], struct metaslab,
  1286 			    GETMEMB(vdev_ms[j], struct metaslab,
  1285 			    ms_usable_space, ms.ms_usable_space)) {
  1287 			    ms_smo, ms.ms_smo)) {
  1286 				return (DCMD_ERR);
  1288 				return (DCMD_ERR);
  1287 			}
  1289 			}
  1288 
  1290 
  1289 			ms_allocmap[0] += ms.ms_allocmap[0].sm_space;
  1291 			ms_allocmap[0] += ms.ms_allocmap[0].sm_space;
  1290 			ms_allocmap[1] += ms.ms_allocmap[1].sm_space;
  1292 			ms_allocmap[1] += ms.ms_allocmap[1].sm_space;
  1293 			ms_freemap[0] += ms.ms_freemap[0].sm_space;
  1295 			ms_freemap[0] += ms.ms_freemap[0].sm_space;
  1294 			ms_freemap[1] += ms.ms_freemap[1].sm_space;
  1296 			ms_freemap[1] += ms.ms_freemap[1].sm_space;
  1295 			ms_freemap[2] += ms.ms_freemap[2].sm_space;
  1297 			ms_freemap[2] += ms.ms_freemap[2].sm_space;
  1296 			ms_freemap[3] += ms.ms_freemap[3].sm_space;
  1298 			ms_freemap[3] += ms.ms_freemap[3].sm_space;
  1297 			ms_map += ms.ms_map.sm_space;
  1299 			ms_map += ms.ms_map.sm_space;
  1298 			ms_usable_space += ms.ms_usable_space;
  1300 			avail += ms.ms_map.sm_size - ms.ms_smo.smo_alloc;
  1299 		}
  1301 		}
  1300 	}
  1302 	}
  1301 
  1303 
  1302 	mdb_printf("ms_allocmap = %llu%s %llu%s %llu%s %llu%s\n",
  1304 	mdb_printf("ms_allocmap = %llu%s %llu%s %llu%s %llu%s\n",
  1303 	    ms_allocmap[0] >> shift, suffix,
  1305 	    ms_allocmap[0] >> shift, suffix,
  1308 	    ms_freemap[0] >> shift, suffix,
  1310 	    ms_freemap[0] >> shift, suffix,
  1309 	    ms_freemap[1] >> shift, suffix,
  1311 	    ms_freemap[1] >> shift, suffix,
  1310 	    ms_freemap[2] >> shift, suffix,
  1312 	    ms_freemap[2] >> shift, suffix,
  1311 	    ms_freemap[3] >> shift, suffix);
  1313 	    ms_freemap[3] >> shift, suffix);
  1312 	mdb_printf("ms_map = %llu%s\n", ms_map >> shift, suffix);
  1314 	mdb_printf("ms_map = %llu%s\n", ms_map >> shift, suffix);
  1313 	mdb_printf("ms_usable_space = %llu%s\n",
  1315 	mdb_printf("avail = %llu%s\n", avail >> shift, suffix);
  1314 	    ms_usable_space >> shift, suffix);
       
  1315 
  1316 
  1316 	return (DCMD_OK);
  1317 	return (DCMD_OK);
  1317 }
  1318 }
  1318 
  1319 
  1319 /*
  1320 /*