Re: git: 2a58b312b62f - main - zfs: merge openzfs/zfs@431083f75

From: Mark Millard <marklmi_at_yahoo.com>
Date: Sat, 15 Apr 2023 20:25:56 UTC
On Apr 15, 2023, at 11:07, Cy Schubert <Cy.Schubert@cschubert.com> wrote:

> In message <5A47F62D-0E78-4C3E-84C0-45EEB03C7640@yahoo.com>, Mark Millard 
> write
> s:
>> On Apr 15, 2023, at 07:36, Cy Schubert <Cy.Schubert@cschubert.com> =
>> wrote:
>> 
>>> In message <20230415115452.08911bb7@thor.intern.walstatt.dynvpn.de>,=20=
>> 
>>> FreeBSD Us
>>> er writes:
>>>> Am Thu, 13 Apr 2023 22:18:04 -0700
>>>> Mark Millard <marklmi@yahoo.com> schrieb:
>>>> =20
>>>>> On Apr 13, 2023, at 21:44, Charlie Li <vishwin@freebsd.org> wrote:
>>>>> =20
>>>>>> Mark Millard wrote: =20
>>>>>>> FYI: in my original report for a context that has never had
>>>>>>> block_cloning enabled, I reported BOTH missing files and
>>>>>>> file content corruption in the poudriere-devel bulk build
>>>>>>> testing. This predates:
>>>>>>> https://people.freebsd.org/~pjd/patches/brt_revert.patch
>>>>>>> but had the changes from:
>>>>>>> https://github.com/openzfs/zfs/pull/14739/files
>>>>>>> The files were missing from packages installed to be used
>>>>>>> during a port's build. No other types of examples of missing
>>>>>>> files happened. (But only 11 ports failed.) =20
>>>>>> I also don't have block_cloning enabled. "Missing files" prior to =
>> brt_rev
>>>> ert may actually
>>>>>> be present, but as the corruption also messes with the file(1) =
>> signature,
>>>> some tools like
>>>>>> ldconfig report them as missing. =20
>>>>> =20
>>>>> For reference, the specific messages that were not explicit
>>>>> null-byte complaints were (some shown with a little context):
>>>>> =20
>>>>> =20
>>>>> =3D=3D=3D>   py39-lxml-4.9.2 depends on shared library: libxml2.so - =
>> not found
>>>>> =3D=3D=3D>   Installing existing package =
>> /packages/All/libxml2-2.10.3_1.pkg =20
>>>>> [CA72_ZFS] Installing libxml2-2.10.3_1...
>>>>> [CA72_ZFS] Extracting libxml2-2.10.3_1: .......... done
>>>>> =3D=3D=3D>   py39-lxml-4.9.2 depends on shared library: libxml2.so - =
>> found
>>>>> (/usr/local/lib/libxml2.so) . . .
>>>>> [CA72_ZFS] Extracting libxslt-1.1.37: .......... done
>>>>> =3D=3D=3D>   py39-lxml-4.9.2 depends on shared library: libxslt.so - =
>> found
>>>>> (/usr/local/lib/libxslt.so) =3D=3D=3D>   Returning to build of =
>> py39-lxml-4.9.2 =20
>>>>> . . .
>>>>> =3D=3D=3D>  Configuring for py39-lxml-4.9.2 =20
>>>>> Building lxml version 4.9.2.
>>>>> Building with Cython 0.29.33.
>>>>> Error: Please make sure the libxml2 and libxslt development packages =
>> are in
>>>> stalled.
>>>>> =20
>>>>> =20
>>>>> [CA72_ZFS] Extracting libunistring-1.1: .......... done
>>>>> =3D=3D=3D>   libidn2-2.3.4 depends on shared library: =
>> libunistring.so - not found
>>>> =20
>>>>> =20
>>>>> =20
>>>>> [CA72_ZFS] Extracting gmp-6.2.1: .......... done
>>>>> =3D=3D=3D>   mpfr-4.2.0,1 depends on shared library: libgmp.so - not =
>> found =20
>>>>> =20
>>>>> =20
>>>>> =3D=3D=3D>   nettle-3.8.1 depends on shared library: libgmp.so - not =
>> found
>>>>> =3D=3D=3D>   Installing existing package /packages/All/gmp-6.2.1.pkg =
>> =20
>>>>> [CA72_ZFS] Installing gmp-6.2.1...
>>>>> the most recent version of gmp-6.2.1 is already installed
>>>>> =3D=3D=3D>   nettle-3.8.1 depends on shared library: libgmp.so - not =
>> found =20
>>>>> *** Error code 1
>>>>> =20
>>>>> =20
>>>>> autom4te: error: need GNU m4 1.4 or later: /usr/local/bin/gm4
>>>>> =20
>>>>> =20
>>>>> checking for GNU=20
>>>>> M4 that supports accurate traces... configure: error: no acceptable =
>> m4 coul
>>>> d be found in
>>>>> $PATH. GNU M4 1.4.6 or later is required; 1.4.16 or newer is =
>> recommended.
>>>>> GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
>>>>> Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug.
>>>>> =20
>>>>> =20
>>>>> ld: error: /usr/local/lib/libblkid.a: unknown file type
>>>>> =20
>>>>> =20
>>>>> =3D=3D=3D
>>>>> Mark Millard
>>>>> marklmi at yahoo.com
>>>>> =20
>>>>> =20
>>>> =20
>>>> Hello=20
>>>> =20
>>>> whar is the recent status of fixing/mitigate this desatrous bug? =
>> Especially f
>>>> or those with the
>>>> new option enabled on ZFS pools. Any advice?
>>>> =20
>>>> In an act of precausion (or call it panic) I shutdown several servers =
>> to prev
>>>> ent irreversible
>>>> damages to databases and data storages. We face on one host with =
>> /usr/ports r
>>>> esiding on ZFS
>>>> always errors on the same files created while staging (using =
>> portmaster, leav
>>>> es the system
>>>> with noninstalled software, i.e. www/apache24 in our case). Deleting =
>> the work
>>>> folder doesn't
>>>> seem to change anything, even when starting a scrubbing of the entire =
>> pool (R
>>>> AIDZ1 pool) -
>>>> cause unknown, why it affects always the same files to be corrupted. =
>> Same wit
>>>> h deve/ruby-gems.
>>>> =20
>>>> Poudriere has been shutdown for the time being to avoid further =
>> issues.=20
>>>> =20
>>>> Are there any advies to proceed apart from conserving the boxes via =
>> shutdown?
>>>> =20
>>>> Thank you ;-)
>>>> oh
>>>> =20
>>>> =20
>>>> =20
>>>> --=20
>>>> O. Hartmann
>>> =20
>>> With an up-to-date tree + pjd@'s "Fix data corruption when cloning =
>> embedded=20
>>> blocks. #14739" patch I didn't have any issues, except for email =
>> messages=20
>>> with corruption in my sent directory, nowhere else. I'm still =
>> investigating=20
>>> the email messages issue. IMO one is generally safe to run poudriere =
>> on the=20
>>> latest ZFS with the additional patch.
>> 
>> My poudriere testing failed when I tested such (14739 included),
>> per what I reported, block_cloning never have been enabled.
>> Others have also reported poudriere bulk build failures absent
>> block_cloning being involved and 14739 being in place. My tests
>> do predate:
>> 
>> https://people.freebsd.org/~pjd/patches/brt_revert.patch
> 
> IIRC this patch doesn't build.
> 
> My tree includes this patch. Pardon the cut&paste. This will not apply.
> 
> diff --git a/sys/contrib/openzfs/module/zfs/dmu.c b/sys/contrib/openzfs/modu
> le/zfs/dmu.c985d833f58..cda1472a77aa 100644
> --- a/sys/contrib/openzfs/module/zfs/dmu.c
> +++ b/sys/contrib/openzfs/module/zfs/dmu.c
> @@ -2312,8 +2312,10 @@ dmu_brt_clone(objset_t *os, uint64_t object, 
> uint64_t offset, uint64_t length,   dl->dr_overridden_by.blk_phys_birth = 0;
>                } else {
>                        dl->dr_overridden_by.blk_birth = dr->dr_txg;
> -                   dl->dr_overridden_by.blk_phys_birth =
> -                       BP_PHYSICAL_BIRTH(bp);
> +                 if (!BP_IS_EMBEDDED(bp)) {
> +                         dl->dr_overridden_by.blk_phys_birth =
> +                             BP_PHYSICAL_BIRTH(bp);
> +                 }
>                }
> 
>                mutex_exit(&db-°“>db_mtx);
> 
>> 
>> and I'm not sure of if Cy's activity had brt_revert.patch in
>> place or not.
> 
> I don't know if your poudriere has any residual file corruption or not.

I've only done the one test sequence that started from a
context predating the import of the openzfs update. There
was no prior corruption involved and no stage without
the source fixes involved.

> My 
> poudriere working 100% ok and yours not indicates there may be something 
> amiss with your poudriere tree.

The original media still predates the import and still is fine.
The snapshot of the transfer state to the test media has no
corruptions.

> Remember I rolled back to the last nightly 
> snapshot whereas you did not.

You are confused: I had nothing to roll back as I started
from pre-import and jumped in one step to a build that
had the commits and 14739 with no intermediate steps.
I then did the poudriere bulk for a jail that had no
packages, one I use for temporary odd experiments that
I clean out afterwards.

Please quit attributing to my activities things that were
not involved in my activites. It is likely confusing folks
about what I'm reporting. I'll give a more detailed
sequencing below, in case that helps.

> I don't know the state of your poudriere 
> tree. I know with 100% certainty that my tree is good.

Remember my sequence for that (as reported before,
but with a different presentation in case that helps):

A) Start with root on ZFS media that predates the openzfs import.
   Note: This is a bectl context that looks like:

# bectl list
BE            Active Mountpoint Space Created
main-CA72     NR     /          4.02G 2023-03-15 21:29
old-main-CA72 -      -          1.82G 2023-03-01 17:25

(Lots of stuff is outside the BE's, so common to
both.) It shows:

# uname -apKU
FreeBSD CA72_4c8G_ZFS 14.0-CURRENT FreeBSD 14.0-CURRENT #90 main-n261544-cee09bda03c8-dirty: Wed Mar 15 20:25:49 PDT 2023     root@CA72_16Gp_ZFS:/usr/obj/BUILDs/main-CA72-nodbg-clang/usr/main-src/arm64.aarch64/sys/GENERIC-NODBG-CA72 arm64 aarch64 1400082 1400082

B) Establish a copy of the normal media on a 2nd media.

C) Use the 2nd media for all the following steps, leanving
   my normal environment alone.

D) Update git and /usr/main-src/ worktree to:
   main-n262122-2ef2c26f3f13-dirty

E) Also apply 14739.

F) buildworld buildkernel
G) Do a sequence that in overall effect deletes old-main-CA72
   and renames main-CA72 to old-main-CA72 and has the
   installkernel installworld results in a (new)
   main-CA72. (This is a normal update result for me.)

H) Boot the new main-CA72. It showed:

# uname -apKU
FreeBSD CA72_4c8G_ZFS 14.0-CURRENT FreeBSD 14.0-CURRENT #91 main-n262122-2ef2c26f3f13-dirty: Wed Apr 12 19:23:35 PDT 2023     root@CA72_4c8G_ZFS:/usr/obj/BUILDs/main-CA72-nodbg-clang/usr/main-src/arm64.aarch64/sys/GENERIC-NODBG-CA72 arm64 aarch64 1400086 1400086

(Taken from the report I made at the time.)

I) Next I did the poudriere bulk run, for a jail with no
   packages present, even pkg needing to be built.

That poudriere bulk run had the 11 failures, 252
successes and 213 skipped. It was based on USE_TMPF=data
instead of, say, USE_TMPFS=all . This was in order to
be sure there was more file system activity. (I'd not
be surprised of USE_TMPFS=all would have finished fine
because of having far less zfs I/O involved.)

An odd aspect that may be relevant: I do bulk
builds in a manor that at times can have 100+ for
one or more of the 3 load averages --on a system
with just 16 cores (16 hardware threads). (I do not
have specific maximum observed load average figures
for the specific bulk run. But I could set up a
retest and get such if desired. I use a modified
top to get the "MaxObs" figures.)

At no point in that sequence is a rollback relevant!

Please quit assuming that I had ever built, installed,
or booted something from a middle time frame compared
to what I've explicitly reported. I did not, as I've
reported multiple times. But you seem to forget or
not believe such each time.

>> 
>> Other's notes include Mateusz Guzik's:
>> 
>> =
>> https://lists.freebsd.org/archives/dev-commits-src-main/2023-April/014534.=
>> html
> 
> My tree included this patch + pjd@'s last patch on people.freebsd.org.
>> 
>> which said:
>> 
>> QUOTE
>> There is corruption with the recent import, with the
>> https://github.com/openzfs/zfs/pull/14739/files patch applied and
>> block cloning disabled on the pool.
> 
> I had zero poudriere corruption with this patch.

But I did.

> My only corruption was in 
> my sent-items in my MH mail directory, which I think was due to email 
> threads already containing nulls.
> 
>> 
>> There is no corruption with top of main with zfs merge reverted =
>> altogether.
>> 
>> Which commit results in said corruption remains to be seen, a variant
>> of the tree with just block cloning support reverted just for testing
>> purposes is about to be evaluated.
>> END QUOTE
>> 
>> Charlie Li's later related notes that helps interpret that were in:
>> 
>> =
>> https://lists.freebsd.org/archives/dev-commits-src-main/2023-April/014545.=
>> html
>> 
>> QUOTE
>> Testing with mjg@ earlier today revealed that block_cloning was not the=20=
>> 
>> cause of poudriere bulk build (and similar cp(1)/install(1)-based)=20
>> corruption, although may have exacerbated it.
>> END QUOTE
>> 
>> Mateusz later indicated had a hope to have is sorted out sometime
>> Friday for what the cause(s) were:
>> 
>> =
>> https://lists.freebsd.org/archives/dev-commits-src-main/2023-April/014551.=
>> html
>> 
>> QUOTE
>> I'm going to narrow down the non-blockcopy corruption after my testjig
>> gets off the ground.
>> 
>> Basically I expect to have it sorted out on Friday.
>> END QUOTE
>> 
>> But the lack of later related messages suggests that did not happen.
>> 
>>> My tests of the additional patch
>> 
>> (I'm guessing that is a reference to 14739, not to brt_revert.patch .)
>> 
>>> concluded that it resolved my last=20
>>> problems, except for the sent email problem I'm still investigating. =
>> I'm=20
>>> sure there's a simple explanation for it, i.e. the email thread was=20
>>> corrupted by the EXDEV regression which cannot be fixed by anything, =
>> even=20
>>> reverting to the previous ZFS -- the data in those files will remain=20=
>> 
>>> damaged regardless.
>> 
>> Again: my test jump from prior to the import to after the EXDEV
>> changes, including having 14739. I still had poudriere bulk
>> produce file corruptions.
>> 
>>> I cannot speak to the others who have had poudriere and other issues. =
>> I=20
>>> never had any problems with poudriere on top of the new ZFS.
>> 
>> Part of the mess is the variability. As I remember, I had 252
>> ports build fine in my test before the 11th failure meant that
>> the rest (213) had all been classified as skipped.
>> 
>> It is not like most of the port builds failed: relatively uncommon.
>> 
>> Also, one port built on a retry, indicating random/racy behavior
>> is involved. (The original failure was not from a file from
>> installing build dependencies but something that the builder
>> generated during the build. The 2nd try did not fail there or
>> anywhere.)
>> 
>>> WRT reverting block_cloning pools to without, your only option is to =
>> backup=20
>>> your pool and recreate it without block_cloning. Then restore your =
>> data.
>>> =20
>> 
>> Given what has been reported by multiple people and
>> Cy's own example of unexplained corruptions in email
>> handling, I'd be cautious risking important data
>> until reports from testing environment activity
>> consistently report not having corruptions.
> 
> The "unexplained" email corruptions occurred in only the threads that 
> already had corruption.

Good to know.

> I haven't been able to reproduce it anywhere else. 
> I will continue testing on Monday. I expect my testing to confirm this 
> hypothesis.

Your evidence can not cancel what I and others have
reported. It is just more evidence of observed
variability (that is, as, yet, unexplained as far as
I know).

>> Another thing my activity does not include any testing
>> of the suggestion in:
>> 
>> =
>> https://lists.freebsd.org/archives/dev-commits-src-main/2023-April/014607.=
>> html
>> 
>> to use "-o sync=3Ddisabled" in a clone, reporting:
> 
> This is a different issue. We need a core dump to resolve this. I'll test 
> this on my sandbox on Monday.
> 
> We can now reproduce this panic by hand.

My sequence has appearently avoided what leads to panics
so my only contribution to evidence about them is the
lack of getting any panics for my sequence.

> If there is no panic a diff -qr 
> will confirm/deny this bug.

Up to possible lack of reproducible builds for the
activity done on the clone? Some files might be expected
to be different if I understand the sequence that was
being suggested.

>> 
>> QUOTE
>> With this workaround I was able to build thousands of packages without=20=
>> 
>> panics or failures due to data corruption.
>> END QUOTE
>> 
>> If reliable, that consequence to the change might help
>> folks that are trying to isolate the problem(s) figure
>> out what is involved.
>> 
>> =3D=3D=3D
>> Mark Millard
>> marklmi at yahoo.com
> 
> IMO we've had a lack of systematic testing of the various bugs.

What about my sequence would be an example of lack of
being systematic?

> The fact 
> that this has caused some corrupt files has led to human panic over the 
> issue.

I've no personal panic: the only context with the
corruptions for me was a specially created context
to test to see if I'd get corruption based on what
was commited at the time (+1 separate patch). My
standard/normal environment still predates the
import of the openzfs update and has no problems.

> Now that I've reverted my laptop to the old ZFS, the MH sent-email issue 
> continues to exhibit itself. This is because the files I forward to myself 
> already contain corrupt data. The old ZFS will not magically remove this. 
> This testing is necessary to prove my hypothesis. I expect brand new email 
> threads not to exhibit this problem with the new ZFS.



===
Mark Millard
marklmi at yahoo.com