On Mon, 28 Feb 2005, Andrea Arcangeli wrote:
> 
> Thanks, I'll check it in the next bk snapshot.

Here's my version of the poll changes. The EPIPE one is just your original 
first patch hunk (with a properly updated commit message).

                Linus

-----

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/02/28 08:36:14-08:00 [EMAIL PROTECTED] 
#   Make pipe "poll()" take direction of pipe into account.
#   
#   The pipe code has traditionally not cared about which end-point of the
#   pipe you are polling, meaning that if you poll the write-only end of a
#   pipe, it will still set the "this pipe is readable" bits if there is
#   data to be read on the read side.
#   
#   That makes no sense, and together with the new bigger buffers breaks
#   python-twisted.
#   
#   Based on debugging/patch by Andrea Arcangeli and testcase from
#   Thomas Crhak
# 
# fs/pipe.c
#   2005/02/28 08:36:06-08:00 [EMAIL PROTECTED] +11 -6
#   Make pipe "poll()" take direction of pipe into account.
# 
diff -Nru a/fs/pipe.c b/fs/pipe.c
--- a/fs/pipe.c 2005-02-28 12:28:35 -08:00
+++ b/fs/pipe.c 2005-02-28 12:28:35 -08:00
@@ -398,13 +398,18 @@
 
        /* Reading only -- no need for acquiring the semaphore.  */
        nrbufs = info->nrbufs;
-       mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
-       mask |= (nrbufs < PIPE_BUFFERS) ? POLLOUT | POLLWRNORM : 0;
+       mask = 0;
+       if (filp->f_mode & FMODE_READ) {
+               mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
+               if (!PIPE_WRITERS(*inode) && filp->f_version != 
PIPE_WCOUNTER(*inode))
+                       mask |= POLLHUP;
+       }
 
-       if (!PIPE_WRITERS(*inode) && filp->f_version != PIPE_WCOUNTER(*inode))
-               mask |= POLLHUP;
-       if (!PIPE_READERS(*inode))
-               mask |= POLLERR;
+       if (filp->f_mode & FMODE_WRITE) {
+               mask |= (nrbufs < PIPE_BUFFERS) ? POLLOUT | POLLWRNORM : 0;
+               if (!PIPE_READERS(*inode))
+                       mask |= POLLERR;
+       }
 
        return mask;
 }
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to