• F
    kill-the-BKL/reiserfs: add reiserfs_cond_resched() · e43d3f21
    Frederic Weisbecker 提交于
    Usually, when we call cond_resched(), we want the write lock
    to be released and then reacquired once we return from scheduling.
    Not only does it follow the previous bkl based locking scheme, but
    it also let other waiters to get the lock.
    
    But if we aren't going to reschedule(), such as in !TIF_NEED_RESCHED
    case, it's useless to release the lock. Worse, if we release and reacquire
    the lock whereas it is not needed, we create useless contentions. Also
    if someone takes the lock while we are modifying or reading the tree,
    there are good chances we'll have to retry our operation, eg if the
    block we were seeeking has moved.
    
    So this patch introduces a helper which only unlock the write lock
    if we are going to schedule.
    
    [ Impact: prepare to inject less lock contention and less tree operation attempts ]
    Reported-by: NAndi Kleen <andi@firstfloor.org>
    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: NFrederic Weisbecker <fweisbec@gmail.com>
    e43d3f21
reiserfs_fs.h 91.2 KB