DAFS: Do not transition to ERROR on trivial errors

attach2 can result in many different errors; some indicate that the
volume is in an inconsistent state, but many others just indicate that
the volume cannot be attached for benign reasons (such as VNOVOL if
the volume doesn't exist, or VOFFLINE if the volume is being used by a
volume utility). Currently, for DAFS, attach2 transitions the relevant
volume to the VOL_STATE_ERROR state for almost all errors encountered,
even the benign ones. Instead, skip the error state transition for
error handling paths that do not reflect a "broken" volume.

Reviewed-on: http://gerrit.openafs.org/6164
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
(cherry picked from commit 5fc2365f5dff7f193781093ecb886b4c7391d5a3)

Change-Id: Ia3d732781c98fcda4db7b41cd744db860781594f
Reviewed-on: http://gerrit.openafs.org/6320
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
This commit is contained in:
Andrew Deason 2011-11-30 14:36:06 -06:00 committed by Derrick Brashear
parent 8b75b8c44c
commit 012e9e26b8

View File

@ -3116,7 +3116,8 @@ attach2(Error * ec, VolId volumeId, char *path, struct DiskPartition64 *partp,
if (*ec == VNOVOL) {
/* if the volume doesn't exist, skip straight to 'error' so we don't
* request a salvage */
goto unlocked_error;
VOL_LOCK;
goto error_notbroken;
}
if (!*ec) {
@ -3210,7 +3211,8 @@ attach2(Error * ec, VolId volumeId, char *path, struct DiskPartition64 *partp,
goto locked_error;
} else if (*ec) {
/* volume operation in progress */
goto unlocked_error;
VOL_LOCK;
goto error_notbroken;
}
#else /* AFS_DEMAND_ATTACH_FS */
if (*ec) {
@ -3409,7 +3411,10 @@ attach2(Error * ec, VolId volumeId, char *path, struct DiskPartition64 *partp,
return vp;
#ifndef AFS_DEMAND_ATTACH_FS
unlocked_error:
#endif
VOL_LOCK;
locked_error:
#ifdef AFS_DEMAND_ATTACH_FS
@ -3422,6 +3427,7 @@ locked_error:
VReleaseVolumeHandles_r(vp);
}
error_notbroken:
#ifdef AFS_DEMAND_ATTACH_FS
VCheckSalvage(vp);
if (forcefree) {