Messages in this thread | | | From | Frederic Weisbecker <> | Subject | [GIT PULL] reiserfs fixes | Date | Sat, 2 Jan 2010 02:27:16 +0100 |
| |
Linus,
Please pull the reiserfs/kill-bkl branch that can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing.git reiserfs/kill-bkl
These changes fix a lot of lock inversions, some of them were triggering soft lockups very easily in xattrs operations.
As the reiserfs lock is a giant lock (in reiserfs scope), these dependency inversions couldn't get smart fixes without a deep locking rewrite.
That's why you'll mostly find dependency inversion fixes based on such pattern:
reiserfs_write_unlock() mutex_lock(random_lock) reiserfs_write_lock()
This is not beautiful but at least that's better than the bkl.
Oh and I expect other lock inversions will get reported in the future due to rare and then yet untested paths.
Thanks, Frederic ---
Frederic Weisbecker (13): reiserfs: Fix possible recursive lock reiserfs: Fix reiserfs lock and journal lock inversion dependency reiserfs: Fix reiserfs lock <-> inode mutex dependency inversion reiserfs: Fix remaining in-reclaim-fs <-> reclaim-fs-on locking inversion reiserfs: Fix reiserfs lock <-> i_xattr_sem dependency inversion reiserfs: Warn on lock relax if taken recursively reiserfs: Fix reiserfs lock <-> i_mutex dependency inversion on xattr reiserfs: Relax reiserfs lock while freeing the journal reiserfs: Relax lock before open xattr dir in reiserfs_xattr_set_handle() reiserfs: Fix unwanted recursive reiserfs lock in reiserfs_unlink() reiserfs: Fix journal mutex <-> inode mutex lock inversion reiserfs: Safely acquire i_mutex from reiserfs_for_each_xattr reiserfs: Safely acquire i_mutex from xattr_rmdir
fs/reiserfs/bitmap.c | 3 +++ fs/reiserfs/inode.c | 5 +++-- fs/reiserfs/journal.c | 18 ++++++++++++++---- fs/reiserfs/lock.c | 9 +++++++++ fs/reiserfs/namei.c | 7 ++++--- fs/reiserfs/xattr.c | 26 ++++++++++++++++++++------ include/linux/reiserfs_fs.h | 26 ++++++++++++++++++++++++++ 7 files changed, 79 insertions(+), 15 deletions(-)
| |