@@ -592,6 +592,13 @@ anyraid_open_existing(vdev_t *vd, uint64_t child, uint16_t **child_capacities)
592
592
map_buf = abd_borrow_buf (map_abds [next_map ],
593
593
SPA_MAXBLOCKSIZE );
594
594
map = next_map ;
595
+
596
+ #ifdef _ZFS_BIG_ENDIAN
597
+ uint32_t length = map_length -
598
+ next_map * SPA_MAXBLOCKSIZE ;
599
+ byteswap_uint32_array (map_buf , length <
600
+ SPA_MAXBLOCKSIZE ? length : SPA_MAXBLOCKSIZE );
601
+ #endif
595
602
}
596
603
anyraid_map_entry_t * entry =
597
604
(anyraid_map_entry_t * )(map_buf + (off % SPA_MAXBLOCKSIZE ));
@@ -1244,9 +1251,16 @@ anyraid_map_write_done(zio_t *zio)
1244
1251
}
1245
1252
1246
1253
static void
1247
- map_write_issue (zio_t * zio , vdev_t * vd , uint64_t base_offset , uint8_t idx ,
1248
- abd_t * abd , zio_eck_t * cksum_out , int flags )
1254
+ map_write_issue (zio_t * zio , vdev_t * vd , uint64_t base_offset ,
1255
+ uint8_t idx , uint32_t length , abd_t * abd , zio_eck_t * cksum_out ,
1256
+ int flags )
1249
1257
{
1258
+ #ifdef _ZFS_BIG_ENDIAN
1259
+ byteswap_uint32_array (abd , length );
1260
+ #else
1261
+ (void ) length ;
1262
+ #endif
1263
+
1250
1264
zio_nowait (zio_write_phys (zio , vd , base_offset +
1251
1265
idx * VDEV_ANYRAID_MAP_SIZE +
1252
1266
VDEV_ANYRAID_MAP_HEADER_SIZE (vd -> vdev_ashift ), SPA_MAXBLOCKSIZE ,
@@ -1317,7 +1331,7 @@ vdev_anyraid_write_map_sync(vdev_t *vd, zio_t *pio, uint64_t txg,
1317
1331
break ;
1318
1332
abd_return_buf_copy (map_abd , buf , SPA_MAXBLOCKSIZE );
1319
1333
map_write_issue (zio , vd , base_offset , written ,
1320
- map_abd , & cksums [written ], flags );
1334
+ buf_offset , map_abd , & cksums [written ], flags );
1321
1335
1322
1336
map_abd = abd_alloc_linear (SPA_MAXBLOCKSIZE , B_TRUE );
1323
1337
written ++ ;
@@ -1352,7 +1366,7 @@ vdev_anyraid_write_map_sync(vdev_t *vd, zio_t *pio, uint64_t txg,
1352
1366
rw_exit (& var -> vd_lock );
1353
1367
1354
1368
abd_return_buf_copy (map_abd , buf , SPA_MAXBLOCKSIZE );
1355
- map_write_issue (zio , vd , base_offset , written , map_abd ,
1369
+ map_write_issue (zio , vd , base_offset , written , buf_offset , map_abd ,
1356
1370
& cksums [written ], flags );
1357
1371
1358
1372
if (zio_wait (zio ))
@@ -1385,7 +1399,9 @@ vdev_anyraid_write_map_sync(vdev_t *vd, zio_t *pio, uint64_t txg,
1385
1399
var -> vd_checkpoint_tile );
1386
1400
}
1387
1401
size_t packed_size ;
1388
- char * packed = fnvlist_pack (header , & packed_size );
1402
+ char * packed ;
1403
+ VERIFY0 (nvlist_pack (header , & packed , & packed_size , NV_ENCODE_XDR ,
1404
+ KM_SLEEP ));
1389
1405
ASSERT3U (packed_size , < , nvl_bytes );
1390
1406
memcpy (header_buf , packed , packed_size );
1391
1407
fnvlist_pack_free (packed , packed_size );
0 commit comments