[OpenAFS] Solaris 10u6: ZFS cache?

Douglas E. Engert deengert@anl.gov
Tue, 11 Nov 2008 16:58:30 -0600


Derrick Brashear wrote:
>> I have attached a patch based on Derrick's suggestion to use the
>> AFS_CACHE_VNODE_PATH code.
> 
> Excellent.
> 
> 
>>  o There is code in afs/SOLARIS for a Xvfs file system.
>>   Rather then overloading the osi_UfsOpen, it might be a
>>   better choice to create a osi_ZfsOpen much like the
>>   osi_XvfsOpen. Let me know if that would be better,
>>   and I can rework the patch. It might be possible
>>   to use VOP_GETATTR to get an inode as even with ZFS
>>   they to generate inode numbers.
> 
> Given that afsd's behavior changes, this is all or none. Not much
> reason not to change things in the UfsOpen case.
> 
>>  o The Solaris vn_open will use the user's CRED, and
>>   it was found that permission denied was possible,
>>   so pn_get_buf, lookuppnvp and VOP_OPEN where used
>>   instead, using the cred of afs_osi_cred.
> 
> That seems wise.
> 
>>  o The ois_DisableAtime routine was trying to update
>>   the inode. I skipped that part of the code. Is this
>>   OK or not?   Is there another way to update the flag?
> 

What is this code trying to do? Is it trying to say don't
update the atime of the cache file as this improves performance?


> That's not ideal but it will work until we find another way.

> 
>>  o The original patch would set the ainode to a signed
>>   value, but on Solairs with 64 bit, the ainode was
>>   defined to be unsigned long. This caused problems
>>   with if (ainode < 0) and switch (ainode).
>>   So the patch goes back to using afs_int32 for ainode.
> 
> Perhaps we should use values just shy of 0xffffffff.

Yes that would work.

It also looks like ZFS is storing the object ID as the
inode which can be obtained from a stat() with -D_FILE_OFFSET_BITS=64


And it looks like the vnode associated with an object can be obtained
via a vfs_vget(vfs, vnode **, fid)
The fid can have the object ID.

So it looks like if there was a ZfsSOpen much like there is a
XvfsOpen, if could get constructe an fid, and called VFS_VGET
to get the vnode. In this case then the AFS_CACHE_VNODE_PATH
would not be needed.

Will look some more tomorrow.






> _______________________________________________
> OpenAFS-info mailing list
> OpenAFS-info@openafs.org
> https://lists.openafs.org/mailman/listinfo/openafs-info
> 
> 

-- 

  Douglas E. Engert  <DEEngert@anl.gov>
  Argonne National Laboratory
  9700 South Cass Avenue
  Argonne, Illinois  60439
  (630) 252-5444