Write out the dirty pages using VOP_WRITE() instead of directly calling ncl_writerpc(). Most important, the state of the buffers now reflects the write, fixing some hard to diagnose consistency and write order issues. Minor goods are removal of the now unneeded additional remapping of paged out pages into kernel space and related allocation of the phys buffer, some initial support of IO_ASYNC write mode.
Patch also more or less consistently adds checks for the reclaimed vnode after call to ncl_vinvalbuf(), which might need to upgrade the vnode lock and allows for vgone() to occur meantime.
Since vnode' object page removal or cleanup recursively called from ncl_vinvalbuf() during pageout would cause deadlock and also does not make sense, a new flag V_VMIO is added for bufobj_invalbuf(), which requests to avoid VM calls.
The calculation of IO_XXX flags from VM_PAGER_PUT_XXX flags was extracted from vnode_pager_generic_putpages(). Related style cleanup was performed in the block for local declarations.
Patch will be naturally split per change for actual commit.