So that it can handle both of sync and normal wakeups in one place. And convert a sync user to reuse it. Cc: Jens Axboe <axboe@xxxxxxxxx> Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx> --- fs/splice.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/fs/splice.c b/fs/splice.c index 320cc65585b2..77251152e1b8 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -164,11 +164,15 @@ static const struct pipe_buf_operations user_page_pipe_buf_ops = { .get = generic_pipe_buf_get, }; -static void wakeup_pipe_readers(struct pipe_inode_info *pipe) +static void wakeup_pipe_readers(struct pipe_inode_info *pipe, bool sync) { smp_mb(); - if (waitqueue_active(&pipe->wait)) - wake_up_interruptible(&pipe->wait); + if (waitqueue_active(&pipe->wait)) { + if (sync) + wake_up_interruptible_sync(&pipe->wait); + else + wake_up_interruptible(&pipe->wait); + } kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); } @@ -243,10 +247,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, } if (do_wakeup) { - smp_mb(); - if (waitqueue_active(&pipe->wait)) - wake_up_interruptible_sync(&pipe->wait); - kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); + wakeup_pipe_readers(pipe, true); do_wakeup = 0; } @@ -258,7 +259,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, pipe_unlock(pipe); if (do_wakeup) - wakeup_pipe_readers(pipe); + wakeup_pipe_readers(pipe, false); while (page_nr < spd_pages) spd->spd_release(spd, page_nr++); @@ -1931,7 +1932,7 @@ retry: * If we put data in the output pipe, wakeup any potential readers. */ if (ret > 0) - wakeup_pipe_readers(opipe); + wakeup_pipe_readers(opipe, false); if (input_wakeup) wakeup_pipe_writers(ipipe); @@ -2012,7 +2013,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, * If we put data in the output pipe, wakeup any potential readers. */ if (ret > 0) - wakeup_pipe_readers(opipe); + wakeup_pipe_readers(opipe, false); return ret; } -- 1.7.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html