On Mon, 9 Apr 2012 13:47:34 -0400 xianwei zhang <[email protected]> wrote:
> Currently I am doing a small project on OpenAFS. Now, I am planning to > read the Vnode associated with a file. My idea is let user enter the > command 'fs getvnode FILE_NAME' to view the vnode (status) > information: > (1) user enters 'fs getvnode /afs' > (2) first get the fid for that file and then use the fid to get the vnode > > while for (1) response is in the file /venus/fs.c, the function to get > vnode is implemented in file /vol/vnode.c. I want to call the VGetVnode() > in fs.c. But You can't really use VGetVnode() in the 'fs' command. Conceptually, the 'fs' command runs on the client, and only interacts directly with the 'libafs' kernel module via pioctl(). VGetVnode() is to be run on a fileserver as root, and it reads from /vicepX directly from disk on the fileserver. The fileserver can be (and usually is) on a completely different machine than the client. In order to get the information you want via the 'fs' command, you need to ask the 'libafs' client for the information, and the client will ask the fileserver. As an example of how the codepath goes from 'fs' to the VGetVnode call, try looking at the 'fs examine' command. This follows a codepath like: venus/fs.c: main -> pioctl(VIOCGETVOLSTAT) -> [syscall magic] -> afs/afs_pioctl.c: PGetVolumeStatus -> RXAFS_GetVolumeStatus -> [Rx RPC magic] -> viced/afsfilesprocs.c: SRXAFS_GetVolumeStatus -> GetVolumePackage -> GetVolumePackageWithCall -> CheckVnodeWithCall -> VGetVnode Although that just looks for the root vnode, not the vnode the user specified. What kind of "status information" are you trying to display? You may be able to get the information from the client cache, which already takes of actually finding the information for you. The status information we cache is in 'struct fvcache' and 'struct vcache', which you can find in afs/afs.h. You will not be able to use that structure directly from 'fs', but 'fs' can ask the client kernel module for that information, and you can use those structures directly in afs/afs_pioctl.c. -- Andrew Deason [email protected] _______________________________________________ OpenAFS-devel mailing list [email protected] https://lists.openafs.org/mailman/listinfo/openafs-devel
