mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 21:01:29 +00:00
reiserfs: Fix softlockup while waiting on an inode
When we wait for an inode through reiserfs_iget(), we hold the reiserfs lock. And waiting for an inode may imply waiting for its writeback. But the inode writeback path may also require the reiserfs lock, which leads to a deadlock. We just need to release the reiserfs lock from reiserfs_iget() to fix this. Reported-by: Alexander Beregalov <a.beregalov@gmail.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Tested-by: Christian Kujau <lists@nerdbynature.de> Cc: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
bbec919150
commit
175359f89d
@ -1497,9 +1497,11 @@ struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key)
|
||||
|
||||
args.objectid = key->on_disk_key.k_objectid;
|
||||
args.dirid = key->on_disk_key.k_dir_id;
|
||||
reiserfs_write_unlock(s);
|
||||
inode = iget5_locked(s, key->on_disk_key.k_objectid,
|
||||
reiserfs_find_actor, reiserfs_init_locked_inode,
|
||||
(void *)(&args));
|
||||
reiserfs_write_lock(s);
|
||||
if (!inode)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user