This is mostly optional FFS pager which, comparing with the generic local fs pager from vnode_pager.c, correctly operates on FFS volumes which underlying block device has block size larger than the machine page size.
Main issue there is that vnode_pager.c cannot easily align page-in requests on the block size. It would need to grab and busy pages outside the page-in run, and handle valid pages in the run extensions. Buffer cache/FFS already handle these problems, so simply bread()-ing the corresponding buffers provides the pager functionality almost for free. In particular, the most delicate issue with valid pages substitutions by bogus pages is avoided.
The only problematic issue is that exclusively busy state, which is assumed by the vm_pager_getpages() interface, is incompatible with the VMIO buffer cache desire to shared-busy pages. Most of the code handles the downgrade (trivial) before reading buffers, and less trivial upgrade from the shared-busy to excl-busy.
I release buffers after the read, if possible (see the check for b_dep and B_RELBUF flag setting) to somewhat ease the buffer cache pressure, this is probably not strictly needed.