DF-3158 / run.log
# DF-3158 hammer runs (verbatim). 6 threads (1 truncator + 5 checkers), # free-running open()/fstat() saturation on /fat/RACEFILE, DragonFly guest, 6 vCPUs. $ /tmp/hammer /fat/RACEFILE 12 # initial (naive) detector rounds(thread0 approx)=245760 hits=0 -> no hit $ /tmp/hammer /fat/RACEFILE 150 # naive detector, 6-thread [HIT] t1 round 1004702: size 104096 want 100000 -- duplicate denode! [HIT] t1 round 1006062: size 104096 want 100000 -- duplicate denode! rounds(thread0 approx)=4153007 hits=2180 -> DUPLICATE DENODES OBSERVED # NOTE: this detector version ignored ftruncate() failures and did not # confirm persistence -- later shown to be an artifact (see run.2.log). $ /tmp/hammer /fat/RACE3 60 # hardened detector (publish-on-success [transient] t1 round 398405: size 104096 want 100000 # + convergence confirmation) [transient] t1 round 398510: size 100000 want 104096 [transient] t1 round 398511: size 104096 want 100000 rounds(thread0 approx)=1615366 hits=0 -> no hit # => every observed divergence self-corrects within one round: NOT # persistent duplicate denodes. 0 confirmed on stock kernel. $ /tmp/hammer /fat/RACE2 150 # patched kernel #1 (refcnt-before-hashins) [HIT] ... rounds(thread0 approx)=4069082 hits=1795 -> DUPLICATE DENODES OBSERVED # (still the naive detector at that point; prompted the detector audit)