git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ieee1394: raw1394: fix possible deadlock in multithreaded clients
[pandora-kernel.git]
/
drivers
/
ieee1394
/
raw1394.c
diff --git
a/drivers/ieee1394/raw1394.c
b/drivers/ieee1394/raw1394.c
index
2cf4ae7
..
4bdfff0
100644
(file)
--- a/
drivers/ieee1394/raw1394.c
+++ b/
drivers/ieee1394/raw1394.c
@@
-2268,7
+2268,8
@@
static ssize_t raw1394_write(struct file *file, const char __user * buffer,
return -EFAULT;
}
return -EFAULT;
}
- mutex_lock(&fi->state_mutex);
+ if (!mutex_trylock(&fi->state_mutex))
+ return -EAGAIN;
switch (fi->state) {
case opened:
switch (fi->state) {
case opened:
@@
-2548,7
+2549,8
@@
static int raw1394_mmap(struct file *file, struct vm_area_struct *vma)
struct file_info *fi = file->private_data;
int ret;
struct file_info *fi = file->private_data;
int ret;
- mutex_lock(&fi->state_mutex);
+ if (!mutex_trylock(&fi->state_mutex))
+ return -EAGAIN;
if (fi->iso_state == RAW1394_ISO_INACTIVE)
ret = -EINVAL;
if (fi->iso_state == RAW1394_ISO_INACTIVE)
ret = -EINVAL;
@@
-2669,7
+2671,8
@@
static long raw1394_ioctl(struct file *file, unsigned int cmd,
break;
}
break;
}
- mutex_lock(&fi->state_mutex);
+ if (!mutex_trylock(&fi->state_mutex))
+ return -EAGAIN;
switch (fi->iso_state) {
case RAW1394_ISO_INACTIVE:
switch (fi->iso_state) {
case RAW1394_ISO_INACTIVE: