xenbus: fix deadlock on writes to /proc/xen/xenbus
/proc/xen/xenbus does not work correctly. A read blocked waiting for a xenstore message holds the mutex needed for atomic file position updates. This blocks any writes on the same file handle, which can deadlock if the write is needed to unblock the read. Clear FMODE_ATOMIC_POS when opening this device to always get character device like sematics. Signed-off-by: David Vrabel <david.vrabel@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> Signed-off-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
Родитель
3da96be58f
Коммит
581d21a2d0
|
@ -538,6 +538,8 @@ static int xenbus_file_open(struct inode *inode, struct file *filp)
|
||||||
|
|
||||||
nonseekable_open(inode, filp);
|
nonseekable_open(inode, filp);
|
||||||
|
|
||||||
|
filp->f_mode &= ~FMODE_ATOMIC_POS; /* cdev-style semantics */
|
||||||
|
|
||||||
u = kzalloc(sizeof(*u), GFP_KERNEL);
|
u = kzalloc(sizeof(*u), GFP_KERNEL);
|
||||||
if (u == NULL)
|
if (u == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче