mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 11:44:01 +08:00
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()
This commit is contained in:
commit
c88bc60a3b
33
fs/splice.c
33
fs/splice.c
@ -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,
|
|||||||
|
|
||||||
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 @@ retry:
|
|||||||
/*
|
/*
|
||||||
* 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,
|
|||||||
/*
|
/*
|
||||||
* 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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user