]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
ubik: Replay the transaction log label correctly
authorAndrew Deason <adeason@sinenomine.net>
Wed, 24 Nov 2010 14:36:05 +0000 (09:36 -0500)
committerDerrick Brashear <shadow@dementix.org>
Wed, 2 Nov 2011 02:29:24 +0000 (19:29 -0700)
Commit eec0d94f519b3e27f255b9b7a637df043951424e fixed the transaction
replay log code to correctly identify valid transaction logs on
little-endian systems, but missed ntohl'ing the database label read in
a LOGEND opcode. Fix that, so the database is labelled correctly when
replayed from a transaction log.

And while we're here, actually pass a struct ubik_version* to
adbase->setlabel, to make it a little more clear what's happening.

Reviewed-on: http://gerrit.openafs.org/3384
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit 1e8598b334b4354a3998b1e5fe189f3f33957048)

Change-Id: I832eff8641c339a103170f50238bbb669412bda0
Reviewed-on: http://gerrit.openafs.org/5752
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
src/ubik/recovery.c

index e94dceedcee8f9e45415e99fda298385acb83c60..45e9b018ddba5422d1bf7b0c11a734a5fec8d06c 100644 (file)
@@ -276,13 +276,16 @@ ReplayLog(struct ubik_dbase *adbase)
            } else if (opcode == LOGABORT)
                panic("log abort\n");
            else if (opcode == LOGEND) {
+               struct ubik_version version;
                tpos += 4;
                code =
                    (*adbase->read) (adbase, LOGFILE, (char *)buffer, tpos,
                                     2 * sizeof(afs_int32));
                if (code != 2 * sizeof(afs_int32))
                    return UBADLOG;
-               code = (*adbase->setlabel) (adbase, 0, (ubik_version *)buffer);
+               version.epoch = ntohl(buffer[0]);
+               version.counter = ntohl(buffer[1]);
+               code = (*adbase->setlabel) (adbase, 0, &version);
                if (code)
                    return code;
                logIsGood = 1;