--- e5efbb96d2bdad48ebb4266198fd3b9f5fa7f629 +++ 7394e9e17534ecb03573e28b2288d06cccf24a32 @@ -365,7 +365,17 @@ __generic_file_splice_read(struct file * * If the page isn't uptodate, we may need to start io on it */ if (!PageUptodate(page)) { - lock_page(page); + /* + * If in nonblock mode then dont block on waiting + * for an in-flight io page + */ + if (flags & SPLICE_F_NONBLOCK) { + if (!trylock_page(page)) { + error = -EAGAIN; + break; + } + } else + lock_page(page); /* * Page was truncated, or invalidated by the