]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE12-fix-fakestat-support-for-hardlinks-20020731
authorNickolai Zeldovich <kolya@mit.edu>
Wed, 31 Jul 2002 17:42:32 +0000 (17:42 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 31 Jul 2002 17:42:32 +0000 (17:42 +0000)
Support afs_link() in volume roots when using fakestat.

(cherry picked from commit 59741a821caec4ed83b87dcadbd4771e8d181c38)

src/afs/VNOPS/afs_vnop_link.c

index c58edc2210195cf37ab460fcbac8b401c52b631d..d244cca7a234b334930b1a9a50c163f154583ef2 100644 (file)
@@ -56,6 +56,7 @@ afs_link(avc, OSI_VC_ARG(adp), aname, acred)
     afs_int32 offset, len;
     struct AFSFetchStatus OutFidStatus, OutDirStatus;
     struct AFSVolSync tsync;
+    struct afs_fakestat_state vfakestate, dfakestate;
     XSTATS_DECLS
     OSI_VC_CONVERT(adp)
 
@@ -66,6 +67,13 @@ afs_link(avc, OSI_VC_ARG(adp), aname, acred)
     if (code = afs_InitReq(&treq, acred)) 
        goto done2;
 
+    afs_InitFakeStat(&vfakestate);
+    afs_InitFakeStat(&dfakestate);
+    code = afs_EvalFakeStat(&avc, &vfakestate, &treq);
+    if (code) goto done;
+    code = afs_EvalFakeStat(&adp, &dfakestate, &treq);
+    if (code) goto done;
+
     if (avc->fid.Cell != adp->fid.Cell || avc->fid.Fid.Volume != adp->fid.Fid.Volume) {
        code = EXDEV;
        goto done;
@@ -151,6 +159,8 @@ afs_link(avc, OSI_VC_ARG(adp), aname, acred)
     code = 0;
 done:
     code = afs_CheckCode(code, &treq, 24);
+    afs_PutFakeStat(&vfakestate);
+    afs_PutFakeStat(&dfakestate);
 done2:
 #ifdef AFS_OSF_ENV
     afs_PutVCache(adp, WRITE_LOCK);