Read threads should not bump the cache read generation: eviction is now responsible for that.  Somehow this part of 30b1a822b26ff0531a0d31aa2895bc98b6f53d88 got lost.
Have the eviction thread update the oldest transaction ID in the system before each walk: we now use that to filter LRU candidates, and if a long-running transaction such as a checkpoint blocks all other threads in the system, the oldest ID has to be updated after the long-running transaction completes.