summaryrefslogtreecommitdiffstats
path: root/drivers/s390/char/vmur.h
diff options
context:
space:
mode:
authorFrank Munzert <munzert@de.ibm.com>2008-04-17 07:46:06 +0200
committerHeiko Carstens <heiko.carstens@de.ibm.com>2008-04-17 07:46:59 +0200
commita695f16729e00995fe72baf0e8bee4bf9c232ae0 (patch)
tree2fddf1722972564e33eedbedf9010bdd9735a74d /drivers/s390/char/vmur.h
parent[S390] tape: duplicate sysfs filename when setting tape device online (diff)
downloadlinux-a695f16729e00995fe72baf0e8bee4bf9c232ae0.tar.xz
linux-a695f16729e00995fe72baf0e8bee4bf9c232ae0.zip
[S390] vmur: Use wait queue instead of mutex to serialize open
If user space opens a unit record device node then vmur is leaving the kernel with lock open_mutex still held to prevent other processes from opening the device simultaneously. This causes lockdep to complain about a lock held when returning to user space. Now the mutex is replaced by a wait queue to serialize device open. Signed-off-by: Frank Munzert <munzert@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Diffstat (limited to 'drivers/s390/char/vmur.h')
-rw-r--r--drivers/s390/char/vmur.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/s390/char/vmur.h b/drivers/s390/char/vmur.h
index fa959644735a..fa320ad4593d 100644
--- a/drivers/s390/char/vmur.h
+++ b/drivers/s390/char/vmur.h
@@ -62,7 +62,6 @@ struct file_control_block {
struct urdev {
struct ccw_device *cdev; /* Backpointer to ccw device */
struct mutex io_mutex; /* Serialises device IO */
- struct mutex open_mutex; /* Serialises access to device */
struct completion *io_done; /* do_ur_io waits; irq completes */
struct device *device;
struct cdev *char_device;
@@ -71,6 +70,9 @@ struct urdev {
int class; /* VM device class */
int io_request_rc; /* return code from I/O request */
atomic_t ref_count; /* reference counter */
+ wait_queue_head_t wait; /* wait queue to serialize open */
+ int open_flag; /* "urdev is open" flag */
+ spinlock_t open_lock; /* serialize critical sections */
};
/*