Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ztest: buffer modified while frozen #1965

Closed
behlendorf opened this issue Dec 12, 2013 · 1 comment
Closed

ztest: buffer modified while frozen #1965

behlendorf opened this issue Dec 12, 2013 · 1 comment
Labels
Component: Test Suite Indicates an issue with the test framework or a test case
Milestone

Comments

@behlendorf
Copy link
Contributor

The following error is periodically observed while running ztest -V.

5 vdevs, 7 datasets, 23 threads, 300 seconds...
Pass   1,  SIGKILL,   0 ENOSPC,  1.3% of  238M used,   3% done,    4m51s to go
error: buffer modified while frozen!
child died with signal 6
@DeHackEd
Copy link
Contributor

An attempt at running it down by automated biesction returned 9759c60 as the guilty party. This may not be right (since there is luck involved in setting off the bug) but I'm putting this here in case anyone wants to use it as a starting point for further investigation.

Valgrind told me nothing useful except valgrind doens't like -fstack-check.

DeHackEd added a commit to DeHackEd/zfs that referenced this issue Apr 18, 2014
__BIG_ENDIAN__ is a kernel macro that is only defined when the CPU
is big-endian, but when built in userspace it is always defined.
Let's use different checks depending on whether we're building for
user-space or kernel space.

The "PowerPC" architecture checks were kept just because it's what
Illumos does.

Fixes openzfs#1964
Fixed openzfs#1965
Signed-off-by: DHE <git@dehacked.net>
DeHackEd added a commit to DeHackEd/zfs that referenced this issue Apr 18, 2014
__BIG_ENDIAN__ is a kernel macro that is only defined when the CPU
is big-endian, but when built in userspace it is always defined.
Let's use different checks depending on whether we're building for
user-space or kernel space.

The "PowerPC" architecture checks were kept just because it's what
Illumos does.

Fixes openzfs#1964
Fixed openzfs#1965
Signed-off-by: DHE <git@dehacked.net>
@behlendorf behlendorf modified the milestones: 0.6.3, 0.6.4 Apr 18, 2014
nedbass added a commit to nedbass/zfs that referenced this issue Apr 18, 2014
Endianness detection in LZ4 is broken in user-space builds.  This
bug corrupts compressed data and manifests itself in at least two
obscure ztest failures.  When LZ4 was originally ported to Illumos
ZFS, the proper checks for Linux were stripped out. The Linux port
then inherited the remaining detection code that works on Illumos
but not on Linux.

The current LZ4 endianness check misuses the condition
defined(__BIG_ENDIAN) to indicate a big-endian system.  On Linux
__BIG_ENDIAN is defined in the user-space header
/usr/include/endian.h, and the endianness of the system is indicated
by its value, not whether it is defined.  The kernel does not use
this header, so only user-space builds are affected.

While we could fix this by restoring the upstream LZ4 endianness
detection code, reliable detection code already exists in
libspl/include/sys/isa_defs.h. This change uses the libspl results
to replace the word-size and endianness checks in LZ4, simplifying
the code and reducing duplication.

Fixes openzfs#1964
Fixes openzfs#1965

Signed-off-by: Ned Bass <bass6@llnl.gov>
nedbass added a commit to nedbass/zfs that referenced this issue Apr 18, 2014
Endianness detection in LZ4 is broken in user-space builds.  This
bug corrupts compressed data and manifests itself in at least two
obscure ztest failures.  When LZ4 was originally ported to Illumos
ZFS, the proper checks for Linux were stripped out. The Linux port
then inherited the remaining detection code that works on Illumos
but not on Linux.

The current LZ4 endianness check misuses the condition
defined(__BIG_ENDIAN) to indicate a big-endian system.  On Linux
__BIG_ENDIAN is defined uncondtionally in the user-space header
/usr/include/endian.h, regardless of the endianness of the system.
The kernel does not use this header, so only user-space builds are
affected.

While we could fix this by restoring the upstream LZ4 endianness
detection code, reliable detection code already exists in
libspl/include/sys/isa_defs.h. This change uses the libspl results
to replace the word-size and endianness checks in LZ4, simplifying
the code and reducing duplication.

Fixes openzfs#1964
Fixes openzfs#1965

Signed-off-by: Ned Bass <bass6@llnl.gov>
nedbass added a commit to nedbass/zfs that referenced this issue Apr 18, 2014
Endianness detection in LZ4 is broken in user-space builds.  This
bug corrupts compressed data and manifests itself in several ztest
failures.  When LZ4 was originally ported to Illumos ZFS, the proper
checks for Linux were stripped out. The Linux port then inherited
the remaining detection code that works on Illumos but not on Linux.

The current LZ4 endianness check misuses the condition
defined(__BIG_ENDIAN) to indicate a big-endian system.  On Linux
__BIG_ENDIAN is defined uncondtionally in the user-space header
/usr/include/endian.h, regardless of the endianness of the system.
The kernel does not use this header, so only user-space builds are
affected.

While we could fix this by restoring the upstream LZ4 endianness
detection code, reliable checks already exist in
libspl/include/sys/isa_defs.h. This change uses the libspl results
to replace the word-size and endianness checks in LZ4, simplifying
the code and reducing duplication.

Fixes openzfs#1963
Fixes openzfs#1964
Fixes openzfs#1965

Signed-off-by: Ned Bass <bass6@llnl.gov>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Component: Test Suite Indicates an issue with the test framework or a test case
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants