On Fri, Aug 26, 2011 at 06:44:03PM +1000, Dave Chinner wrote:
While the lockdep report is false positive, I agree that your
change is the right fix to make - the IO completions are already
queued on the workqueue, so they don't need to be flushed to get
them to complete. All that needs to be done is call
ext4_ioend_wait() for them to complete, and that gets rid of the
i_mutex altogether. (*)
The really correct fix is to stop using the ioend wait like I did
in my pending series for XFS. The only thing preventing ext4 from
doing that is that it marks pages uptodate from irq context,
before finishing the ioends. This has a lot of nasty implications
as the the page might be marked uptodate without actually having
that state on disk.