diff options
author | Daniel De Graaf <dgdegra@tycho.nsa.gov> | 2010-09-07 11:42:18 -0400 |
---|---|---|
committer | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2010-09-08 09:18:02 -0400 |
commit | 76ce7618f9a24f7b13958c67f7d5ccfcdab71475 (patch) | |
tree | ef9dc704b151062924cc1ae1a43aeea2b3d76d5e | |
parent | 6d6df2e412297b8047c407b3abcd045a67c96744 (diff) |
xenbus: add missing wakeup in concurrent read/write
If an application has a dedicated read thread watching xenbus and
another thread writes an XS_WATCH message that generates a synthetic
"OK" reply, this reply will be enqueued in the buffer without waking up
the reader. This can cause a deadlock in the application if it then
waits for the read thread to receive the queued message.
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
commit e752969f502a511e83f841aa01d6cd332e6d85a0
Author: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Date: Tue Sep 7 11:21:52 2010 -0400
xenbus: fix deadlock in concurrent read/write
If an application has a dedicated read thread watching xenbus and another
thread writes an XS_WATCH message that generates a synthetic "OK" reply,
this reply will be enqueued in the buffer without waking up the reader.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
-rw-r--r-- | drivers/xen/xenfs/xenbus.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/xen/xenfs/xenbus.c b/drivers/xen/xenfs/xenbus.c index 46cf4048e60e..c4c7db8363e7 100644 --- a/drivers/xen/xenfs/xenbus.c +++ b/drivers/xen/xenfs/xenbus.c | |||
@@ -405,6 +405,7 @@ static int xenbus_write_watch(unsigned msg_type, struct xenbus_file_priv *u) | |||
405 | 405 | ||
406 | mutex_lock(&u->reply_mutex); | 406 | mutex_lock(&u->reply_mutex); |
407 | rc = queue_reply(&u->read_buffers, &reply, sizeof(reply)); | 407 | rc = queue_reply(&u->read_buffers, &reply, sizeof(reply)); |
408 | wake_up(&u->read_waitq); | ||
408 | mutex_unlock(&u->reply_mutex); | 409 | mutex_unlock(&u->reply_mutex); |
409 | } | 410 | } |
410 | 411 | ||