Skip to content

Commit 2eee4ac

Browse files
Fix: draid autopkgtests fail on s390x architecture (Endianness Issue)
The ioctl call to create the pool was returning -1 with errno EINVAL. Inside the module code, inside vdev_draid.c, verify_perms is calling fletcher_4_native_varsize. This in turn calls fletcher_4_scalar_native. So, implemented a fletcher_4_byteswap_varsize which makes use of the fletcher_4_scalar_byteswap in Big endian machines. Reviewed-by: Andriy Tkachuk <andriy.tkachuk@gmail.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Pranav P <pranavsdreams@gmail.com> Closes #16261 Closes #18445
1 parent 513710e commit 2eee4ac

4 files changed

Lines changed: 150 additions & 7 deletions

File tree

include/zfs_fletcher.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ _ZFS_FLETCHER_H int fletcher_2_incremental_native(void *, size_t, void *);
6060
_ZFS_FLETCHER_H int fletcher_2_incremental_byteswap(void *, size_t, void *);
6161
_ZFS_FLETCHER_H void fletcher_4_native_varsize(const void *, uint64_t,
6262
zio_cksum_t *);
63+
_ZFS_FLETCHER_H void fletcher_4_byteswap_varsize(const void *, uint64_t,
64+
zio_cksum_t *);
6365
_ZFS_FLETCHER_H void fletcher_4_byteswap(const void *, uint64_t, const void *,
6466
zio_cksum_t *);
6567
_ZFS_FLETCHER_H int fletcher_4_incremental_native(void *, size_t, void *);

lib/libzfs/libzfs.abi

Lines changed: 137 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
<elf-symbol name='fletcher_2_incremental_native' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
190190
<elf-symbol name='fletcher_2_native' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
191191
<elf-symbol name='fletcher_4_byteswap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
192+
<elf-symbol name='fletcher_4_byteswap_varsize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
192193
<elf-symbol name='fletcher_4_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
193194
<elf-symbol name='fletcher_4_impl_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
194195
<elf-symbol name='fletcher_4_incremental_byteswap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -1668,8 +1669,103 @@
16681669
</function-decl>
16691670
</abi-instr>
16701671
<abi-instr address-size='64' path='lib/libspl/os/linux/mnttab.c' language='LANG_C99'>
1672+
<array-type-def dimensions='1' type-id='d315442e' size-in-bits='16' id='811205dc'>
1673+
<subrange length='1' type-id='7359adad' id='52f813b4'/>
1674+
</array-type-def>
1675+
<array-type-def dimensions='1' type-id='d3130597' size-in-bits='768' id='f63f23b9'>
1676+
<subrange length='12' type-id='7359adad' id='84827bdc'/>
1677+
</array-type-def>
1678+
<typedef-decl name='__u16' type-id='8efea9e5' id='d315442e'/>
1679+
<typedef-decl name='__s32' type-id='95e97e5e' id='3158a266'/>
1680+
<typedef-decl name='__u32' type-id='f0981eeb' id='3f1a6b60'/>
1681+
<typedef-decl name='__s64' type-id='1eb56b1e' id='49659421'/>
1682+
<typedef-decl name='__u64' type-id='3a47d82b' id='d3130597'/>
1683+
<class-decl name='statx_timestamp' size-in-bits='128' is-struct='yes' visibility='default' id='94101016'>
1684+
<data-member access='public' layout-offset-in-bits='0'>
1685+
<var-decl name='tv_sec' type-id='49659421' visibility='default'/>
1686+
</data-member>
1687+
<data-member access='public' layout-offset-in-bits='64'>
1688+
<var-decl name='tv_nsec' type-id='3f1a6b60' visibility='default'/>
1689+
</data-member>
1690+
<data-member access='public' layout-offset-in-bits='96'>
1691+
<var-decl name='__reserved' type-id='3158a266' visibility='default'/>
1692+
</data-member>
1693+
</class-decl>
1694+
<class-decl name='statx' size-in-bits='2048' is-struct='yes' visibility='default' id='720b04c5'>
1695+
<data-member access='public' layout-offset-in-bits='0'>
1696+
<var-decl name='stx_mask' type-id='3f1a6b60' visibility='default'/>
1697+
</data-member>
1698+
<data-member access='public' layout-offset-in-bits='32'>
1699+
<var-decl name='stx_blksize' type-id='3f1a6b60' visibility='default'/>
1700+
</data-member>
1701+
<data-member access='public' layout-offset-in-bits='64'>
1702+
<var-decl name='stx_attributes' type-id='d3130597' visibility='default'/>
1703+
</data-member>
1704+
<data-member access='public' layout-offset-in-bits='128'>
1705+
<var-decl name='stx_nlink' type-id='3f1a6b60' visibility='default'/>
1706+
</data-member>
1707+
<data-member access='public' layout-offset-in-bits='160'>
1708+
<var-decl name='stx_uid' type-id='3f1a6b60' visibility='default'/>
1709+
</data-member>
1710+
<data-member access='public' layout-offset-in-bits='192'>
1711+
<var-decl name='stx_gid' type-id='3f1a6b60' visibility='default'/>
1712+
</data-member>
1713+
<data-member access='public' layout-offset-in-bits='224'>
1714+
<var-decl name='stx_mode' type-id='d315442e' visibility='default'/>
1715+
</data-member>
1716+
<data-member access='public' layout-offset-in-bits='240'>
1717+
<var-decl name='__spare0' type-id='811205dc' visibility='default'/>
1718+
</data-member>
1719+
<data-member access='public' layout-offset-in-bits='256'>
1720+
<var-decl name='stx_ino' type-id='d3130597' visibility='default'/>
1721+
</data-member>
1722+
<data-member access='public' layout-offset-in-bits='320'>
1723+
<var-decl name='stx_size' type-id='d3130597' visibility='default'/>
1724+
</data-member>
1725+
<data-member access='public' layout-offset-in-bits='384'>
1726+
<var-decl name='stx_blocks' type-id='d3130597' visibility='default'/>
1727+
</data-member>
1728+
<data-member access='public' layout-offset-in-bits='448'>
1729+
<var-decl name='stx_attributes_mask' type-id='d3130597' visibility='default'/>
1730+
</data-member>
1731+
<data-member access='public' layout-offset-in-bits='512'>
1732+
<var-decl name='stx_atime' type-id='94101016' visibility='default'/>
1733+
</data-member>
1734+
<data-member access='public' layout-offset-in-bits='640'>
1735+
<var-decl name='stx_btime' type-id='94101016' visibility='default'/>
1736+
</data-member>
1737+
<data-member access='public' layout-offset-in-bits='768'>
1738+
<var-decl name='stx_ctime' type-id='94101016' visibility='default'/>
1739+
</data-member>
1740+
<data-member access='public' layout-offset-in-bits='896'>
1741+
<var-decl name='stx_mtime' type-id='94101016' visibility='default'/>
1742+
</data-member>
1743+
<data-member access='public' layout-offset-in-bits='1024'>
1744+
<var-decl name='stx_rdev_major' type-id='3f1a6b60' visibility='default'/>
1745+
</data-member>
1746+
<data-member access='public' layout-offset-in-bits='1056'>
1747+
<var-decl name='stx_rdev_minor' type-id='3f1a6b60' visibility='default'/>
1748+
</data-member>
1749+
<data-member access='public' layout-offset-in-bits='1088'>
1750+
<var-decl name='stx_dev_major' type-id='3f1a6b60' visibility='default'/>
1751+
</data-member>
1752+
<data-member access='public' layout-offset-in-bits='1120'>
1753+
<var-decl name='stx_dev_minor' type-id='3f1a6b60' visibility='default'/>
1754+
</data-member>
1755+
<data-member access='public' layout-offset-in-bits='1152'>
1756+
<var-decl name='stx_mnt_id' type-id='d3130597' visibility='default'/>
1757+
</data-member>
1758+
<data-member access='public' layout-offset-in-bits='1216'>
1759+
<var-decl name='__spare2' type-id='d3130597' visibility='default'/>
1760+
</data-member>
1761+
<data-member access='public' layout-offset-in-bits='1280'>
1762+
<var-decl name='__spare3' type-id='f63f23b9' visibility='default'/>
1763+
</data-member>
1764+
</class-decl>
16711765
<pointer-type-def type-id='56fe4a37' size-in-bits='64' id='b6b61d2f'/>
16721766
<qualified-type-def type-id='b6b61d2f' restrict='yes' id='3cad23cd'/>
1767+
<pointer-type-def type-id='720b04c5' size-in-bits='64' id='936b8e35'/>
1768+
<qualified-type-def type-id='936b8e35' restrict='yes' id='31d265b7'/>
16731769
<function-decl name='getmntent_r' visibility='default' binding='global' size-in-bits='64'>
16741770
<parameter type-id='e75a27e9'/>
16751771
<parameter type-id='3cad23cd'/>
@@ -1681,6 +1777,14 @@
16811777
<parameter type-id='822cd80b'/>
16821778
<return type-id='95e97e5e'/>
16831779
</function-decl>
1780+
<function-decl name='statx' visibility='default' binding='global' size-in-bits='64'>
1781+
<parameter type-id='95e97e5e'/>
1782+
<parameter type-id='9d26089a'/>
1783+
<parameter type-id='95e97e5e'/>
1784+
<parameter type-id='f0981eeb'/>
1785+
<parameter type-id='31d265b7'/>
1786+
<return type-id='95e97e5e'/>
1787+
</function-decl>
16841788
</abi-instr>
16851789
<abi-instr address-size='64' path='lib/libspl/procfs_list.c' language='LANG_C99'>
16861790
<class-decl name='procfs_list' size-in-bits='768' is-struct='yes' visibility='default' id='0f4d3b87'>
@@ -3830,6 +3934,10 @@
38303934
<parameter type-id='80f4b756'/>
38313935
<return type-id='58603c44'/>
38323936
</function-decl>
3937+
<function-decl name='zfs_prop_user' mangled-name='zfs_prop_user' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_user'>
3938+
<parameter type-id='80f4b756'/>
3939+
<return type-id='c19b74c3'/>
3940+
</function-decl>
38333941
<function-decl name='nvlist_add_uint64' visibility='default' binding='global' size-in-bits='64'>
38343942
<parameter type-id='5ce45b60'/>
38353943
<parameter type-id='80f4b756'/>
@@ -3854,9 +3962,6 @@
38543962
<parameter type-id='7d3cd834'/>
38553963
<return type-id='95e97e5e'/>
38563964
</function-decl>
3857-
<function-decl name='fnvlist_alloc' visibility='default' binding='global' size-in-bits='64'>
3858-
<return type-id='5ce45b60'/>
3859-
</function-decl>
38603965
<function-decl name='__ctype_b_loc' visibility='default' binding='global' size-in-bits='64'>
38613966
<return type-id='c59e1ef0'/>
38623967
</function-decl>
@@ -4529,10 +4634,6 @@
45294634
<parameter type-id='c19b74c3'/>
45304635
<return type-id='c19b74c3'/>
45314636
</function-decl>
4532-
<function-decl name='zfs_prop_user' mangled-name='zfs_prop_user' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_user'>
4533-
<parameter type-id='80f4b756'/>
4534-
<return type-id='c19b74c3'/>
4535-
</function-decl>
45364637
<function-decl name='zfs_prop_userquota' mangled-name='zfs_prop_userquota' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_prop_userquota'>
45374638
<parameter type-id='80f4b756'/>
45384639
<return type-id='c19b74c3'/>
@@ -4642,6 +4743,9 @@
46424743
<parameter type-id='7d3cd834'/>
46434744
<return type-id='95e97e5e'/>
46444745
</function-decl>
4746+
<function-decl name='fnvlist_alloc' visibility='default' binding='global' size-in-bits='64'>
4747+
<return type-id='5ce45b60'/>
4748+
</function-decl>
46454749
<function-decl name='fnvlist_free' visibility='default' binding='global' size-in-bits='64'>
46464750
<parameter type-id='5ce45b60'/>
46474751
<return type-id='48b5725f'/>
@@ -4909,6 +5013,12 @@
49095013
<parameter type-id='80f4b756' name='path'/>
49105014
<return type-id='95e97e5e'/>
49115015
</function-decl>
5016+
<function-decl name='zfs_create_ancestors_props' mangled-name='zfs_create_ancestors_props' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_create_ancestors_props'>
5017+
<parameter type-id='b0382bb3' name='hdl'/>
5018+
<parameter type-id='80f4b756' name='path'/>
5019+
<parameter type-id='5ce45b60' name='props'/>
5020+
<return type-id='95e97e5e'/>
5021+
</function-decl>
49125022
<function-decl name='zfs_create' mangled-name='zfs_create' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_create'>
49135023
<parameter type-id='b0382bb3' name='hdl'/>
49145024
<parameter type-id='80f4b756' name='path'/>
@@ -5155,6 +5265,19 @@
51555265
<parameter type-id='0d41d328'/>
51565266
<return type-id='95e97e5e'/>
51575267
</function-decl>
5268+
<function-decl name='zfs_is_namespace_prop' visibility='default' binding='global' size-in-bits='64'>
5269+
<parameter type-id='58603c44'/>
5270+
<return type-id='c19b74c3'/>
5271+
</function-decl>
5272+
<function-decl name='zfs_namespace_prop_flag' visibility='default' binding='global' size-in-bits='64'>
5273+
<parameter type-id='58603c44'/>
5274+
<return type-id='8f92235e'/>
5275+
</function-decl>
5276+
<function-decl name='zfs_mount_setattr' visibility='default' binding='global' size-in-bits='64'>
5277+
<parameter type-id='9200a744'/>
5278+
<parameter type-id='8f92235e'/>
5279+
<return type-id='95e97e5e'/>
5280+
</function-decl>
51585281
<function-decl name='zpool_name_valid' visibility='default' binding='global' size-in-bits='64'>
51595282
<parameter type-id='b0382bb3'/>
51605283
<parameter type-id='c19b74c3'/>
@@ -8337,6 +8460,7 @@
83378460
<parameter type-id='b0382bb3'/>
83388461
<parameter type-id='26a90f95'/>
83398462
<parameter type-id='95e97e5e'/>
8463+
<parameter type-id='5ce45b60'/>
83408464
<return type-id='95e97e5e'/>
83418465
</function-decl>
83428466
<function-decl name='zfs_send_progress' mangled-name='zfs_send_progress' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_send_progress'>
@@ -10331,6 +10455,12 @@
1033110455
<parameter type-id='c24fc2ee' name='zcp'/>
1033210456
<return type-id='48b5725f'/>
1033310457
</function-decl>
10458+
<function-decl name='fletcher_4_byteswap_varsize' mangled-name='fletcher_4_byteswap_varsize' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_byteswap_varsize'>
10459+
<parameter type-id='eaa32e2f' name='buf'/>
10460+
<parameter type-id='9c313c2d' name='size'/>
10461+
<parameter type-id='c24fc2ee' name='zcp'/>
10462+
<return type-id='48b5725f'/>
10463+
</function-decl>
1033410464
<function-decl name='fletcher_4_byteswap' mangled-name='fletcher_4_byteswap' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fletcher_4_byteswap'>
1033510465
<parameter type-id='eaa32e2f' name='buf'/>
1033610466
<parameter type-id='9c313c2d' name='size'/>

module/zcommon/zfs_fletcher.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,13 @@ fletcher_4_native_varsize(const void *buf, uint64_t size, zio_cksum_t *zcp)
499499
fletcher_4_scalar_native((fletcher_4_ctx_t *)zcp, buf, size);
500500
}
501501

502+
void
503+
fletcher_4_byteswap_varsize(const void *buf, uint64_t size, zio_cksum_t *zcp)
504+
{
505+
ZIO_SET_CHECKSUM(zcp, 0, 0, 0, 0);
506+
fletcher_4_scalar_byteswap((fletcher_4_ctx_t *)zcp, buf, size);
507+
}
508+
502509
static inline void
503510
fletcher_4_byteswap_impl(const void *buf, uint64_t size, zio_cksum_t *zcp)
504511
{

module/zfs/vdev_draid.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,11 @@ verify_perms(uint8_t *perms, uint64_t children, uint64_t nperms,
505505
int permssz = sizeof (uint8_t) * children * nperms;
506506
zio_cksum_t cksum;
507507

508+
#if defined(_ZFS_BIG_ENDIAN)
509+
fletcher_4_byteswap_varsize(perms, permssz, &cksum);
510+
#else
508511
fletcher_4_native_varsize(perms, permssz, &cksum);
512+
#endif
509513

510514
if (checksum != cksum.zc_word[0]) {
511515
kmem_free(counts, countssz);

0 commit comments

Comments
 (0)