• Frederic Weisbecker's avatar
    kill-the-bkl/reiserfs: use mutex_lock in reiserfs_mutex_lock_safe · c63e3c0b
    Frederic Weisbecker authored
    reiserfs_mutex_lock_safe() is a hack to avoid any dependency between
    an internal reiserfs mutex and the write lock, it has been proposed
    to follow the old bkl logic.
    
    The code does the following:
    
    while (!mutex_trylock(m)) {
    	reiserfs_write_unlock(s);
    	schedule();
    	reiserfs_write_lock(s);
    }
    
    It then imitate the implicit behaviour of the lock when it was
    a Bkl and hadn't such dependency:
    
    mutex_lock(m) {
    	if (fastpath)
    		let's go
    	else {
    		wait_for_mutex() {
    			schedule() {
    				unlock_kernel()
    				reacquire_lock_kernel()
    			}
    		}
    	}
    }
    
    The problem is that by using such explicit schedule(), we don't
    benefit of the adaptive mutex spinning on owner.
    
    The logic in use now is:
    
    reiserfs_write_unlock(s);
    mutex_lock(m); // -> possible adaptive spinning
    reiserfs_write_lock(s);
    
    [ Impact: restore the use of adaptive spinning mutexes in reiserfs ]
    
    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>
    c63e3c0b
journal.c 124 KB