]> git.baikalelectronics.ru Git - kernel.git/commit
vfs: Avoid softlockups with sendfile(2)
authorJan Kara <jack@suse.cz>
Mon, 23 Nov 2015 12:09:51 +0000 (13:09 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 24 Nov 2015 02:15:30 +0000 (21:15 -0500)
commit47d9f32bf5758df51224a69030c4fde2e3e5e13a
tree3c79aaf1df2abc9ccdb6e9231cda607211d523fc
parent5b78a74636ec0c5c72e0f76f88aa66908da982bb
vfs: Avoid softlockups with sendfile(2)

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 <dvyukov@google.com>
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/splice.c