Re: [PATCH] VFS readahead bug in 2.6.8-rc[1-3]

From: Phillip Lougher
Date: Fri Aug 06 2004 - 14:50:26 EST


Nick Piggin wrote:
Phillip Lougher wrote:

It doesn't work. It correctly handles the case where *ppos is equal
to i_size on entry to the function (and this does work for files 0, 4k
and n * 4k in length), but it doesn't handle readahead inside the for
loop. The check needs to be in the for loop.



I don't quite follow. What is i_size, *ppos, and desc->count
required for your problem to trigger?


From some output I prepared earlier :-)

Aug 6 16:15:29 pierrot kernel: Entered do_generic_mapping_read: *ppos 0x0, isize 0x3000
Aug 6 16:15:29 pierrot kernel: iteration 0x1
Aug 6 16:15:29 pierrot kernel: Entered squashfs_readpage, page index 0x0, inode->i_size 0x3000
Aug 6 16:15:29 pierrot kernel: at (ret == nr && desc->count) check: ret==nr ? yes, desc->count 0x3000
Aug 6 16:15:29 pierrot kernel: iteration 0x2
Aug 6 16:15:29 pierrot kernel: at (ret == nr && desc->count) check: ret==nr ? yes, desc->count 0x2000
Aug 6 16:15:29 pierrot kernel: iteration 0x3
Aug 6 16:15:29 pierrot kernel: at (ret == nr && desc->count) check: ret==nr ? yes, desc->count 0x1000
Aug 6 16:15:29 pierrot kernel: iteration 0x4
Aug 6 16:15:29 pierrot kernel: at "readpage: label", i_size 0x3000, *ppos 0x0, index 0x3
Aug 6 16:15:29 pierrot kernel: Entered squashfs_readpage, page index 0x3, inode->i_size 0x3000

iteration 0x1 etc are the separate passes through the loop.
The first squashfs_readpage is called via page_cache_readahead, which
reads pages 0, 1 and 2 (which is why no readpage is called in
iterations 2 and 3). The second squashfs_readpage is called in the
fourth loop iteration by the 'goto no_cached_page' code path when no
page has been found by find_get_page, this is presumably because the
index is now out of bounds.

As I said in my previous email, I'm going to put an index
check into my code. I don't want this argument to proceed
and myself to start (?) to look like an ass.

Phillip

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/