usr/src/cmd/zstreamdump/zstreamdump.c
changeset 11007 216d8396182e
parent 10602 21d184667b7e
child 11381 c77e4d2b2e75
equal deleted inserted replaced
11006:4fe66eb82610 11007:216d8396182e
    84 	struct drr_begin *drrb = &thedrr.drr_u.drr_begin;
    84 	struct drr_begin *drrb = &thedrr.drr_u.drr_begin;
    85 	struct drr_end *drre = &thedrr.drr_u.drr_end;
    85 	struct drr_end *drre = &thedrr.drr_u.drr_end;
    86 	struct drr_object *drro = &thedrr.drr_u.drr_object;
    86 	struct drr_object *drro = &thedrr.drr_u.drr_object;
    87 	struct drr_freeobjects *drrfo = &thedrr.drr_u.drr_freeobjects;
    87 	struct drr_freeobjects *drrfo = &thedrr.drr_u.drr_freeobjects;
    88 	struct drr_write *drrw = &thedrr.drr_u.drr_write;
    88 	struct drr_write *drrw = &thedrr.drr_u.drr_write;
       
    89 	struct drr_write_byref *drrwbr = &thedrr.drr_u.drr_write_byref;
    89 	struct drr_free *drrf = &thedrr.drr_u.drr_free;
    90 	struct drr_free *drrf = &thedrr.drr_u.drr_free;
    90 	char c;
    91 	char c;
    91 	boolean_t verbose = B_FALSE;
    92 	boolean_t verbose = B_FALSE;
    92 	boolean_t first = B_TRUE;
    93 	boolean_t first = B_TRUE;
    93 	int i, err;
    94 	int i, err;
   170 
   171 
   171 		switch (drr->drr_type) {
   172 		switch (drr->drr_type) {
   172 		case DRR_BEGIN:
   173 		case DRR_BEGIN:
   173 			if (do_byteswap) {
   174 			if (do_byteswap) {
   174 				drrb->drr_magic = BSWAP_64(drrb->drr_magic);
   175 				drrb->drr_magic = BSWAP_64(drrb->drr_magic);
   175 				drrb->drr_version = BSWAP_64(drrb->drr_version);
   176 				drrb->drr_versioninfo =
       
   177 				    BSWAP_64(drrb->drr_versioninfo);
   176 				drrb->drr_creation_time =
   178 				drrb->drr_creation_time =
   177 				    BSWAP_64(drrb->drr_creation_time);
   179 				    BSWAP_64(drrb->drr_creation_time);
   178 				drrb->drr_type = BSWAP_32(drrb->drr_type);
   180 				drrb->drr_type = BSWAP_32(drrb->drr_type);
   179 				drrb->drr_flags = BSWAP_32(drrb->drr_flags);
   181 				drrb->drr_flags = BSWAP_32(drrb->drr_flags);
   180 				drrb->drr_toguid = BSWAP_64(drrb->drr_toguid);
   182 				drrb->drr_toguid = BSWAP_64(drrb->drr_toguid);
   181 				drrb->drr_fromguid =
   183 				drrb->drr_fromguid =
   182 				    BSWAP_64(drrb->drr_fromguid);
   184 				    BSWAP_64(drrb->drr_fromguid);
   183 			}
   185 			}
   184 
   186 
   185 			(void) printf("BEGIN record\n");
   187 			(void) printf("BEGIN record\n");
   186 			(void) printf("\tversion = %llx\n",
   188 			(void) printf("\thdrtype = %lld\n",
   187 			    (u_longlong_t)drrb->drr_version);
   189 			    DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo));
       
   190 			(void) printf("\tfeatures = %llx\n",
       
   191 			    DMU_GET_FEATUREFLAGS(drrb->drr_versioninfo));
   188 			(void) printf("\tmagic = %llx\n",
   192 			(void) printf("\tmagic = %llx\n",
   189 			    (u_longlong_t)drrb->drr_magic);
   193 			    (u_longlong_t)drrb->drr_magic);
   190 			(void) printf("\tcreation_time = %llx\n",
   194 			(void) printf("\tcreation_time = %llx\n",
   191 			    (u_longlong_t)drrb->drr_creation_time);
   195 			    (u_longlong_t)drrb->drr_creation_time);
   192 			(void) printf("\ttype = %u\n", drrb->drr_type);
   196 			(void) printf("\ttype = %u\n", drrb->drr_type);
   197 			    (u_longlong_t)drrb->drr_fromguid);
   201 			    (u_longlong_t)drrb->drr_fromguid);
   198 			(void) printf("\ttoname = %s\n", drrb->drr_toname);
   202 			(void) printf("\ttoname = %s\n", drrb->drr_toname);
   199 			if (verbose)
   203 			if (verbose)
   200 				(void) printf("\n");
   204 				(void) printf("\n");
   201 
   205 
   202 			if (drrb->drr_version == 2 &&
   206 			if ((DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo) ==
   203 			    drr->drr_payloadlen != 0) {
   207 			    DMU_COMPOUNDSTREAM) && drr->drr_payloadlen != 0) {
   204 				nvlist_t *nv;
   208 				nvlist_t *nv;
   205 				int sz = drr->drr_payloadlen;
   209 				int sz = drr->drr_payloadlen;
   206 
   210 
   207 				if (sz > 1<<20) {
   211 				if (sz > 1<<20) {
   208 					free(buf);
   212 					free(buf);
   262 				drro->drr_bonustype =
   266 				drro->drr_bonustype =
   263 				    BSWAP_32(drro->drr_bonustype);
   267 				    BSWAP_32(drro->drr_bonustype);
   264 				drro->drr_blksz = BSWAP_32(drro->drr_blksz);
   268 				drro->drr_blksz = BSWAP_32(drro->drr_blksz);
   265 				drro->drr_bonuslen =
   269 				drro->drr_bonuslen =
   266 				    BSWAP_32(drro->drr_bonuslen);
   270 				    BSWAP_32(drro->drr_bonuslen);
       
   271 				drro->drr_toguid = BSWAP_64(drro->drr_toguid);
   267 			}
   272 			}
   268 			if (verbose) {
   273 			if (verbose) {
   269 				(void) printf("OBJECT object = %llu type = %u "
   274 				(void) printf("OBJECT object = %llu type = %u "
   270 				    "bonustype = %u blksz = %u bonuslen = %u\n",
   275 				    "bonustype = %u blksz = %u bonuslen = %u\n",
   271 				    (u_longlong_t)drro->drr_object,
   276 				    (u_longlong_t)drro->drr_object,
   284 			if (do_byteswap) {
   289 			if (do_byteswap) {
   285 				drrfo->drr_firstobj =
   290 				drrfo->drr_firstobj =
   286 				    BSWAP_64(drrfo->drr_firstobj);
   291 				    BSWAP_64(drrfo->drr_firstobj);
   287 				drrfo->drr_numobjs =
   292 				drrfo->drr_numobjs =
   288 				    BSWAP_64(drrfo->drr_numobjs);
   293 				    BSWAP_64(drrfo->drr_numobjs);
       
   294 				drrfo->drr_toguid = BSWAP_64(drrfo->drr_toguid);
   289 			}
   295 			}
   290 			if (verbose) {
   296 			if (verbose) {
   291 				(void) printf("FREEOBJECTS firstobj = %llu "
   297 				(void) printf("FREEOBJECTS firstobj = %llu "
   292 				    "numobjs = %llu\n",
   298 				    "numobjs = %llu\n",
   293 				    (u_longlong_t)drrfo->drr_firstobj,
   299 				    (u_longlong_t)drrfo->drr_firstobj,
   299 			if (do_byteswap) {
   305 			if (do_byteswap) {
   300 				drrw->drr_object = BSWAP_64(drrw->drr_object);
   306 				drrw->drr_object = BSWAP_64(drrw->drr_object);
   301 				drrw->drr_type = BSWAP_32(drrw->drr_type);
   307 				drrw->drr_type = BSWAP_32(drrw->drr_type);
   302 				drrw->drr_offset = BSWAP_64(drrw->drr_offset);
   308 				drrw->drr_offset = BSWAP_64(drrw->drr_offset);
   303 				drrw->drr_length = BSWAP_64(drrw->drr_length);
   309 				drrw->drr_length = BSWAP_64(drrw->drr_length);
       
   310 				drrw->drr_toguid = BSWAP_64(drrw->drr_toguid);
   304 			}
   311 			}
   305 			if (verbose) {
   312 			if (verbose) {
   306 				(void) printf("WRITE object = %llu type = %u "
   313 				(void) printf("WRITE object = %llu type = %u "
   307 				    "offset = %llu length = %llu\n",
   314 				    "offset = %llu length = %llu\n",
   308 				    (u_longlong_t)drrw->drr_object,
   315 				    (u_longlong_t)drrw->drr_object,
   310 				    (u_longlong_t)drrw->drr_offset,
   317 				    (u_longlong_t)drrw->drr_offset,
   311 				    (u_longlong_t)drrw->drr_length);
   318 				    (u_longlong_t)drrw->drr_length);
   312 			}
   319 			}
   313 			(void) ssread(buf, drrw->drr_length, &zc);
   320 			(void) ssread(buf, drrw->drr_length, &zc);
   314 			total_write_size += drrw->drr_length;
   321 			total_write_size += drrw->drr_length;
       
   322 			break;
       
   323 
       
   324 		case DRR_WRITE_BYREF:
       
   325 			if (do_byteswap) {
       
   326 				drrwbr->drr_object =
       
   327 				    BSWAP_64(drrwbr->drr_object);
       
   328 				drrwbr->drr_offset =
       
   329 				    BSWAP_64(drrwbr->drr_offset);
       
   330 				drrwbr->drr_length =
       
   331 				    BSWAP_64(drrwbr->drr_length);
       
   332 				drrwbr->drr_toguid =
       
   333 				    BSWAP_64(drrwbr->drr_toguid);
       
   334 				drrwbr->drr_refguid =
       
   335 				    BSWAP_64(drrwbr->drr_refguid);
       
   336 				drrwbr->drr_refobject =
       
   337 				    BSWAP_64(drrwbr->drr_refobject);
       
   338 				drrwbr->drr_refoffset =
       
   339 				    BSWAP_64(drrwbr->drr_refoffset);
       
   340 			}
       
   341 			if (verbose) {
       
   342 				(void) printf("WRITE_BYREF object = %llu "
       
   343 				    "offset = %llu length = %llu\n"
       
   344 				    "toguid = %llx refguid = %llx\n"
       
   345 				    "refobject = %llu refoffset = %llu\n",
       
   346 				    (u_longlong_t)drrwbr->drr_object,
       
   347 				    (u_longlong_t)drrwbr->drr_offset,
       
   348 				    (u_longlong_t)drrwbr->drr_length,
       
   349 				    (u_longlong_t)drrwbr->drr_toguid,
       
   350 				    (u_longlong_t)drrwbr->drr_refguid,
       
   351 				    (u_longlong_t)drrwbr->drr_refobject,
       
   352 				    (u_longlong_t)drrwbr->drr_refoffset);
       
   353 			}
   315 			break;
   354 			break;
   316 
   355 
   317 		case DRR_FREE:
   356 		case DRR_FREE:
   318 			if (do_byteswap) {
   357 			if (do_byteswap) {
   319 				drrf->drr_object = BSWAP_64(drrf->drr_object);
   358 				drrf->drr_object = BSWAP_64(drrf->drr_object);