On 03/24/2015 12:40 AM, Dave Chinner wrote: > On Mon, Mar 23, 2015 at 02:54:40PM +0200, Boaz Harrosh wrote: >> From: Boaz Harrosh <boaz@xxxxxxxxxxxxx> >> >> When freezing an FS, we must write protect all IS_DAX() >> inodes that have an mmap mapping on an inode. Otherwise >> application will be able to modify previously faulted-in >> file pages. > > All you need to do is lock out page faults once the page is clean; > that's what the sb_start_pagefault() calls are for in the page fault > path - they catch write faults and block them until the filesystem > is unfrozen. Hence I'm not sure why this would be necessary if you > are catching write faults in .pfn_mkwrite.... > Jan pointed it out and he was right I have a test for this. What happens is that since we had a mapping from before the freeze we will not have a page-fault. And the buffers will be modified. As Jan explained in the cache path we do a writeback which turns all pages to read-only. But with dax we do not have writeback so the pages stay read-write mapped. Something needs to loop through the pages and write-protect them. I chose to unmap them because it is the much-much smaller code, and I do not care to optimize the freeze. [Yes, sigh, I will convert the test to an xfstest. May I just add it to some existing fs_freeze test. Only novelty is that we need to write-access an mmap block before the freeze-start, then continue access after the freeze and see modifications ] > Cheers, > Dave. > Thanks Boaz -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>