fix the deadlock in qib_fs
get_sb_single() calls fill_super with superblock locked; calling deactivate_super() will deadlock immedately. Moreover, if fill_super callback returns an error, get_sb_single() will release the reference to superblock itself just fine. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
0abbb609ac
commit
971b2e8a3f
|
@ -542,10 +542,8 @@ static int qibfs_fill_super(struct super_block *sb, void *data, int silent)
|
||||||
list_for_each_entry_safe(dd, tmp, &qib_dev_list, list) {
|
list_for_each_entry_safe(dd, tmp, &qib_dev_list, list) {
|
||||||
spin_unlock_irqrestore(&qib_devs_lock, flags);
|
spin_unlock_irqrestore(&qib_devs_lock, flags);
|
||||||
ret = add_cntr_files(sb, dd);
|
ret = add_cntr_files(sb, dd);
|
||||||
if (ret) {
|
if (ret)
|
||||||
deactivate_super(sb);
|
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
|
||||||
spin_lock_irqsave(&qib_devs_lock, flags);
|
spin_lock_irqsave(&qib_devs_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue