Changes by: szaka
Update of /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17068/ntfsprogs
Modified Files:
ntfsclone.c
Log Message:
Write MFT records with the same USN during metadata cloning. This eases
ntfsclone self-regression, which itself is going to validate other codes
Index: ntfsclone.c
===================================================================
RCS file: /cvsroot/linux-ntfs/ntfsprogs/ntfsprogs/ntfsclone.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -p -r1.70 -r1.71
--- ntfsclone.c 5 Feb 2006 16:39:35 -0000 1.70
+++ ntfsclone.c 5 Feb 2006 19:35:20 -0000 1.71
@@ -1006,6 +1006,19 @@ static void wipe_unused_mft(ntfs_inode *
wiped_unused_mft += wipe_data((char *)m, sizeof(MFT_RECORD), unused);
}
+static void mft_record_write_with_same_usn(ntfs_volume *volume, ntfs_inode *ni)
+{
+ u16 usn, *usnp;
+
+ usnp = (u16 *)((char *)ni->mrec + le16_to_cpu(ni->mrec->usa_ofs));
+ usn = le16_to_cpup(usnp);
+ if (usn-- <= 1)
+ usn = 0xfffe;
+ *usnp = cpu_to_le16(usn);
+
+ if (ntfs_mft_record_write(volume, ni->mft_no, ni->mrec))
+ perr_exit("ntfs_mft_record_write");
+}
static int walk_clusters(ntfs_volume *volume, struct ntfs_walk_cluster *walk)
{
@@ -1049,8 +1062,7 @@ static int walk_clusters(ntfs_volume *vo
if (wipe) {
wipe_unused_mft(ni);
wipe_unused_mft_data(ni);
- if (ntfs_mft_record_write(volume, ni->mft_no, ni->mrec))
- perr_exit("ntfs_mft_record_write");
+ mft_record_write_with_same_usn(volume, ni);
}
}
@@ -1079,8 +1091,7 @@ static int walk_clusters(ntfs_volume *vo
out:
if (wipe) {
wipe_unused_mft_data(ni);
- if (ntfs_mft_record_write(volume, ni->mft_no, ni->mrec))
- perr_exit("ntfs_mft_record_write");
+ mft_record_write_with_same_usn(volume, ni);
}
if (ntfs_inode_close(ni))
|