#include <linux/anon_inodes.h>
 #include <linux/cdev.h>
+#include <linux/cleanup.h>
 #include <linux/debugfs.h>
 #include <linux/device.h>
 #include <linux/err.h>
        struct iio_dev *indio_dev = ib->indio_dev;
        struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
        struct iio_ioctl_handler *h;
-       int ret = -ENODEV;
-
-       mutex_lock(&iio_dev_opaque->info_exist_lock);
+       int ret;
 
+       guard(mutex)(&iio_dev_opaque->info_exist_lock);
        /*
         * The NULL check here is required to prevent crashing when a device
         * is being removed while userspace would still have open file handles
         * to try to access this device.
         */
        if (!indio_dev->info)
-               goto out_unlock;
+               return -ENODEV;
 
        list_for_each_entry(h, &iio_dev_opaque->ioctl_handlers, entry) {
                ret = h->ioctl(indio_dev, filp, cmd, arg);
                if (ret != IIO_IOCTL_UNHANDLED)
-                       break;
+                       return ret;
        }
 
-       if (ret == IIO_IOCTL_UNHANDLED)
-               ret = -ENODEV;
-
-out_unlock:
-       mutex_unlock(&iio_dev_opaque->info_exist_lock);
-
-       return ret;
+       return -ENODEV;
 }
 
 static const struct file_operations iio_buffer_fileops = {
 
        cdev_device_del(&iio_dev_opaque->chrdev, &indio_dev->dev);
 
-       mutex_lock(&iio_dev_opaque->info_exist_lock);
-
-       iio_device_unregister_debugfs(indio_dev);
+       scoped_guard(mutex, &iio_dev_opaque->info_exist_lock) {
+               iio_device_unregister_debugfs(indio_dev);
 
-       iio_disable_all_buffers(indio_dev);
+               iio_disable_all_buffers(indio_dev);
 
-       indio_dev->info = NULL;
+               indio_dev->info = NULL;
 
-       iio_device_wakeup_eventset(indio_dev);
-       iio_buffer_wakeup_poll(indio_dev);
-
-       mutex_unlock(&iio_dev_opaque->info_exist_lock);
+               iio_device_wakeup_eventset(indio_dev);
+               iio_buffer_wakeup_poll(indio_dev);
+       }
 
        iio_buffers_free_sysfs_and_mask(indio_dev);
 }