source:
server/common/patches/openafs-enoent.patch
@
898
Last change on this file since 898 was 848, checked in by andersk, 16 years ago | |
---|---|
File size: 1.8 KB |
-
src/afs/LINUX/osi_vnodeops.c
RCS file: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v retrieving revision 1.81.2.68 diff -u -r1.81.2.68 osi_vnodeops.c
789 789 cred_t *credp = NULL; 790 790 struct vcache *vcp, *pvcp, *tvc = NULL; 791 791 int valid; 792 struct afs_fakestat_state fakestate; 792 793 793 794 #ifdef AFS_LINUX24_ENV 794 795 lock_kernel(); 795 796 #endif 796 797 AFS_GLOCK(); 798 afs_InitFakeStat(&fakestate); 797 799 798 800 if (dp->d_inode) { 799 801 … … 805 807 806 808 if (vcp->mvstat == 1) { /* mount point */ 807 809 if (vcp->mvid && (vcp->states & CMValid)) { 808 /* a mount point, not yet replaced by its directory */ 809 goto bad_dentry; 810 int tryEvalOnly = 0; 811 int code = 0; 812 struct vrequest treq; 813 814 credp = crref(); 815 code = afs_InitReq(&treq, credp); 816 if ( 817 #ifdef AFS_DARWIN_ENV 818 (strcmp(dp->d_name.name, ".DS_Store") == 0) || 819 (strcmp(dp->d_name.name, "Contents") == 0) || 820 #endif 821 (strcmp(dp->d_name.name, ".directory") == 0)) { 822 tryEvalOnly = 1; 823 } 824 if (tryEvalOnly) 825 code = afs_TryEvalFakeStat(&vcp, &fakestate, &treq); 826 else 827 code = afs_EvalFakeStat(&vcp, &fakestate, &treq); 828 if ((tryEvalOnly && vcp->mvstat == 1) || code) { 829 /* a mount point, not yet replaced by its directory */ 830 goto bad_dentry; 831 } 810 832 } 811 833 } else 812 834 if (*dp->d_name.name != '/' && vcp->mvstat == 2) /* root vnode */ … … 870 892 /* Clean up */ 871 893 if (tvc) 872 894 afs_PutVCache(tvc); 895 afs_PutFakeStat(&fakestate); 873 896 AFS_GUNLOCK(); 874 897 if (credp) 875 898 crfree(credp); … … 884 907 return valid; 885 908 886 909 bad_dentry: 887 valid = 0; 910 if (have_submounts(dp)) 911 valid = 1; 912 else 913 valid = 0; 888 914 goto done; 889 915 } 890 916
Note: See TracBrowser
for help on using the repository browser.