diff --git a/fs/splice.c b/fs/splice.c
index 22adbbe51e52cef273299aca1daa8ad35f4132f0..4cf700d50b4037e6c334b0647cdb81b816f9ef65 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);