afs: Move SetupVolume tv initialization after loop
authorAndrew Deason <adeason@sinenomine.net>
Fri, 8 Feb 2013 23:26:32 +0000 (17:26 -0600)
committerDerrick Brashear <shadow@your-file-system.com>
Tue, 12 Feb 2013 19:38:53 +0000 (11:38 -0800)
The fields in tv are not used by the loop looking for the given volume
on disk. If we wait until after that loop to initialize the fields in
tv, it is easier to handle errors encountered in the loop.

This should incur no functional change.

Change-Id: Ib678542bfebaa89ecfa4aad39230fc502ec83edb
Reviewed-on: http://gerrit.openafs.org/9093
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>

src/afs/afs_volume.c

index 3cf7a2e..9953f5a 100644 (file)
@@ -584,12 +584,8 @@ afs_SetupVolume(afs_int32 volid, char *aname, void *ve, struct cell *tcell,
            return NULL;
        }
        memset(tv, 0, sizeof(struct volume));
-       tv->cell = tcell->cellNum;
-       AFS_RWLOCK_INIT(&tv->lock, "volume lock");
-       tv->next = afs_volumes[i];      /* thread into list */
-       afs_volumes[i] = tv;
-       tv->volume = volid;
-       for (j = fvTable[FVHash(tv->cell, volid)]; j != 0; j = tf->next) {
+
+       for (j = fvTable[FVHash(tcell->cellNum, volid)]; j != 0; j = tf->next) {
            if (afs_FVIndex != j) {
                struct osi_file *tfile;
                tfile = osi_UFSOpen(&volumeInode);
@@ -602,9 +598,16 @@ afs_SetupVolume(afs_int32 volid, char *aname, void *ve, struct cell *tcell,
                afs_FVIndex = j;
            }
            tf = &staticFVolume;
-           if (tf->cell == tv->cell && tf->volume == volid)
+           if (tf->cell == tcell->cellNum && tf->volume == volid)
                break;
        }
+
+       tv->cell = tcell->cellNum;
+       AFS_RWLOCK_INIT(&tv->lock, "volume lock");
+       tv->next = afs_volumes[i];      /* thread into list */
+       afs_volumes[i] = tv;
+       tv->volume = volid;
+
        if (tf && (j != 0)) {
            tv->vtix = afs_FVIndex;
            tv->mtpoint = tf->mtpoint;