From 237e8e199006c9627db8bb686f453e91882e2bd0 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 24 Nov 2010 09:36:05 -0500 Subject: [PATCH] ubik: Replay the transaction log label correctly 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 Reviewed-by: Derrick Brashear (cherry picked from commit 1e8598b334b4354a3998b1e5fe189f3f33957048) Change-Id: I832eff8641c339a103170f50238bbb669412bda0 Reviewed-on: http://gerrit.openafs.org/5752 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/ubik/recovery.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ubik/recovery.c b/src/ubik/recovery.c index e94dceedc..45e9b018d 100644 --- a/src/ubik/recovery.c +++ b/src/ubik/recovery.c @@ -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; -- 2.39.5