All of lore.kernel.org
 help / color / mirror / Atom feed
* [BUG] LTP test case readahead01 fails after commit 63d0f0a3c7
@ 2013-12-20  3:45 Wanlong Gao
  0 siblings, 0 replies; only message in thread
From: Wanlong Gao @ 2013-12-20  3:45 UTC (permalink / raw)
  To: LKML, Andrew Morton; +Cc: Jan Stancek, Cong Wang, Wu Fengguang, Wanlong Gao

Hi AKPM and folks,

LTP test readahead syscall return value like this:

=====================
static void test_invalid_fd(void)
{
	int fd[2];

	tst_resm(TINFO, "test_invalid_fd pipe");
	if (pipe(fd) < 0)
		tst_resm(TBROK | TERRNO, "Failed to create pipe");
	TEST(ltp_syscall(__NR_readahead, fd[0], 0, getpagesize()));
	check_ret(-1);
	check_errno(EINVAL);
	close(fd[0]);
	close(fd[1]);

	tst_resm(TINFO, "test_invalid_fd socket");
	fd[0] = socket(AF_INET, SOCK_STREAM, 0);
	if (fd[0] < 0)
		tst_resm(TBROK | TERRNO, "Failed to create socket");
	TEST(ltp_syscall(__NR_readahead, fd[0], 0, getpagesize()));
	check_ret(-1);
	check_errno(EINVAL);
	close(fd[0]);
}
====================================
FULL case code: https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/readahead/readahead01.c


This case passed before the following kernel commit[1],
it means kernel will return -1 with errno=EINVAL. But after
this commit[1], kernel will return 0 here.

The different between before and after this commit[1] is that:
BEFORE:
=============
do_readahead():
if (!mapping || !mapping->a_ops || !mapping->a_ops->readpage)
	return EINVAL;
============

AFTER:
======================
do_readahead():
if (!mapping || !mapping->a_ops)
	return EINVAL;

And followed with:

force_page_cache_readahead():
if (unlikely(!mapping->a_ops->readpage && !mapping->a_ops->readpages))
		return -EINVAL;
=====================

I think you must know which is right?




Thanks,
Wanlong Gao



[1]:
commit 63d0f0a3c7e1281fd79268a8d988167eff607fb6
Author: Andrew Morton <akpm@linux-foundation.org>
Date:   Tue Nov 12 15:07:09 2013 -0800

    mm/readahead.c:do_readhead(): don't check for ->readpage
    
    The callee force_page_cache_readahead() already does this and unlike
    do_readahead(), force_page_cache_readahead() remembers to check for
    ->readpages() as well.
    
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

diff --git a/mm/readahead.c b/mm/readahead.c
index e4ed041..5024183 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -569,7 +569,7 @@ static ssize_t
 do_readahead(struct address_space *mapping, struct file *filp,
             pgoff_t index, unsigned long nr)
 {
-       if (!mapping || !mapping->a_ops || !mapping->a_ops->readpage)
+       if (!mapping || !mapping->a_ops)
                return -EINVAL;
 
        force_page_cache_readahead(mapping, filp, index, nr);


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-12-20  3:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-20  3:45 [BUG] LTP test case readahead01 fails after commit 63d0f0a3c7 Wanlong Gao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.