Page MenuHomeFreeBSD

Fix a case where we did not properly track the ub_seq.
ClosedPublic

Authored by jeff on Feb 10 2020, 8:28 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Nov 21, 5:59 PM
Unknown Object (File)
Mon, Oct 28, 5:02 PM
Unknown Object (File)
Sun, Oct 27, 6:26 PM
Unknown Object (File)
Sep 30 2024, 7:47 PM
Unknown Object (File)
Sep 24 2024, 10:08 AM
Unknown Object (File)
Sep 18 2024, 8:07 PM
Unknown Object (File)
Sep 16 2024, 11:21 PM
Unknown Object (File)
Sep 10 2024, 5:09 AM
Subscribers

Details

Summary

uzd_cross did not have a seq set until it was full. If the bucket was reaped in a low memory situation we would not wait for seq to expire or call the dtors. We had a similar problem via uma_zdestroy(). I wanted to place the advance call in cache_bucket_unload() but it just didn't really work out any cleaner.

This now passes invariants with a lot of stress and memory pressure followed by destroying zones.

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 29280
Build 27193: arc lint + arc unit

Event Timeline

jeff added reviewers: markj, rlibby.
jeff set the repository for this revision to rS FreeBSD src repository - subversion.
sys/vm/uma_core.c
562

this was requested by gleb for coverity

markj added inline comments.
sys/vm/uma_core.c
985

You can micro-optimize this the same way as zone fetch bucket, to avoid looping over bucket entries when it's not necessary to do so.

This revision is now accepted and ready to land.Feb 11 2020, 6:32 PM