vfs: add missing blkdev_put() in get_tree_bdev()
authorIan Kent <raven@themaw.net>
Wed, 2 Oct 2019 09:56:33 +0000 (17:56 +0800)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 10 Oct 2019 02:53:57 +0000 (22:53 -0400)
Is there are a couple of missing blkdev_put() in get_tree_bdev()?

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/super.c

index beaf076d97339a0f1fc041d5f52a8dedcc5fbcfa..530dd13fa98ba8eb5198c746fec3c75612a45cbc 100644 (file)
@@ -1296,6 +1296,7 @@ int get_tree_bdev(struct fs_context *fc,
        mutex_lock(&bdev->bd_fsfreeze_mutex);
        if (bdev->bd_fsfreeze_count > 0) {
                mutex_unlock(&bdev->bd_fsfreeze_mutex);
+               blkdev_put(bdev, mode);
                warnf(fc, "%pg: Can't mount, blockdev is frozen", bdev);
                return -EBUSY;
        }
@@ -1304,8 +1305,10 @@ int get_tree_bdev(struct fs_context *fc,
        fc->sget_key = bdev;
        s = sget_fc(fc, test_bdev_super_fc, set_bdev_super_fc);
        mutex_unlock(&bdev->bd_fsfreeze_mutex);
-       if (IS_ERR(s))
+       if (IS_ERR(s)) {
+               blkdev_put(bdev, mode);
                return PTR_ERR(s);
+       }
 
        if (s->s_root) {
                /* Don't summarily change the RO/RW state. */