set_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state);
        }
  
 -      if (!bdev_nonrot(bdev_handle->bdev))
 +      if (!bdev_nonrot(file_bdev(bdev_file)))
                fs_devices->rotating = true;
  
 -      if (bdev_max_discard_sectors(bdev_handle->bdev))
 +      if (bdev_max_discard_sectors(file_bdev(bdev_file)))
                fs_devices->discardable = true;
  
 -      device->bdev_handle = bdev_handle;
 -      device->bdev = bdev_handle->bdev;
 +      device->bdev_file = bdev_file;
 +      device->bdev = file_bdev(bdev_file);
        clear_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
  
+       if (device->devt != device->bdev->bd_dev) {
+               btrfs_warn(NULL,
+                          "device %s maj:min changed from %d:%d to %d:%d",
+                          device->name->str, MAJOR(device->devt),
+                          MINOR(device->devt), MAJOR(device->bdev->bd_dev),
+                          MINOR(device->bdev->bd_dev));
+ 
+               device->devt = device->bdev->bd_dev;
+       }
+ 
        fs_devices->open_devices++;
        if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state) &&
            device->devid != BTRFS_DEV_REPLACE_DEVID) {
 
                if (zinfo->max_active_zones == 0)
                        continue;
  
 +              nofs_flags = memalloc_nofs_save();
                ret = blkdev_zone_mgmt(device->bdev, REQ_OP_ZONE_FINISH,
                                       physical >> SECTOR_SHIFT,
 -                                     zinfo->zone_size >> SECTOR_SHIFT,
 -                                     GFP_NOFS);
 +                                     zinfo->zone_size >> SECTOR_SHIFT);
 +              memalloc_nofs_restore(nofs_flags);
  
-               if (ret)
+               if (ret) {
+                       up_read(&dev_replace->rwsem);
                        return ret;
+               }
  
                if (!(block_group->flags & BTRFS_BLOCK_GROUP_DATA))
                        zinfo->reserved_active_zones++;