staging: vme: use image mutex for ioctl()
authorDmitry Kalinkin <dmitry.kalinkin@gmail.com>
Thu, 26 Feb 2015 15:53:09 +0000 (18:53 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 7 Mar 2015 01:03:22 +0000 (17:03 -0800)
This implements more granular locking in vme_user_ioctl() by using separate
locks for each devfs device.

This also provides a synchronization between vme_user_read(), vme_user_write()
and vme_user_ioctl().

Signed-off-by: Dmitry Kalinkin <dmitry.kalinkin@gmail.com>
Cc: Martyn Welch <martyn.welch@ge.com>
Cc: Igor Alekseev <igor.alekseev@itep.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vme/devices/vme_user.c

index 8b1f533314331e5d9882316259954ef42254d355..87318386034bd857c758bfa45e7d999c07160e93 100644 (file)
@@ -41,7 +41,6 @@
 
 #include "vme_user.h"
 
-static DEFINE_MUTEX(vme_user_mutex);
 static const char driver_name[] = "vme_user";
 
 static int bus[VME_USER_BUS_MAX];
@@ -555,10 +554,12 @@ static long
 vme_user_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        int ret;
+       struct inode *inode = file_inode(file);
+       unsigned int minor = MINOR(inode->i_rdev);
 
-       mutex_lock(&vme_user_mutex);
-       ret = vme_user_ioctl(file_inode(file), file, cmd, arg);
-       mutex_unlock(&vme_user_mutex);
+       mutex_lock(&image[minor].mutex);
+       ret = vme_user_ioctl(inode, file, cmd, arg);
+       mutex_unlock(&image[minor].mutex);
 
        return ret;
 }