]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
afs: Avoid SetupVolume panic
authorAndrew Deason <adeason@sinenomine.net>
Fri, 8 Feb 2013 23:24:28 +0000 (17:24 -0600)
committerStephan Wiesand <stephan.wiesand@desy.de>
Tue, 20 Aug 2013 19:49:37 +0000 (12:49 -0700)
Currently SetupVolume panics if it cannot successfully read a
volumeinfo entry from disk. Try to return an error instead, so we
don't panic the machine.

Reviewed-on: http://gerrit.openafs.org/9094
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
(cherry picked from commit 6f7ae535bbac2a5376358801b7f2c9e072f2d141)

Change-Id: Ib8ea06192bfcd6c2111444db325abc4a90190bbc
Reviewed-on: http://gerrit.openafs.org/9131
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
src/afs/afs_volume.c

index 2d9babbd2049882e236beee1da6d2d41e9d81bf1..e3b31c7fee467e931b2fd4bcd22a86b4b415ccee 100644 (file)
@@ -594,9 +594,18 @@ afs_SetupVolume(afs_int32 volid, char *aname, void *ve, struct cell *tcell,
                err =
                    afs_osi_Read(tfile, sizeof(struct fvolume) * j,
                                 &staticFVolume, sizeof(struct fvolume));
-               if (err != sizeof(struct fvolume))
-                   osi_Panic("read volumeinfo2");
                osi_UFSClose(tfile);
+               if (err != sizeof(struct fvolume)) {
+                   afs_warn("afs_SetupVolume: error %d reading volumeinfo\n",
+                            (int)err);
+                   /* put tv back on the free list; the data in it is not valid */
+                   tv->next = afs_freeVolList;
+                   afs_freeVolList = tv;
+                   /* staticFVolume contents are not valid */
+                   afs_FVIndex = -1;
+                   ReleaseWriteLock(&afs_xvolume);
+                   return NULL;
+               }
                afs_FVIndex = j;
            }
            tf = &staticFVolume;