Fixed the issue for me.

Tested-by: Dmitry Vyukov <[email protected]>

On Mon, Nov 23, 2015 at 1:09 PM, Jan Kara <[email protected]> wrote:
> The following test program from Dmitry can cause softlockups or RCU
> stalls as it copies 1GB from tmpfs into eventfd and we don't have any
> scheduling point at that path in sendfile(2) implementation:
>
>         int r1 = eventfd(0, 0);
>         int r2 = memfd_create("", 0);
>         unsigned long n = 1<<30;
>         fallocate(r2, 0, 0, n);
>         sendfile(r1, r2, 0, n);
>
> Add cond_resched() into __splice_from_pipe() to fix the problem.
>
> CC: Dmitry Vyukov <[email protected]>
> CC: [email protected]
> Signed-off-by: Jan Kara <[email protected]>
> ---
>  fs/splice.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/fs/splice.c b/fs/splice.c
> index 22adbbe51e52..4cf700d50b40 100644
> --- a/fs/splice.c
> +++ b/fs/splice.c
> @@ -891,6 +891,7 @@ ssize_t __splice_from_pipe(struct pipe_inode_info *pipe, 
> struct splice_desc *sd,
>
>         splice_from_pipe_begin(sd);
>         do {
> +               cond_resched();
>                 ret = splice_from_pipe_next(pipe, sd);
>                 if (ret > 0)
>                         ret = splice_from_pipe_feed(pipe, sd, actor);
> --
> 2.1.4
>
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to