From 0cf06f620213fa62abc16bf717779a1333ce12a0 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Fri, 20 May 2011 14:10:49 -0400 Subject: [PATCH] dynroot: mark vnode types on dynroot vnodes when we create a vnode using a dynroot fid, we weren't bothering to update the type from the default (typically VREG); most dynroot vnodes are actually VDIR... Change-Id: I1c54e8c2a3c7ffd234f3247d38730062484fec87 Reviewed-on: http://gerrit.openafs.org/4686 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/afs/afs_dynroot.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/afs/afs_dynroot.c b/src/afs/afs_dynroot.c index 6950fed..099616d 100644 --- a/src/afs/afs_dynroot.c +++ b/src/afs/afs_dynroot.c @@ -612,13 +612,13 @@ afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status) return 0; afs_GetDynroot(0, 0, status); afs_PutDynroot(); - return 1; + goto succeed; } if (afs_IsDynrootMount(avc)) { afs_GetDynrootMount(0, 0, status); afs_PutDynroot(); - return 1; + goto succeed; } /* @@ -664,7 +664,10 @@ afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status) } ReleaseReadLock(&afs_dynSymlinkLock); - return ts ? 1 : 0; + if (ts) + goto succeed; + + return 0; } if (VNUM_TO_VNTYPE(avc->f.fid.Fid.Vnode) != VN_TYPE_CELL @@ -759,10 +762,31 @@ afs_DynrootNewVnode(struct vcache *avc, struct AFSFetchStatus *status) } status->Length = linklen; - return 1; + goto succeed; } return 0; + + /* make sure we set type correctly when we do this. used to stay VREG */ + succeed: + switch (status->FileType) { + case File: + vSetType(avc, VREG); + break; + case Directory: + vSetType(avc, VDIR); + break; + case SymbolicLink: + if (afs_fakestat_enable && (avc->f.m.Mode & 0111) == 0) + vSetType(avc, VDIR); + else + vSetType(avc, VLNK); + break; + default: + /* shouldn't happen */ + ; + } + return 1; } /* -- 1.9.4