@@ -592,6 +592,13 @@ anyraid_open_existing(vdev_t *vd, uint64_t child, uint16_t **child_capacities)
592592 map_buf = abd_borrow_buf (map_abds [next_map ],
593593 SPA_MAXBLOCKSIZE );
594594 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
595602 }
596603 anyraid_map_entry_t * entry =
597604 (anyraid_map_entry_t * )(map_buf + (off % SPA_MAXBLOCKSIZE ));
@@ -1244,9 +1251,16 @@ anyraid_map_write_done(zio_t *zio)
12441251}
12451252
12461253static 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 )
12491257{
1258+ #ifdef _ZFS_BIG_ENDIAN
1259+ byteswap_uint32_array (abd , length );
1260+ #else
1261+ (void ) length ;
1262+ #endif
1263+
12501264 zio_nowait (zio_write_phys (zio , vd , base_offset +
12511265 idx * VDEV_ANYRAID_MAP_SIZE +
12521266 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,
13171331 break ;
13181332 abd_return_buf_copy (map_abd , buf , SPA_MAXBLOCKSIZE );
13191333 map_write_issue (zio , vd , base_offset , written ,
1320- map_abd , & cksums [written ], flags );
1334+ buf_offset , map_abd , & cksums [written ], flags );
13211335
13221336 map_abd = abd_alloc_linear (SPA_MAXBLOCKSIZE , B_TRUE );
13231337 written ++ ;
@@ -1352,7 +1366,7 @@ vdev_anyraid_write_map_sync(vdev_t *vd, zio_t *pio, uint64_t txg,
13521366 rw_exit (& var -> vd_lock );
13531367
13541368 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 ,
13561370 & cksums [written ], flags );
13571371
13581372 if (zio_wait (zio ))
@@ -1385,7 +1399,9 @@ vdev_anyraid_write_map_sync(vdev_t *vd, zio_t *pio, uint64_t txg,
13851399 var -> vd_checkpoint_tile );
13861400 }
13871401 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 ));
13891405 ASSERT3U (packed_size , < , nvl_bytes );
13901406 memcpy (header_buf , packed , packed_size );
13911407 fnvlist_pack_free (packed , packed_size );
0 commit comments