I left the readahead in the main loop because we don't need to repeat the dropbehind. However, storing the cached entry variables before unlocking the map was only done once before. I don't think this was important to the algorithm nor is it especially expensive.
Please do not do this. You are mixing VM_PAGER_XXX (pager errors namespace) and KERN_XXX (Mach errors).
This is arguably incorrect in particular because the numeric values intersect. Translate the rest of errors into KERN_ as well.