Description of problem: Before this patch we had the problem where this invalidation failure would clobber -EIOCBQUEUED as it made its way from fs/direct-io.c to fs/aio.c. Both fs/aio.c and bio completion call aio_complete() and we reference freed memory, usually oopsing. This patch addresses this problem by invalidating before the write so that we can cleanly return -EIO before ->direct_IO() has had a chance to return -EIOCBQUEUED. Version-Release number of selected component (if applicable): kernel-2.6.18-8.el5 How reproducible: Fairly. Steps to Reproduce: 1. Run the aio_dio_bugs tests in the autotest test suite. Actual results: Kernel panic Expected results: No kernel panic Additional info: Fix posted to lkml: http://archives.free.net.ph/message/20070309.223557.f7c1c3ed.en.html
Created attachment 150279 [details] fix double AIO completion due to invalidate_inode_pages2_range failure
This request was evaluated by Red Hat Product Management for inclusion in a Red Hat Enterprise Linux maintenance release. Product Management has requested further review of this request by Red Hat Engineering, for potential inclusion in a Red Hat Enterprise Linux Update release for currently deployed products. This request is not yet committed for inclusion in an Update release.
This panic also occurs on 2.6.18-8.1.6.el5 on i386 and x86_64, reproduceable in RHTS: http://rhts.lab.boston.redhat.com/cgi-bin/rhts/test_log.cgi?id=139244 http://rhts.lab.boston.redhat.com/cgi-bin/rhts/test_log.cgi?id=139242 http://rhts.lab.boston.redhat.com/cgi-bin/rhts/test_log.cgi?id=139240
in 2.6.18-27.el5 You can download this test kernel from http://people.redhat.com/dzickus/el5
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. http://rhn.redhat.com/errata/RHBA-2007-0959.html