[PATCH 2/7] kill-the-bkl/reiserfs: conditionaly release the write lock on fs_changed()
From: Frederic Weisbecker
Date: Fri May 08 2009 - 14:36:24 EST
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@xxxxxxxx>
Cc: Chris Mason <chris.mason@xxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxx>
Cc: Alexander Beregalov <a.beregalov@xxxxxxxxx>
Signed-off-by: Frederic Weisbecker <fweisbec@xxxxxxxxx>
---
include/linux/reiserfs_fs.h | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
index 995bdf9..39bd4ea 100644
--- a/include/linux/reiserfs_fs.h
+++ b/include/linux/reiserfs_fs.h
@@ -1317,9 +1317,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); \
})
--
1.6.2.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/