reiserfs: locking, handle nested locks properly
The reiserfs write lock replaced the BKL and uses similar semantics. Frederic's locking code makes a distinction between when the lock is nested and when it's being acquired/released, but I don't think that's the right distinction to make. The right distinction is between the lock being released at end-of-use and the lock being released for a schedule. The unlock should return the depth and the lock should restore it, rather than the other way around as it is now. This patch implements that and adds a number of places where the lock should be dropped. Signed-off-by: Jeff Mahoney <jeffm@suse.com>
This commit is contained in:

committed by
Jeff Mahoney

parent
4c05141df5
commit
278f6679f4
@@ -1340,10 +1340,11 @@ struct buffer_head *reiserfs_read_bitmap_block(struct super_block *sb,
|
||||
"reading failed", __func__, block);
|
||||
else {
|
||||
if (buffer_locked(bh)) {
|
||||
int depth;
|
||||
PROC_INFO_INC(sb, scan_bitmap.wait);
|
||||
reiserfs_write_unlock(sb);
|
||||
depth = reiserfs_write_unlock_nested(sb);
|
||||
__wait_on_buffer(bh);
|
||||
reiserfs_write_lock(sb);
|
||||
reiserfs_write_lock_nested(sb, depth);
|
||||
}
|
||||
BUG_ON(!buffer_uptodate(bh));
|
||||
BUG_ON(atomic_read(&bh->b_count) == 0);
|
||||
|
Reference in New Issue
Block a user