On 2014-09-23 12:50, Ryusuke Konishi wrote: > On Tue, 23 Sep 2014 10:46:58 +0200, Andreas Rohner wrote: >> Support for fdatasync() has been implemented in NILFS2 for a long time, >> but whenever the corresponding inode is dirty the implementation falls >> back to a full-flegded sync(). Since every write operation has to update >> the modification time of the file, the inode will almost always be dirty >> and fdatasync() will fall back to sync() most of the time. But this >> fallback is only necessary for a change of the file size and not for >> a change of the various timestamps. >> >> This patch adds a new flag NILFS_I_INODE_SYNC to differentiate between >> those two situations. >> >> * If it is set the file size was changed and a full sync is necessary. >> * If it is not set then only the timestamps were updated and >> fdatasync() can go ahead. >> >> There is already a similar flag I_DIRTY_DATASYNC on the VFS layer with >> the exact same semantics. Unfortunately it cannot be used directly, >> because NILFS2 doesn't implement write_inode() and doesn't clear the VFS >> flags when inodes are written out. So the VFS writeback thread can >> clear I_DIRTY_DATASYNC at any time without notifying NILFS2. So >> I_DIRTY_DATASYNC has to be mapped onto NILFS_I_INODE_SYNC in >> nilfs_update_inode(). >> >> Signed-off-by: Andreas Rohner <andreas.rohner@xxxxxxx> > > I now sent this to Andrew. > > The datasync segments that this patch creates more frequently, will > cause rollforward recovery after a crash or a power failure. > > So, please test also that the recovery works properly for fdatasync() > and reset. The situation can be simulated, for example, by using > "reboot -nfh": > > # dd if=/dev/zero of=/nilfs/test bs=4k count=1 seek=9999 > # dd if=/dev/urandom of=/nilfs/test bs=8k count=1 seek=50 conv=fdatasync,notrunc,nocreat > # reboot -nfh Very nice script to test this! > We can use dumpseg command to confirm that the datasync segment is > actually made or how recovery has done after mount. I already tested this before I sent in my patch. I used a virtual machine and just killed the process after the fdatasync(). After the rollforward NILFS reports the correct number of blocks salvaged and the md5sum of the file is correct. I will test it again with dumpseg the way you suggested. br, Andreas Rohner -- To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html