| 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))
 |