Messages in this thread | | | Subject | Re: deadlocks caused by ext3/reiser dirty_inode calls during do_mmap_pgoff | From | Chris Mason <> | Date | Tue, 22 Jun 2004 10:13:18 -0400 |
| |
On Mon, 2004-06-21 at 20:13, Andrew Morton wrote: > Chris Mason <mason@suse.com> wrote: > > > > do_mmap_pgoff is called with a write lock on mmap_sem, and can trigger > > calls to generic_file_mmap, which calls file_accessed to update the > > atime on the file. > > > > For reiserfs, this might start a transaction, which might have to wait > > for the currently running transaction to finish. It looks like ext3 may > > do the same thing, but I'm not 100% sure on that. > > > > If the currently running transaction happens to by running > > copy_from_user, like we do during write calls, it might be trying to get > > a hold of a read lock on the mmap sem while trying to hand page faults. > > heh, good luck writing a testcase.
Hmmm, reiserfs_file_write does fault_in_pages_readable after the transaction is started. I can at least make the window smaller for now by moving that before the transaction is started. The test case looks like this, they haven't tried yet on ext3, only reiser3
1. in ltp, create runtest/vmmstress1: mmstress mmstress mmap1 mmap1 mmap2 mmap2 mmap3 mmap3 mallocstress mallocstress
create runtest/vmmstress2: mtest01 mtest01 -p85 -w
create dovmmstress.sh: sar -o /root/results/vmmstress.sar 300 0& ./runalltests.sh -f /home/plars/test/ltp/runtest/vmmstress2 -t72h -l /root/results/vmmstress2.log -p -q > /root/results/vmmstress2.out& ./runalltests.sh -f /home/plars/test/ltp/runtest/vmmstress1 -t72h -l /root/results/vmmstress1.log -p -q |tee /root/results/vmmstress1.out killall -9 sar killall -9 sadc
2. run dovmmstress.sh
> I think we can fix both problems by changing filemap_copy_from_user() and > filemap_copy_from_user_iovec() to not fall back to kmap() - just fail the > copy in some way if the atomic copy failed. Then, in > generic_file_aio_write_nolock(), do a zero-length ->commit_write(), > put_page(), then go back and retry the whole thing, starting with > fault_in_pages_readable().
Ugh, ok. I'm going to start with the smaller reiser patch to move the prefaulting earlier.
-chris
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |