[vbox-dev] Recent linux kernel commit breaks VBox networking

walt w41ter at gmail.com
Tue Jan 18 19:16:02 GMT 2011


Hi VBox team,

This recent linux kernel commit breaks networking on VBox guests.  Why should
a file-system change affect networking, I wonder? I'm running the latest OSE
from your svn repo.

commit e462c448fdc89252d631b26ff0ed4f7ad6fe8ed2
Author: Davide Libenzi
Date:   Wed Jan 12 17:00:25 2011 -0800

     pipe: use event aware wakeups

     Send the events the wakeup refers to, so that epoll, and even the new poll
     code in fs/select.c can avoid wakeups if the events do not match the
     requested set.

diff --git a/fs/pipe.c b/fs/pipe.c
index 68f1f8e..04151e2 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -441,7 +441,7 @@ redo:
                         break;
                 }
                 if (do_wakeup) {
-                       wake_up_interruptible_sync(&pipe->wait);
+                       wake_up_interruptible_sync_poll(&pipe->wait, POLLOUT);
                         kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
                 }
                 pipe_wait(pipe);
@@ -450,7 +450,7 @@ redo:

         /* Signal writers asynchronously that there is more room. */
         if (do_wakeup) {
-               wake_up_interruptible_sync(&pipe->wait);
+               wake_up_interruptible_sync_poll(&pipe->wait, POLLOUT);
                 kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
         }
         if (ret > 0)
@@ -612,7 +612,7 @@ redo2:
                         break;
                 }
                 if (do_wakeup) {
-                       wake_up_interruptible_sync(&pipe->wait);
+                       wake_up_interruptible_sync_poll(&pipe->wait, POLLIN);
                         kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
                         do_wakeup = 0;
                 }
@@ -623,7 +623,7 @@ redo2:
  out:
         mutex_unlock(&inode->i_mutex);
         if (do_wakeup) {
-               wake_up_interruptible_sync(&pipe->wait);
+               wake_up_interruptible_sync_poll(&pipe->wait, POLLIN);
                 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
         }
         if (ret > 0)
@@ -715,7 +715,7 @@ pipe_release(struct inode *inode, int decr, int decw)
         if (!pipe->readers && !pipe->writers) {
                 free_pipe_info(inode);
         } else {
-               wake_up_interruptible_sync(&pipe->wait);
+               wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLOUT);
                 kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
                 kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
         }





More information about the vbox-dev mailing list