From bd52d1a2c3cb50aba533adc44a99e9c20db27706 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Fri, 8 Feb 2013 17:24:28 -0600 Subject: [PATCH] afs: Avoid SetupVolume panic 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 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit 6f7ae535bbac2a5376358801b7f2c9e072f2d141) Change-Id: Ib8ea06192bfcd6c2111444db325abc4a90190bbc Reviewed-on: http://gerrit.openafs.org/9131 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Chas Williams - CONTRACTOR Reviewed-by: Stephan Wiesand --- src/afs/afs_volume.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/afs/afs_volume.c b/src/afs/afs_volume.c index 2d9babbd2..e3b31c7fe 100644 --- a/src/afs/afs_volume.c +++ b/src/afs/afs_volume.c @@ -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; -- 2.39.5