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 */