Merge tag 'ceph-for-6.8-rc1' of https://github.com/ceph/ceph-client
[linux-block.git] / drivers / uio / uio.c
index 62082d64ece00613a9d82eadd0552f6262cb9c10..2d572f6c8ec833023450136e3e2278d46d8937ae 100644 (file)
@@ -466,13 +466,13 @@ static int uio_open(struct inode *inode, struct file *filep)
 
        mutex_lock(&minor_lock);
        idev = idr_find(&uio_idr, iminor(inode));
-       mutex_unlock(&minor_lock);
        if (!idev) {
                ret = -ENODEV;
+               mutex_unlock(&minor_lock);
                goto out;
        }
-
        get_device(&idev->dev);
+       mutex_unlock(&minor_lock);
 
        if (!try_module_get(idev->owner)) {
                ret = -ENODEV;
@@ -1064,9 +1064,8 @@ void uio_unregister_device(struct uio_info *info)
        wake_up_interruptible(&idev->wait);
        kill_fasync(&idev->async_queue, SIGIO, POLL_HUP);
 
-       device_unregister(&idev->dev);
-
        uio_free_minor(minor);
+       device_unregister(&idev->dev);
 
        return;
 }