fix the deadlock in qib_fs
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 29 May 2010 01:32:44 +0000 (21:32 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 4 Jun 2010 21:16:27 +0000 (17:16 -0400)
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>
drivers/infiniband/hw/qib/qib_fs.c

index edef8527eb34899a85c4b61fd33605e240bda49c..844954bf417b7cc10fd13a3c103388b4099e8f79 100644 (file)
@@ -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) {
                spin_unlock_irqrestore(&qib_devs_lock, flags);
                ret = add_cntr_files(sb, dd);
-               if (ret) {
-                       deactivate_super(sb);
+               if (ret)
                        goto bail;
-               }
                spin_lock_irqsave(&qib_devs_lock, flags);
        }