|
@@ -509,19 +509,22 @@ static long pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-/* No kernel lock held - fine */
|
|
|
|
-static __poll_t
|
|
|
|
-pipe_poll(struct file *filp, poll_table *wait)
|
|
|
|
|
|
+static struct wait_queue_head *
|
|
|
|
+pipe_get_poll_head(struct file *filp, __poll_t events)
|
|
{
|
|
{
|
|
- __poll_t mask;
|
|
|
|
struct pipe_inode_info *pipe = filp->private_data;
|
|
struct pipe_inode_info *pipe = filp->private_data;
|
|
- int nrbufs;
|
|
|
|
|
|
|
|
- poll_wait(filp, &pipe->wait, wait);
|
|
|
|
|
|
+ return &pipe->wait;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* No kernel lock held - fine */
|
|
|
|
+static __poll_t pipe_poll_mask(struct file *filp, __poll_t events)
|
|
|
|
+{
|
|
|
|
+ struct pipe_inode_info *pipe = filp->private_data;
|
|
|
|
+ int nrbufs = pipe->nrbufs;
|
|
|
|
+ __poll_t mask = 0;
|
|
|
|
|
|
/* Reading only -- no need for acquiring the semaphore. */
|
|
/* Reading only -- no need for acquiring the semaphore. */
|
|
- nrbufs = pipe->nrbufs;
|
|
|
|
- mask = 0;
|
|
|
|
if (filp->f_mode & FMODE_READ) {
|
|
if (filp->f_mode & FMODE_READ) {
|
|
mask = (nrbufs > 0) ? EPOLLIN | EPOLLRDNORM : 0;
|
|
mask = (nrbufs > 0) ? EPOLLIN | EPOLLRDNORM : 0;
|
|
if (!pipe->writers && filp->f_version != pipe->w_counter)
|
|
if (!pipe->writers && filp->f_version != pipe->w_counter)
|
|
@@ -1020,7 +1023,8 @@ const struct file_operations pipefifo_fops = {
|
|
.llseek = no_llseek,
|
|
.llseek = no_llseek,
|
|
.read_iter = pipe_read,
|
|
.read_iter = pipe_read,
|
|
.write_iter = pipe_write,
|
|
.write_iter = pipe_write,
|
|
- .poll = pipe_poll,
|
|
|
|
|
|
+ .get_poll_head = pipe_get_poll_head,
|
|
|
|
+ .poll_mask = pipe_poll_mask,
|
|
.unlocked_ioctl = pipe_ioctl,
|
|
.unlocked_ioctl = pipe_ioctl,
|
|
.release = pipe_release,
|
|
.release = pipe_release,
|
|
.fasync = pipe_fasync,
|
|
.fasync = pipe_fasync,
|