This ultimately will allow us to drop the object lock in more cases. This diff just sets things up so this is possible.
pip_wait is simply a barrier. If the caller doesn't somehow enforce that no new I/O can be started before calling pip_wait() it can become non-zero immediately after returning. The call does still guarantee that pip reached zero at some point.
We use pip when collapsing objects and in this case the object lock will guarantee that no new faults or pageouts can occur. The other use is in vfs which simply wants to know that a fsync completed. Here the vnode lock is held and ensures that no new I/O can start.