Commit
6b93ad695e53a86dbe9eea13bd0ff651e1d8c9b7 fixed a false error
reported when the vldb contained more than one mh extent blocks. That
fix changed the readMH() function to convert the flags field to host
byte order of all the mh blocks, not just the first block, in order to
check the value of those flags.
Unfortunately, that commit missed converting non-zero blocks back to
network byte order in the complementary writeMH() function, which is
used to write the data back to disk when vldb_check is run with the -fix
option.
FIXES 134589
Change-Id: I4cdbd57b3336e78a9eb1e543ee6d09b33f5e6153
Reviewed-on: https://gerrit.openafs.org/13245
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
if (verbose) {
quiet_println("Writing back MH block % at addr %u\n", block, addr);
}
+ mhblockP->ex_hdrflags = htonl(mhblockP->ex_hdrflags);
if (block == 0) {
+ /*
+ * These header fields are only used in the first mh block, so were
+ * converted to host byte order only when the first mh block was read.
+ */
mhblockP->ex_count = htonl(mhblockP->ex_count);
- mhblockP->ex_hdrflags = htonl(mhblockP->ex_hdrflags);
for (i = 0; i < VL_MAX_ADDREXTBLKS; i++) {
mhblockP->ex_contaddrs[i] = htonl(mhblockP->ex_contaddrs[i]);
}