From Bugzilla Helper:
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET
Description of problem:
BLKFLSBUF ioctl can cause other reads to fail
In the TC, it is doing randio's(read and verify write). Due to
verify-write, I/Os are happening on the block device(In the old raw
interface IOCTLs are not allowed on raw device). In reopen_dev()
function(randio.c), it is issueing BLKFLSBUF ioctl, and is causing
the other reads to fail.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
To reproduce the problem, run the following scripts in parllal.
while [ 0 ]
dd if=/dev/sdm1 of=/dev/null bs=1M count=100
while [ 0 ]
blockdev --flushbufs /dev/sdm1
If the caller of invalidate_complete_page() is passing a page with a
reference of 2, he is the only one that currently has a reference to
it. And that's the only case where it's ok to mark the page not-
The problem is easily reproducable and the problem is actually quite
obvious once you found out where things went wrong. I think it should
be committed to GA right away.
Sheryl, do you have production code that causes this ?
BLKFLSBUF does invalidate_bdev() -> invalidate_inode_pages() ->
invalidate_complete_page() which clears the uptodate page flag even
if others are looking at this page.
Sorry no we do not have a patch but are requesting one from RedHat
that fixes the problem.
1.15/mm/truncate.c may have the fix to this problem.
Created attachment 111279 [details]
Fix invalidate page race
This is the patch that was committed upstream to address this problem. I have
tested it, and verified that the reproducer runs without errors. I also tested
the data copied (via dd) to ensure that it is correct.
Fix confirmed in kernel-2.6.9-6.39.EL. Moving to PROD_READY.
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.