Readahead was factored to call generic_fadvise. That refactor broke readahead on block devices. The fix is to check F_ISFIFO rather than F_ISREG. It would also work to not check and let generic_fadvise to do the checking, but then the generic_fadvise return value would have to be checked and changed from -ESPIPE to -EINVAL to comply with the readahead(2) man-pages. Fixes: 3d8f7615319b ("vfs: implement readahead(2) using POSIX_FADV_WILLNEED") Signed-off-by: Reuben Hawkins <reubenhwk@xxxxxxxxx> --- mm/readahead.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/readahead.c b/mm/readahead.c index 47afbca1d122..877ddcb61c76 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -749,7 +749,7 @@ ssize_t ksys_readahead(int fd, loff_t offset, size_t count) */ ret = -EINVAL; if (!f.file->f_mapping || !f.file->f_mapping->a_ops || - !S_ISREG(file_inode(f.file)->i_mode)) + S_ISFIFO(file_inode(f.file)->i_mode)) goto out; ret = vfs_fadvise(f.file, offset, count, POSIX_FADV_WILLNEED); -- 2.34.1