1. 25 9月, 2008 3 次提交
    • C
      Btrfs: Use a mutex in the extent buffer for tree block locking · a61e6f29
      Chris Mason 提交于
      This replaces the use of the page cache lock bit for locking, which wasn't
      suitable for block size < page size and couldn't be used recursively.
      
      The mutexes alone don't fix either problem, but they are the first step.
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      a61e6f29
    • C
      Btrfs: Reduce contention on the root node · f9efa9c7
      Chris Mason 提交于
      This calls unlock_up sooner in btrfs_search_slot in order to decrease the
      amount of work done with the higher level tree locks held.
      
      Also, it changes btrfs_tree_lock to spin for a big against the page lock
      before scheduling.  This makes a big difference in context switch rate under
      highly contended workloads.
      
      Longer term, a better locking structure is needed than the page lock.
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      f9efa9c7
    • C
      Btrfs: Start btree concurrency work. · 925baedd
      Chris Mason 提交于
      The allocation trees and the chunk trees are serialized via their own
      dedicated mutexes.  This means allocation location is still not very
      fine grained.
      
      The main FS btree is protected by locks on each block in the btree.  Locks
      are taken top / down, and as processing finishes on a given level of the
      tree, the lock is released after locking the lower level.
      
      The end result of a search is now a path where only the lowest level
      is locked.  Releasing or freeing the path drops any locks held.
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      925baedd