Commit c88bc60a authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-2.6.40/splice' of git://git.kernel.dk/linux-2.6-block

* 'for-2.6.40/splice' of git://git.kernel.dk/linux-2.6-block:
  splice: add wakeup_pipe_readers()
parents 929cfdd5 825cdcb1
...@@ -162,6 +162,14 @@ static const struct pipe_buf_operations user_page_pipe_buf_ops = { ...@@ -162,6 +162,14 @@ static const struct pipe_buf_operations user_page_pipe_buf_ops = {
.get = generic_pipe_buf_get, .get = generic_pipe_buf_get,
}; };
static void wakeup_pipe_readers(struct pipe_inode_info *pipe)
{
smp_mb();
if (waitqueue_active(&pipe->wait))
wake_up_interruptible(&pipe->wait);
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
}
/** /**
* splice_to_pipe - fill passed data into a pipe * splice_to_pipe - fill passed data into a pipe
* @pipe: pipe to fill * @pipe: pipe to fill
...@@ -247,12 +255,8 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, ...@@ -247,12 +255,8 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
pipe_unlock(pipe); pipe_unlock(pipe);
if (do_wakeup) { if (do_wakeup)
smp_mb(); wakeup_pipe_readers(pipe);
if (waitqueue_active(&pipe->wait))
wake_up_interruptible(&pipe->wait);
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
}
while (page_nr < spd_pages) while (page_nr < spd_pages)
spd->spd_release(spd, page_nr++); spd->spd_release(spd, page_nr++);
...@@ -1892,12 +1896,9 @@ static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe, ...@@ -1892,12 +1896,9 @@ static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe,
/* /*
* If we put data in the output pipe, wakeup any potential readers. * If we put data in the output pipe, wakeup any potential readers.
*/ */
if (ret > 0) { if (ret > 0)
smp_mb(); wakeup_pipe_readers(opipe);
if (waitqueue_active(&opipe->wait))
wake_up_interruptible(&opipe->wait);
kill_fasync(&opipe->fasync_readers, SIGIO, POLL_IN);
}
if (input_wakeup) if (input_wakeup)
wakeup_pipe_writers(ipipe); wakeup_pipe_writers(ipipe);
...@@ -1976,12 +1977,8 @@ static int link_pipe(struct pipe_inode_info *ipipe, ...@@ -1976,12 +1977,8 @@ static int link_pipe(struct pipe_inode_info *ipipe,
/* /*
* If we put data in the output pipe, wakeup any potential readers. * If we put data in the output pipe, wakeup any potential readers.
*/ */
if (ret > 0) { if (ret > 0)
smp_mb(); wakeup_pipe_readers(opipe);
if (waitqueue_active(&opipe->wait))
wake_up_interruptible(&opipe->wait);
kill_fasync(&opipe->fasync_readers, SIGIO, POLL_IN);
}
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment