kill-the-bkl/reiserfs: conditionaly release the write lock on fs_changed()
The goal of fs_changed() is to check whether the tree changed during a schedule(). This is a BKL legacy. A recent patch added an explicit unconditional release/reacquire of the write lock around the cond_resched() called inside fs_changed. But it's wasteful to unconditionally do that, we are creating superfluous lock contention in !TIF_NEED_RESCHED case. This patch manage that by calling reiserfs_cond_resched() from fs_changed() which only releases the lock if we are going to reschedule. [ Impact: inject less lock contention and tree job retries ] 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: Frederic Weisbecker <fweisbec@gmail.com>
This commit is contained in:
Родитель
e43d3f21c5
Коммит
d663af807d
|
@ -1348,9 +1348,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode)
|
|||
#define __fs_changed(gen,s) (gen != get_generation (s))
|
||||
#define fs_changed(gen,s) \
|
||||
({ \
|
||||
reiserfs_write_unlock(s); \
|
||||
cond_resched(); \
|
||||
reiserfs_write_lock(s); \
|
||||
reiserfs_cond_resched(s); \
|
||||
__fs_changed(gen, s); \
|
||||
})
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче