Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbb5b7ae authored by Tom Zanussi's avatar Tom Zanussi Committed by Linus Torvalds
Browse files

relayfs: fix infinite loop with splice()



Running kmemtraced, which uses splice() on relayfs, causes a hard lock on
x86-64 SMP.  As described by Tom Zanussi:

  It looks like you hit the same problem as described here:

  commit 8191ecd1

      splice: fix infinite loop in generic_file_splice_read()

  relay uses the same loop but it never got noticed or fixed.

Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Tested-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: default avatarTom Zanussi <tzanussi@gmail.com>
Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 36137120
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -1317,13 +1317,10 @@ static ssize_t relay_file_splice_read(struct file *in,
		if (ret < 0)
			break;
		else if (!ret) {
			if (spliced)
				break;
			if (flags & SPLICE_F_NONBLOCK) {
			if (flags & SPLICE_F_NONBLOCK)
				ret = -EAGAIN;
			break;
		}
		}

		*ppos += ret;
		if (ret > len)