2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 * System independent part of vget VFS call.
14 #include <afsconfig.h>
15 #include "afs/param.h"
18 #include "afs/sysincludes.h" /* Standard vendor system headers */
19 #include "afsincludes.h" /* Afs-based standard headers */
20 #include "afs/afs_stats.h" /* statistics stuff */
24 #if !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN80_ENV)
25 /* This is the common part of the vget VFS call. */
27 afs_osi_vget(struct vcache **avcpp, struct fid *afidp, struct vrequest *areqp)
32 struct vrequest *treq = NULL;
33 afs_int32 code = 0, cellindex;
36 memcpy((char *)&Sfid, afidp->fid_data, SIZEOF_SMALLFID);
38 /* Need to extract fid from SmallFid. Will need a wild card option for
39 * finding the right vcache entry.
41 cellindex = (Sfid.CellAndUnique >> 24) & 0xff;
42 tcell = afs_GetCellByIndex(cellindex, READ_LOCK);
45 vfid.Cell = tcell->cellNum;
46 afs_PutCell(tcell, WRITE_LOCK);
47 vfid.Fid.Volume = Sfid.Volume;
48 vfid.Fid.Vnode = Sfid.Vnode;
49 vfid.Fid.Unique = Sfid.CellAndUnique & 0xffffff;
51 /* First attempt to find in cache using wildcard. If that fails,
52 * try the usual route to try to get the vcache from the server.
53 * This could be done better by splitting out afs_FindVCache from
57 ret = afs_NFSFindVCache(avcpp, &vfid);
59 /* More than one entry matches. */
61 } else if (ret == 0) {
62 /* didn't find an entry. */
63 code = afs_CreateReq(&treq, afs_osi_credp);
65 *avcpp = afs_GetVCache(&vfid, treq, NULL, NULL);
75 #endif /* AFS_LINUX20_ENV */