Skip to content
  • Attilio Rao's avatar
    Switch the vm_object mutex to be a rwlock. This will enable in the · 89f6b863
    Attilio Rao authored
    future further optimizations where the vm_object lock will be held
    in read mode most of the time the page cache resident pool of pages
    are accessed for reading purposes.
    
    The change is mostly mechanical but few notes are reported:
    * The KPI changes as follow:
      - VM_OBJECT_LOCK() -> VM_OBJECT_WLOCK()
      - VM_OBJECT_TRYLOCK() -> VM_OBJECT_TRYWLOCK()
      - VM_OBJECT_UNLOCK() -> VM_OBJECT_WUNLOCK()
      - VM_OBJECT_LOCK_ASSERT(MA_OWNED) -> VM_OBJECT_ASSERT_WLOCKED()
        (in order to avoid visibility of implementation details)
      - The read-mode operations are added:
        VM_OBJECT_RLOCK(), VM_OBJECT_TRYRLOCK(), VM_OBJECT_RUNLOCK(),
        VM_OBJECT_ASSERT_RLOCKED(), VM_OBJECT_ASSERT_LOCKED()
    * The vm/vm_pager.h namespace pollution avoidance (forcing requiring
      sys/mutex.h in consumers directly to cater its inlining functions
      using VM_OBJECT_LOCK()) imposes that all the vm/vm_pager.h
      consumers now must include also sys/rwlock.h.
    * zfs requires a quite convoluted fix to include FreeBSD rwlocks into
      the compat layer because the name clash between FreeBSD and solaris
      versions must be avoided.
      At this purpose zfs redefines the vm_object locking functions
      directly, isolating the FreeBSD components in specific compat stubs.
    
    The KPI results heavilly broken by this commit.  Thirdy part ports must
    be updated accordingly (I can think off-hand of VirtualBox, for example).
    
    Sponsored by:	EMC / Isilon storage division
    Reviewed by:	jeff
    Reviewed by:	pjd (ZFS specific review)
    Discussed with:	alc
    Tested by:	pho
    89f6b863