Skip to contentSkip to conversation

Patch "vfs: Avoid softlockups with sendfile(2)" has been added to the 3.10-stable tree

PATCH [email protected] 1 participant 1 message Mar 1, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

vfs: Avoid softlockups with sendfile(2)

to the 3.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
vfs-avoid-softlockups-with-sendfile-2.patch
and it can be found in the queue-3.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From c2489e07c0a71a56fb2c84bc0ee66cddfca7d068 Mon Sep 17 00:00:00 2001

From: Jan Kara <[email protected]>
Date: Mon, 23 Nov 2015 13:09:51 +0100
Subject: vfs: Avoid softlockups with sendfile(2)

From: Jan Kara <[email protected]>

commit c2489e07c0a71a56fb2c84bc0ee66cddfca7d068 upstream.

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.

---
 fs/splice.c |    1 +
 1 file changed, 1 insertion(+)
fs/splice.c +1 -0
@@ -949,6 +949,7 @@ ssize_t __splice_from_pipe(struct pipe_i
 
 	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);

Patches currently in stable-queue which might be from [email protected] are

queue-3.10/vfs-avoid-softlockups-with-sendfile-2.patch