diff --git a/fs/splice.c b/fs/splice.c index 5428b0ff3b6fcfebe6abd074cb9719ec48c9dbda..2282650bdbe89822b124ec2ad537a84dcd65122e 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -378,10 +378,11 @@ __generic_file_splice_read(struct file *in, loff_t *ppos, * If in nonblock mode then dont block on waiting * for an in-flight io page */ - if (flags & SPLICE_F_NONBLOCK) - break; - - lock_page(page); + if (flags & SPLICE_F_NONBLOCK) { + if (TestSetPageLocked(page)) + break; + } else + lock_page(page); /* * page was truncated, stop here. if this isn't the