|
@@ -773,7 +773,16 @@ int get_sb_bdev(struct file_system_type *fs_type,
|
|
goto error_bdev;
|
|
goto error_bdev;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * s_umount nests inside bd_mutex during
|
|
|
|
+ * __invalidate_device(). close_bdev_exclusive()
|
|
|
|
+ * acquires bd_mutex and can't be called under
|
|
|
|
+ * s_umount. Drop s_umount temporarily. This is safe
|
|
|
|
+ * as we're holding an active reference.
|
|
|
|
+ */
|
|
|
|
+ up_write(&s->s_umount);
|
|
close_bdev_exclusive(bdev, mode);
|
|
close_bdev_exclusive(bdev, mode);
|
|
|
|
+ down_write(&s->s_umount);
|
|
} else {
|
|
} else {
|
|
char b[BDEVNAME_SIZE];
|
|
char b[BDEVNAME_SIZE];
|
|
|
|
|