• Frederic Weisbecker's avatar
    kill-the-bkl/reiserfs: reduce number of contentions in search_by_key() · 09eb47a7
    Frederic Weisbecker authored
    search_by_key() is a central function in reiserfs which searches
    the patch in the fs tree from the root to a node given its key.
    
    It is the function that is most requesting the write lock
    because it's a path very often used.
    
    Also we forget to release the lock while reading the next tree node,
    making us holding the lock in a wasteful way.
    
    Then we release the lock while reading the current node and its childs,
    all-in-one. It should be safe because we have a reference to these
    blocks and even if we read a block that will be concurrently changed,
    we have an fs_changed check later that will make us retry the path from
    the root.
    
    [ Impact: release the write lock while unused in a hot path ]
    
    Cc: Jeff Mahoney <jeffm@suse.com>
    Cc: Chris Mason <chris.mason@oracle.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Alexander Beregalov <a.beregalov@gmail.com>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    09eb47a7
stree.c 63.6 KB