svn commit: r345894 - head/sbin/fsck_msdosfs
Xin LI
delphij at FreeBSD.org
Thu Apr 4 23:16:37 UTC 2019
Author: delphij
Date: Thu Apr 4 23:16:36 2019
New Revision: 345894
URL: https://svnweb.freebsd.org/changeset/base/345894
Log:
Restore the ability of checking and fixing next free
cluster in FSINFO that was lost in r203872.
Obtained from: NetBSD
MFC after: 2 weeks
Modified:
head/sbin/fsck_msdosfs/fat.c
Modified: head/sbin/fsck_msdosfs/fat.c
==============================================================================
--- head/sbin/fsck_msdosfs/fat.c Thu Apr 4 20:34:17 2019 (r345893)
+++ head/sbin/fsck_msdosfs/fat.c Thu Apr 4 23:16:36 2019 (r345894)
@@ -705,6 +705,20 @@ checklost(int dosfs, struct bootblock *boot, struct fa
ret = 1;
}
}
+ if (boot->FSNext != 0xffffffffU &&
+ (boot->FSNext >= boot->NumClusters ||
+ (boot->NumFree && fat[boot->FSNext].next != CLUST_FREE))) {
+ pwarn("Next free cluster in FSInfo block (%u) %s\n",
+ boot->FSNext,
+ (boot->FSNext >= boot->NumClusters) ? "invalid" : "not free");
+ if (ask(1, "fix"))
+ for (head = CLUST_FIRST; head < boot->NumClusters; head++)
+ if (fat[head].next == CLUST_FREE) {
+ boot->FSNext = head;
+ ret = 1;
+ break;
+ }
+ }
if (ret)
mod |= writefsinfo(dosfs, boot);
}
More information about the svn-src-all
mailing list