]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
vldb_check: write mh entry header flags in network order
authorMichael Meffie <mmeffie@sinenomine.net>
Fri, 6 Jul 2018 19:22:36 +0000 (15:22 -0400)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 27 Jul 2018 12:52:59 +0000 (08:52 -0400)
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

Reviewed-on: https://gerrit.openafs.org/13245
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 483cad0121d848836b4155817b86231ef21be27a)

Change-Id: I28afa243c78d0a8a53e13f302d69c17a779837d9
Reviewed-on: https://gerrit.openafs.org/13246
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
src/vlserver/vldb_check.c

index ed857f9eefaa4401713d784e0361cebc1d0a878d..5e454d20502473835f5689110f439662a15e5cbd 100644 (file)
@@ -479,9 +479,13 @@ writeMH(afs_int32 addr, int block, struct extentaddr *mhblockP)
     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]);
        }