int i;
 
        for (i = 0; i < sbi->s_ndevs; i++) {
-               blkdev_put(FDEV(i).bdev, sbi->sb->s_type);
+               if (i > 0)
+                       blkdev_put(FDEV(i).bdev, sbi->sb->s_type);
 #ifdef CONFIG_BLK_DEV_ZONED
                kvfree(FDEV(i).blkz_seq);
 #endif
        sbi->aligned_blksize = true;
 
        for (i = 0; i < max_devices; i++) {
-
-               if (i > 0 && !RDEV(i).path[0])
+               if (i == 0)
+                       FDEV(0).bdev = sbi->sb->s_bdev;
+               else if (!RDEV(i).path[0])
                        break;
 
-               if (max_devices == 1) {
-                       /* Single zoned block device mount */
-                       FDEV(0).bdev =
-                               blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev, mode,
-                                                 sbi->sb->s_type, NULL);
-               } else {
+               if (max_devices > 1) {
                        /* Multi-device mount */
                        memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
                        FDEV(i).total_segments =
                                FDEV(i).end_blk = FDEV(i).start_blk +
                                        (FDEV(i).total_segments <<
                                        sbi->log_blocks_per_seg) - 1;
+                               FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path,
+                                       mode, sbi->sb->s_type, NULL);
                        }
-                       FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path, mode,
-                                                         sbi->sb->s_type,
-                                                         NULL);
                }
                if (IS_ERR(FDEV(i).bdev))
                        return PTR_ERR(FDEV(i).bdev);