  The Venus kernel interface
  Peter J. Braam
  v1.2, Mar 18, 1998
  { _ (hng@ps.ksky.or.jp)
  v1.2j, November 26, 2001

  ̕ Coda t@CVXȇɕKv Venus ƃJ[lx
  t@CVXẽR[hƂ̊Ԃ̃R~jP[VɂċLq܂B
  ̕Ōs̃C^[tF[X (o[W 1.0) ƁAl
  ĂPɂĂLqĂ܂B
  ______________________________________________________________________

  ڎ

  1. ͂߂
  2. Coda t@CVXeT[rXp̃R[
  3. bZ[Ww
     3.1 ̏ڍ

  4. R[x̃C^[tF[X
     4.1 J[l Venus ɋLf[^\
     4.2 pioctl C^[tF[X
     4.3 root
     4.4 lookup
     4.5 getattr
     4.6 setattr
     4.7 access
     4.8 create
     4.9 mkdir
     4.10 link
     4.11 symlink
     4.12 remove
     4.13 rmdir
     4.14 readlink
     4.15 open
     4.16 close
     4.17 ioctl
     4.18 rename
     4.19 readdir
     4.20 vget
     4.21 fsync
     4.22 inactive
     4.23 rdwr
     4.24 odymount
     4.25 ody_lookup
     4.26 ody_expand
     4.27 prefetch
     4.28 signal

  5. ~jLbV downcall
     5.1 INVALIDATE
     5.2 FLUSH
     5.3 PURGEUSER
     5.4 ZAPFILE
     5.5 ZAPDIR
     5.6 ZAPVNODE
     5.7 PURGEFID
     5.8 REPLACE

  6. ƃN[Abv
     6.1 K{

  7. Inode ԍ
  8. {ɂ

  ______________________________________________________________________

  1.  ͂߂

  Coda Ut@CVXěƂȂ\vf̓LbV}l[W
  Venus łB

  VXe Coda LȏꍇAvZX Coda t@CVXẽt@
  CɃANZXۂɁAv̓Iy[eBOVXẽt@CVX
  ewɓ]܂BvZX̗vT[rX邽߂ɁAIy[eB
  OVXe Venus ƒʐMł傤BVenus ̓Iy[eBOVX
  e̗vMAT[rX邽߂ɉiIȃNCAg
  LbVǗACoda t@CT[o (F؃T[ô悤) 
  AT[oփ[gvV[WR[s܂BVenus ṽT[
  rXꍇAK؂ȃ^[R[hїvɊ֘Af[^I
  y[eBOVXe։܂B͔CӂłACoda ̃J[l
  T|[g Venus Ƃ̉b炷߂ɁAŋߏṽ~jLb
  Vێ悤ɂo܂BVenus ͂̃~jLbV̗vf
  ɂȂۂɁÂƂJ[lɒʒm@\Ă܂B

  ̓̕J[l Venus Ԃ̃R~jP[V̍וɂċLq
  ܂Bupcall  downcall ƌĂ΂@\̒`A炪f[
  ^̃tH[}bgƂƂɐ܂BR[̌ʂ̈Ӗ̕sϕLq
  ܂B

  jI Coda  Mach 2.6  BSD t@CVXeŎ܂BJ
  [l Venus Ԃ̃C^[tF[X BSD VFS C^[tF[XɂƂĂ
  Ă܂Bl̋@\񋟂AѕԂf[^̃tH[
  }bg BSD VFS ɂƂĂĂ܂B BSD VXe Coda pJ[
  lxt@CVXehCo邽߂̂ƂĂRȊ
  炵܂BȂALinux  Windows95, NT ̂悤ȑ̃Iy[
  eBOVXéAقȂC^[tF[Xo[`t@CV
  XeĂ܂B

  ̃VXe Coda ɂ́AVenus/J[lvgR̃
  o[XGWjAOKvłBɁAvgRɑ΂邢
  ȍœKCɂÃVXeł͒\̌オ}邱
  炩ɂȂĂ܂B̍Ƃ𑣐ïڐAeՂɂ邽
  ɁAVenus ƃJ[lԂ̃R~jP[V͂ƏڂKvȂ
  łB ꂪ̖̕ڕWłB

  2.  Coda t@CVXeT[rXp̃R[

  Coda t@CVXeT[rXṽT[rX́ACoda t@CɃANZX
  vZX P ŋN܂B OS ̃J[lփgbvVXe
  R[s܂BUnix ReLXgɂJ[lɃgbv
  ȃR[̗ read, write, open, close, create, mkdir, rmdir, chmod
  ȂǂłBWin32 ɂl̃R[݂͑ACreateFile Ɩt
  Ă܂B

  ʂɃIy[eBOVXe͗vo[`t@CVXe (VFS)
  wň܂B̑w NT ł I/O }l[WAWindows 95 ł IFS }
  l[WƌĂ΂܂BVFS ̖́Av𕔕IɏA̗v̎c
  ̃T[rXs̃t@CVXe邱ƂłBʏ́Ap
  X̏͐ FS hCo̂ɖ𗧂܂BƂđ
  ǑŁA VFS  FS hCoGNX|[gĂ郋[`̌Ă
  oJnꍇ܂Bṽt@CVXeŗLȏ
  Jnn_ŁA Coda ŗL̃J[lR[hn߂܂B

  Coda p FS w͂̃C^[tF[XJȂ΂Ȃ
  B܂ɁAVFS  Coda FS wւ̕KvȃR[ׂčsȂ
  ΂ȂȂ̂ŁACoda FS hCo̓Iy[eBOVXeŎg`
  ŁA VFS C^[tF[XJȂ΂Ȃ܂B̓Iy[
  eBOVXeԂŒقȂ܂AIuWFNgǂށ^A쐬
  A폜A߂̋@\Ƃ@\ŕ܂BCoda FS ẃAĂ
  oɂ VFS vALbV}l[W Venus ˗鑽
  Ȃ薾mȃT[rXAT[rX܂BVenus ̉ FS hCo
  ɕԂꂽꍇA VFS R[̃T[rX𑱂āAJ[l VFS ւ̉
  𔺂I܂BŌ VFS w̓vZX֕Ԃ܂B

  ̐݌v̌ʁAFS hCoɌJꂽ{C^[tF[X́AbZ
  [WgtBbN̊Ǘ Venus ɂ悤ɂȂ΂Ȃ܂B
   Venus ̓bZ[W̎󂯎肨єsAVbZ[W̓̒
  m󂯂邱ƂłȂ΂Ȃ܂BbZ[W҂ĂȂꍇ
  bZ[WĂꍇłAVenus ͑̃^XNɒӂ𕥂Ȃ
  ΂ȂȂ̂ŁAʒm Venus ubNȂdg݂ɂȂĂȂ
  Ȃ܂B

  ɁAFS ẃA[UvZX Venus Ԃ pioctl C^[tF[X
  Ă΂ʂȃR~jP[VpX񋟂܂Bpioctl C^[tF
  [X́AVenus ɊǗiIȃLbVɊւڍׂȏv
  悤ȁACoda ŗL̃T[rX̂߂Ɏg܂B̓J[l̊֗^
  ŏɂ܂BĂяoĂvZXʂAVenus ֏n
  BVenus 鎞A͏CꂸɌĂяoɕԂ܂B

  ŌɁAVenus ́AJ[l FS hCõT[rX̌ʂLb
  V邱Ƃ܂B͉ߓx̃ReLXgXCb`A
  ʓIɌIȃVXeɂĂ܂BȂAVenus ́AႦ
  LbVꂽtbV͒uȂ΂ȂȂƂ
  lbg[N瓾邩܂B̂悤ȏꍇɂ Venus 
  LbVtbV邢͍XVv Coda FS w downcall
  ܂BJ[l FS hCo͂̂悤ȗv𓯊Ĉ܂B

  ̃C^[tF[X̒ŁAVFS C^[tF[XуbZ[W
  sA󂯎Aʒm󂯂@\̓vbgtH[ŗLłBVFS wɃG
  LX|[gꂽR[͍̐s܂񂪁AbZ[W̎dg݂ɕK
  vȂƂ͏qׂ܂B

  3.  bZ[Ww

  ŉwł́AVenus  FS hCoԂ̃R~jP[V̓bZ[W
  Đi݂܂BCoda t@CT[rXvvZX Venus Ԃ̓
   block (x~Ԃւ̈ڍs)  wake (XPW[҂Ԃւ̈ڍs)
  Ɉ˂܂BCoda FS hCo̓vZX P ̂߂ VFS  pioctl 
  vAVenus ̃bZ[W쐬A҂AŌɌĂяo
  ɕԂ܂BbZ[W̌̎̓vbgtH[ŗLłAd
  g݂͈ʓIɓKp\ł (̂Ƃ) lĂ܂BvZX P
  p̂߂̃f[^obt@̓J[l̒ FS hCoɂč쐬
  AVenus ̃[UɃRs[܂B

  P T[rX FS hCo Venus ւ upcall s܂B̂
   upcall ̓bZ[W\̂쐬邱ƂŁAVenus ֑܂B\
  ̂́AP ̎ʎqAbZ[WV[PXԍAṽTCYїvp
  ̃J[l̃f[^ւ̃|C^܂݂܂Bf[^obt@
  Venus 牞ێ邽߂ɍėp̂ŁAԓ̃TCYp̃tB[
  h܂BtOtB[h̓bZ[W̏Ԃ𐳊mɋL^邽
  ɃbZ[W̒Ŏgp܂BɃvbgtH[ˑ̍\̂̃
  o (L[̃bZ[Ẅʒu߂|C^ѓIuWFN
  gւ̃|C^Ȃ) ܂Bupcall [`̒ŃbZ[W\
  ̏񂪋LAtO 0 ɐݒ肳Aҋ@L[ɒu܂Bf
  [^obt@̊Ă upcall Ăԃ[`̐ӔCł - f[^ob
  t@̍\͎̃ZNVŐ܂B

  bZ[W쐬ꂽƂʒm@\݂A OS ŗp\
  ȓIuWFNgpĎĂȂ΂Ȃ܂B̒ʒm
  vZX P  upcall ReLXg̒ōs܂BbZ[Wҋ@
  L[ɂ鎞AvZX P  upcall s܂Bt@CVXe
  v[` P  (J[l[h) ́AVenus 
  ŁATXyhȂ΂Ȃ܂BāAP XbhĂ
  Ƃ upcall ŃubN܂BbZ[W\̂̃|C^ P
  X[vĂ铯IuWFNgł傤B

  Venus ̓bZ[WʒmoAVenus  FS hCo
  getmsg_from_kernel R[ŃbZ[W󂯎܂B̃R[̏
  ̓J[lŁA郁bZ[W̃L[ɃbZ[WuA READ
  ̃tOݒ肷邱ƂŏI܂BVenus ɂ̓f[^obt@̓en
  ܂Bgetmsg_from_kernel R[͌ĂяoɕԂAVenus ͗v
  ܂B

  ĂAFS hCo Venus 烁bZ[W󂯎܂B
  Iɂ Venus  sendmsg_to_kernel R[ۂłB̎A Coda FS
  hCo̓bZ[W̓eāAȉ̕ނs邩肵܂
  -

  o  bZ[WTXyhꂽXbh P ̉ꍇB̏
     AL[烁bZ[W폜AbZ[W WRITTEN ƃ}[N
     ܂BŌ FS hCo (Venus ̃J[l[h̃ReLXg
     ) P AubNAsendmsg_to_kernel R[ Venus ɕԂ
     ܂BvZX P ͂̌XPW[AVenus ̉ɒu
     ꂽf[^obt@p upcall ̏𑱂܂B

  o  bZ[W downcall ̏ꍇBdowncall  Venus  FS hCo
     ̗vłBFS hCo͗v𒼂ɏ (ʏLbV̒ǂ
     u) AIAsendmsg_to_kernel ͕Ԃ܂B

  ̌ P ͋N upcall ̏𑱂܂B̕KvȔȂƂ
  ܂Bn߂ P ́Ã\[XVOiɂ upcall ̒ŋN
  ꂽ (Ⴆ P I悤Ƃ) A sendmsg_to_kernel R[
  ߂Ƃŕʂ Venus ɂNꂽA肷邱Ƃɂ
  ܂Bʏ̏ꍇł́Aupcall s[`̓bZ[W\̂
  ĕԂ܂A̍ۂ FS [` upcall 𑱂邱Ƃ
  ܂B

                      Sleeping and IPC arrangements

  P  Venus ł͂ȂVOiɂċNꍇAn߂ɃtOtB[
  h܂BbZ[W܂ READ łȂꍇAvZX P ́AVenus
  ɒʒm邱ƂȂƂł܂BVenus ̃bZ[W
  łɓǂł (tO READ ł)Avׂł͂ȂꍇAP
  ͑ÕbZ[W𖳎ׂƂVOibZ[WAVenus ɑ
  邱Ƃł܂B̂悤ȃVOi̓L[̐擪ɒuAVenus ͎n
  ߂ɓǂ݂܂BbZ[Wł WRITTEN ƃ}[NĂꍇA
  ~߂ɂ͒x܂BVFS [`͂̎_ős܂B (-- VFS
  vȏ upcall ܂ޏꍇA͕GȏԂɂȂ\
  ܂B̏ꍇ̑Ώ̂߁Ałɒʉ߂ԂȂꏊʂȃtB
  [h "handle_signals" bZ[W\̂ɒǉ邱Ƃł
  B--)

  3.1.  ̏ڍ

  ̎dg݂ Unix ł́ACoda Ɋ֘AÂꂽLN^foCX
  ܂BVenus ̓foCXɓǂݎsƂŁAbZ[W
  A͏݂őAʒm̓foCXp̃t@CLqqɑ΂
   select VXeR[p܂BvZX P ͊݉\ȑҋ@L
  [̃IuWFNgő҂܂B

  Windows NT  DPMI Windows 95 ł DeviceIoControl R[p
  ܂BDeviceIoControl R[̓[UJ[l
  OPCODES Ńobt@Rs[邽߂̂̂łBsendmsg_to_kernel ͓
  R[ƂĔs܂Agetmsg_from_kernel R[͔񓯊R[
  BWindows EventObjects bZ[W̒ʒm̂߂Ɏg܂B
  vZX P ́ANT ł KernelEvent IuWFNgAWindows 95 ł̓Z}
  tHő҂܂B

  4.  R[x̃C^[tF[X

  ̃ZNV Coda FS hCo Venus ɍs upcall ɂċLq
  ܂B炻ꂼ upcall ͎O̍\̂gps܂ - J
  [l Venus ւ̒ʐMp inputArgsAVenus J[lɕԂ
  outputArgsAŌ cfs_downcalls  Venus J[lNۂɎg
  ܂B

  union inputArgs {
      struct cfs_in_hdr ih;       /* NB: every struct below begins with an ih */
      struct cfs_open_in cfs_open;
      struct cfs_close_in cfs_close;
      struct cfs_ioctl_in cfs_ioctl;
      struct cfs_getattr_in cfs_getattr;
      struct cfs_setattr_in cfs_setattr;
      struct cfs_access_in cfs_access;
      struct cfs_lookup_in cfs_lookup;
      struct cfs_create_in cfs_create;
      struct cfs_remove_in cfs_remove;
      struct cfs_link_in cfs_link;
      struct cfs_rename_in cfs_rename;
      struct cfs_mkdir_in cfs_mkdir;
      struct cfs_rmdir_in cfs_rmdir;
      struct cfs_readdir_in cfs_readdir;
      struct cfs_symlink_in cfs_symlink;
      struct cfs_readlink_in cfs_readlink;
      struct cfs_fsync_in cfs_fsync;
      struct cfs_inactive_in cfs_inactive;
      struct cfs_vget_in cfs_vget;
      struct cfs_rdwr_in cfs_rdwr;
      struct cfs_open_by_path_in cfs_open_by_path;
  };

  union outputArgs {
      struct cfs_out_hdr oh; /* NB: every struct below begins with an oh */
      struct cfs_root_out cfs_root;
      struct cfs_open_out cfs_open;
      struct cfs_ioctl_out cfs_ioctl;
      struct cfs_getattr_out cfs_getattr;
      struct cfs_lookup_out cfs_lookup;
      struct cfs_create_out cfs_create;
      struct cfs_mkdir_out cfs_mkdir;
      struct cfs_readdir_out cfs_readdir;
      struct cfs_readlink_out cfs_readlink;
      struct cfs_vget_out cfs_vget;
      struct cfs_purgeuser_out cfs_purgeuser;
      struct cfs_zapfile_out cfs_zapfile;
      struct cfs_zapdir_out cfs_zapdir;
      struct cfs_zapvnode_out cfs_zapvnode;
      struct cfs_purgefid_out cfs_purgefid;
      struct cfs_rdwr_out cfs_rdwr;
      struct cfs_replace_out cfs_replace;
      struct cfs_open_by_path_out cfs_open_by_path;
  };

  union cfs_downcalls {
      /* CFS_FLUSH  is also a down call */
      struct cfs_purgeuser_out purgeuser;
      struct cfs_zapfile_out zapfile;
      struct cfs_zapdir_out zapdir;
      struct cfs_zapvnode_out zapvnode;
      struct cfs_purgefid_out purgefid;
      struct cfs_replace_out replace;
  };

  wb_[ׂ͂ẴR[ɋʂŁAvZXAF؁Aopcode ̏܂
  ܂ -

  struct cfs_in_hdr {
      unsigned long opcode;
      unsigned long unique;    /* Keep multiple outstanding msgs distinct */
      u_short pid;                  /* Common to all */
      u_short pgid;                 /* Common to all */
      u_short sid;                  /* to become the PAG */
      struct coda_cred cred;        /* to become a PAG */
  };

  /* Really important that opcode and unique are 1st two fields! */
  struct cfs_out_hdr {
      unsigned long opcode;
      unsigned long unique;
      unsigned long result;
  };

  ɐiޑOɁAlXȃtB[h̖܂BinputArgs ́AVenus
  vT[rX̎ނ` opcode Ŏn܂܂B30 قǂ
  upcall AŐ܂Bunique tB[h̓bZ[WӂɎ
  ʂ郆j[NȐ inputArg ʂ܂BvZXуvZXO
  [v id n܂BŌɁAĂяo̐Mx̏񂪊܂܂܂B

  ̃R[𒲂ׂOɁAJ[l Venus ɋLlXȃf[^\
  ̂mKv܂B

  4.1.  J[l Venus ɋLf[^\

  CodaCred \̂ user  group id ɊւlXȂ̂`A
  яõvZXɂĐݒ肳܂Bvuid_t  guid_t  32
  rbgȂłBz group oVbv`܂B Unix
  ł CodaCred  Coda p̂悢ZLeB̎dg݂̎ɏ\ł
  ƕĂ܂AWindows ł̃ZLeB̐nɂ킹\
  ̂̏CȂ΂ȂȂ܂B

  struct CodaCred {
      vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/
      vgid_t cr_gid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */
      vgid_t cr_groups[NGROUPS];        /* Group membership for caller */
  };

  L Venus  CodaCreds Kvǂ́A^łBŏIIɁA Venus
   ftHg uid/gid t@C쐬Ƃ͂AVenus 
  group ɂĒm܂BԂ group oVbṽXg͗]
  B

  ̃ACe Coda t@Cʂ邽߂Ɏg{IȎʎq
  ViceFid łBt@C fid  cell  Coda t@CVXẽt@
  C̓fBNgӓIɒ`܂B (-- cell ͒P
  system control machine (SCM) ̕ی쉺ŉғ Coda T[õO[v
  łB--)

  typedef struct ViceFid {
      VolumeId Volume;
      VnodeId Vnode;
      Unique_t Unique;
  } ViceFid;

  \̊etB[h - VolumeId,VnodeId, Unique_t ͕Ȃ 32 rbg
  łBCoda cell ʂ邽߂ɂtB[hOɕtKv
  邾낤ƍlĂ܂ - ͂ԂADNS ɂ Coda cell w
  肷 Ipv6 TCY IP AhX̌`ɂȂł傤B

  Venus ƃJ[lԂŋLꂽɏdvȍ\̂̓t@C̑łB
  \̂͏Ɏgp܂B̓foCXt@C̃T|[g
  ( Coda ɂ͂܂) ̂悤ȏ̊gp̏ꏊ܂B

  struct coda_vattr {
          enum coda_vtype va_type;        /* vnode type (for create) */
          u_short         va_mode;        /* files access mode and type */
          short           va_nlink;       /* number of references to file */
          vuid_t          va_uid;         /* owner user id */
          vgid_t          va_gid;         /* owner group id */
          long            va_fsid;        /* file system id (dev for now) */
          long            va_fileid;      /* file id */
          u_quad_t        va_size;        /* file size in bytes */
          long            va_blocksize;   /* blocksize preferred for i/o */
          struct timespec va_atime;       /* time of last access */
          struct timespec va_mtime;       /* time of last modification */
          struct timespec va_ctime;       /* time file changed */
          u_long          va_gen;         /* generation number of file */
          u_long          va_flags;       /* flags defined for file */
          dev_t           va_rdev;        /* device special file represents */
          u_quad_t        va_bytes;       /* bytes of disk space held by file */
          u_quad_t        va_filerev;     /* file modification number */
          u_int           va_vaflags;     /* operations flags, see below */
          long            va_spare;       /* remain quad aligned */
  };

  4.2.  pioctl C^[tF[X

  Coda t@CVXeɌŗL̗vApioctl C^[tF[XāA
  AvP[VsƂł܂Bpioctl ͉zt@C
  /coda/.CONTROL ɑ΂镁ʂ ioctl ƂĎ܂Bpioctl R[
  ͂̃t@CJAt@Cnh𓾂 ioctl R[s܂B
  Ōɂ̃t@C܂B

  ł̃J[l̊֗^ open, close, ioctl ւ̃bZ[WnApioctl
  f[^obt@̃pX Coda t@CVXe̒̃t@Cł邱
  ̊mFA̎dg݂̒񋟂ɐ܂B

  J[ľ͎`̃f[^pPbgn܂ -

      struct {
          const char *path;
          struct ViceIoctl vidata;
          int follow;
      } data;

  

  struct ViceIoctl {
          caddr_t in, out;        /* Data to be transferred in, or out */
          short in_size;          /* Size of input buffer <= 2K */
          short out_size;         /* Maximum size of output buffer, <= 2K */
  };

  path Coda t@CłȂ΂Ȃ炸AłȂ ioctl upcall ͍s
  Ȃł傤B

  L  f[^\̂уR[h͂ނႭłB𐮗Kv
  ܂B

  X̃R[܂ -

  4.3.  root

  

     
        

     o

                struct cfs_root_out {
                    ViceFid VFid;
                } cfs_root;

  ڍ ̃R[ Coda t@CVXȅ Venus ֍s
  Bʂ 0 ȂAcfs_root \̂ɂ Coda t@CVXẽ[g
  ViceFid Ă܂B0 łȂʂꍇA̒l Coda
  t@CVXẽ[gۂ Venus ɏoƂ
  vbgtH[ɈˑG[R[hłB

  4.4.  lookup

  Tv fBNgɂ ViceFid уIuWFNg̎ʂ݂邩T
  ܂B

  

     

                struct  cfs_lookup_in {
                    ViceFid     VFid;
                    char        *name;          /* Place holder for data. */
                } cfs_lookup;

     o

                struct cfs_lookup_out {
                    ViceFid VFid;
                    int vtype;
                } cfs_lookup;

  ڍ ̃R[̓fBNgGg ViceFid  filetype 
  邽߂ɍs܂BvꂽfBNgGg name ƂO
  AVenus  cfs_lookup_in.VFid Ŏw肳ꂽfBNg
  傤Bʂ́AO݂ȂAۂɖɏo
  (Ⴆ΃RlNV؂ꂽ) Ƃ܂Bʂ 0 ȂA
  tB[h cfs_lookup_out.VFid ͑Ώۂ ViceFid 
  Acfs_lookup_out.vtype ɂ̓IuWFNg̎ʂO coda_vtype
  ܂B

  IuWFNg̖O͍ő咷 CFS_MAXNAMLEN  8 rbgŁA
  CFS_MAXNAMLEN  256 ɐݒ肳Ă܂ ( 0 ^[~l[^
  ܂݂܂)B

  IuWFNgJ[l̃l[LbVɒuĂ͂ȂȂƂ
  CFS_NOCACHE ŁAVenus tB[h cfs_lookup.vtype rbgaĂ
  Ƃ𗝉邱Ƃ͔ɏdvłBezXgŋt@C Coda
  Ǘ̃t@CVXe̎ۂ̃t@C̓J[lɌăLbV
  Ă͂Ȃ炸Alookup ͖ Venus ɍsȂ΂Ȃ܂B

  L vtype ̎ʂ͌łBcoda_vtype ɂȂׂłB Linux 
  CFS_NOCACHE 𑮐l܂񂪁AlׂłB

  4.5.  getattr

  Tv t@C̑𓾂܂B

  

     

                struct cfs_getattr_in {
                    ViceFid VFid;
                    struct coda_vattr attr; /* XXXXX */
                } cfs_getattr;

     o

                struct cfs_getattr_out {
                    struct coda_vattr attr;
                } cfs_getattr;

  ڍׂ̃R[ fid Ŏw肳ꂽt@C̑Ԃ܂B

  G[ fid IuWFNg݂ȂANZXłȂꍇ
  яoɑp[~bVȂꍇAG[N\
  ܂B

  L J[l FS hCo (LinuxANT, Windows 95) ̑́A
  "inode"  "FileHandle" ̃CX^X쐬邽߂ɁAFid łȂ
  Kv܂B̂悤ȃVXeł Venus/J[lݍ
  px RPC x̗ŁAlookup  getattr R[g킹邱
  ƂɂăptH[}X𒘂ł邩܂B

  ͂̈ vattr \̂͗]ō폜ׂłB

  4.6.  setattr

  Tv t@C̑ݒ肵܂B

  

     

                struct cfs_setattr_in {
                    ViceFid VFid;
                    struct coda_vattr attr;
                } cfs_setattr;

     o
        

  ڍ \ attr  BSD X^CɕύXꂽŋL܂B VNON
  ɐݒ肳 vtype ȊO̕ύXȂ -1 ɐݒ肳܂B͎w
  肳ꂽlɐݒ肳܂BAFS hCoύX̗vsĂ悢
  ́Amode, ownner, groupid, atime, mtime, ctime łBԂl
  s܂B

  G[ lXȃG[N\܂BIuWFNg݂
  AANZXłȂAp[~bV Venus ^ȂȂǁB

  4.7.  access

  Tv

  

     

                struct cfs_access_in {
                    ViceFid     VFid;
                    int flags;
                } cfs_access;

     o
        

  ڍ flags ɋLڂꂽs߂ɁAVFid Ŏw肳IuWFNg
  ̃ANZX邩ǂmF܂Bʂ̓ANZX̗L
  ܂BCoda ͕ی邽߂ ACL gĂAǂ̂ƂN
  CAgł͂ȂT[oVXẽZLeBۏ؂ĂƂ
  mĂƂ͏dvłB̃R[̌ʂ́A[Ug[Nێ
  Ă邩ǂɈˑł傤B

  G[ IuWFNg݂͑Ȃ܂A͕یL
   ACL ̓ANZX\ł͂Ȃ܂B

  4.8.  create

  Tv t@C쐬邽߂ɌĂяo܂B

  

     

                struct cfs_create_in {
                    ViceFid VFid;
                    struct coda_vattr attr;
                    int excl;
                    int mode;
                    char        *name;          /* Place holder for data. */
                } cfs_create;

     o

                struct cfs_create_out {
                    ViceFid VFid;
                    struct coda_vattr attr;
                } cfs_create;

  ڍ   upcall ̓t@C̍쐬v邽߂ɌĂяo܂Bt@
  C VFid Ŏw肳ꂽfBNg̒ɍ쐬A̖O nameA
  [h mode ɂȂł傤Bexcl ݒ肳ꂽꍇAt@Cɑ
  ݂΃G[Ԃł傤Battr  size tB[h 0 ɐݒ肳ꂽ
  ꍇAt@C͐؂߂܂Bt@C uid  gid 
  CodaCred ϊݒ肳Auid ̓}N CRTOUID p܂ (̃}
  N̓vbgtH[Ɉˑ܂)BꍇAt@C VFid 
  ёԂ܂BCoda FS hCo͒ʏJ[lxŐVIu
  WFNĝ߂ vnode, inode ̓t@Cnh̃CX^X
  쐬ł傤B

  G[ lXȃG[N\܂Bp[~bV͕s\
  ܂BIuWFNg݂ꂪt@CłȂꍇAUnix 
  G[ EISDIR Ԃ܂B

  L p[^̑g݂͂ƂĂIŁAVXeR[ creat  VFS
   create Ƃ̍̂Ǝv܂BVFS  create ͐V
  IuWFNg̍쐬̍ۂɂR[܂B create R[
  Unix ̃R[Ƃ͈قȂAt@CfBXNv^Ԃ߂ɌĂяo
  邱Ƃ͂܂BgP[gƃCNXNVũIvVAу
  [h́AP Unix ł̃[ḧꕔɂł͂łBtÖ
  ׂł͂܂ - ݂́AREAD  WRITE [hp
  t@CfBXNv^Ԃ߂ open (2) ŎgĂ܂B

  fBNg̑Asize  mtime ύX̂ŁAԂ͂
  łB

  4.9.  mkdir

  Tv VfBNg쐬܂B

  

     

                struct cfs_mkdir_in {
                    ViceFid     VFid;
                    struct coda_vattr attr;
                    char        *name;          /* Place holder for data. */
                } cfs_mkdir;

     o

                struct cfs_mkdir_out {
                    ViceFid VFid;
                    struct coda_vattr attr;
                } cfs_mkdir;

  ڍ ̃R[ create ɎĂ܂AfBNg쐬܂B
  ̓p[^ mode tB[h쐬̂߂Ɏg܂B쐬
  ꍇAԂ attr ͐VfBNg̑܂B

  G[ create ƓlłB

  L ̓p[^͑̕ς mode ֕ύX͂łB

  ȇ́Asize  mtime ς̂ŁAԂ͂łB

  4.10.  link

  Tv t@Cւ̃N쐬܂B

  

     

                struct cfs_link_in {
                    ViceFid sourceFid;          /* cnode to link *to* */
                    ViceFid destFid;            /* Directory in which to place link */
                    char        *tname;         /* Place holder for data. */
                } cfs_link;

     o
        

  ڍ ̃R[́AO tname  destFid Ŏw肳fBNg
  ̒ sourceFid ւ̃N쐬܂B\[X̓^[Qbg̐efB
  Ngɑ݂Ȃ΂Ȃ܂B܂A\[X̐efBNg
  destFid łȂ΂Ȃ܂B܂ Coda ̓fBNg܂n[
  hNT|[gĂ܂BԂl͊֘ÂłB͐
  ͎s̎ʂ܂B

  G[ ʏ̃G[N\܂B

  4.11.  symlink

  Tv V{bNN쐬܂B

  

     

                struct cfs_symlink_in {
                    ViceFid     VFid;          /* Directory to put symlink in */
                    char        *srcname;
                    struct coda_vattr attr;
                    char        *tname;
                } cfs_symlink;

     o
        Ȃ

  ڍ V{bNN쐬܂BN VFid Ŏw肳fB
  NgɒuAtname ̖OɂȂ܂B̓pX srcname w
  łBV쐬ꂽIuWFNg̑ attr ݒ肳܂B

  G[

  L ^[QbgfBNg̑́Asize ύX̂ŁAԂ
  łB

  4.12.  remove

  Tv t@C폜܂B

  

     

                struct cfs_remove_in {
                    ViceFid     VFid;
                    char        *name;          /* Place holder for data. */
                } cfs_remove;

     o
        Ȃ

  ڍ  VFid Ŏw肳fBNg̒ cfs_remove_in.name Ŏw肳
  ꂽt@C폜܂B

  G[

  L fBNg̑́Asize  mtime ς邩Ȃ
  ŁAԂ͂łB

  4.13.  rmdir

  Tv fBNg폜܂B

  

     

                struct cfs_rmdir_in {
                    ViceFid     VFid;
                    char        *name;          /* Place holder for data. */
                } cfs_rmdir;

     o
        Ȃ

  ڍ VFid Ŏw肳fBNg name Ŏw肳ꂽfBNg
  폜܂B

  G[

  L efBNg̑́Asize  mtime ς邩Ȃ
  ŁAԂ͂łB

  4.14.  readlink

  Tv V{bNN̒lǂݏo܂B

  

     

                struct cfs_readlink_in {
                    ViceFid VFid;
                } cfs_readlink;

     o

                struct cfs_readlink_out {
                    int count;
                    caddr_t     data;           /* Place holder for data. */
                } cfs_readlink;

  ڍ ̃[` VFid Ŏw肳V{bNN̓eob
  t@ data ̒ɓǂݏo܂Bobt@ data ͂ǂȖOłێł
  悤 CFS_MAXNAMLEN ̑傫Kvł (PATH  NAME??)B

  G[ ʏ̃G[łB

  4.15.  open

  Tv t@CJ܂B

  

     

                struct cfs_open_in {
                    ViceFid     VFid;
                    int flags;
                } cfs_open;

     o

                struct cfs_open_out {
                    dev_t       dev;
                    ino_t       inode;
                } cfs_open;

  ڍ   VFid Ŏw肳t@C Venus ̃LbVɒu悤
  Venus Ɉ˗AɌĂяõvZX open(2)  flags ̒lł
  LbṼt@CJ悤w肷A̗vłBJ[lւ̕
  l Unix  Windows VXeł͈قȂ܂BUnix VXeł Coda
  FS hCo dev  inode ̃tB[h̒̃Reit@C̃f
  oCX inode ̔ԍʒm܂B Windows ł́AReit@C
  ̃pXJ[lɕԂ܂B

  G[

  L Acfs_open_out \̂ Windows ł̑ƌɂ͐
  ƂĂ܂B̓Reit@C̖OŊJA̓Re
  it@C inode ŊJAƂ upcall 邱Ƃŗǂ
  ܂B

  4.16.  close

  Tv t@CAT[ołXV܂B

  

     

                struct cfs_close_in {
                    ViceFid     VFid;
                    int flags;
                } cfs_close;

     o
        Ȃ

  ڍ  VFid Ŏw肳t@C܂B

  G[

  L flags ͖ӖŁAgp܂BȂA Venus ̃R
  [h execp ̓tB[h]nAԂÃtB[h
  ́At@C͕ꂽŝ߂ɃɃ}bvꂽ܂܂ł邱
  ƂAVenus ɒʒm邽߂Ɏg邱ƂɂȂ͂łBVenus
  vproc_vfscalls Ńf[^Ă邱ƂюĂȂƂɂ
  ̒߂܂B͕ςłBt@CĂꍇARei
  t@C̒̃f[^͐Vf[^ɂȂĂƂׂłB
  ł execp tǑ͍ɂȂĂ邩܂ - ݂ Venus
  ł̓t@CÓIȃɃ}bvĂ̂ɂ炸At@C
  LbVtbVłƍl邩܂B̂Ƃ𗝉
  Kv܂B

  4.17.  ioctl

  Tv t@Cɑ΂ ioctl s܂B pioctl C^[tF[X
  ܂݂܂B

  

     

                struct cfs_ioctl_in {
                    ViceFid VFid;
                    int cmd;
                    int len;
                    int rwflag;
                    char *data;                 /* Place holder for data. */
                } cfs_ioctl;

     o

                struct cfs_ioctl_out {
                    int len;
                    caddr_t     data;           /* Place holder for data. */
                } cfs_ioctl;

  ڍ t@Cɑ΂ ioctl s܂B command, len, data 
  ͒ʏLڂ܂Bflags  Venus ͎gp܂B

  G[

  L łpȃp[^łBflags ͎g܂BVenus ̃R[
  h PREFETCHING ɎgƌȂł傤 ?

  4.18.  rename

  Tv fid ̖OύX܂B

  

     

                struct cfs_rename_in {
                    ViceFid     sourceFid;
                    char        *srcname;
                    ViceFid destFid;
                    char        *destname;
                } cfs_rename;

     o
        Ȃ

  ڍ  fBNg sourceFid ̒ srcname ƂÕIuWFNg
  destFid ̒ destname ɕύX܂BO srcname  destname 
   0 Ń^[~l[gĂBUnix J[lɂ镶͂
   null ^[~l[gĂƂ͌܂B

  G[

  4.19.  readdir

  Tv fBNgGgǂݏo܂B

  

     

                struct cfs_readdir_in {
                    ViceFid     VFid;
                    int count;
                    int offset;
                } cfs_readdir;

     o

                struct cfs_readdir_out {
                    int size;
                    caddr_t     data;           /* Place holder for data. */
                } cfs_readdir;

  ڍ fBNgGg VFid  offset ő count oCgǂݏo
  ܂Bf[^ data ̒ɕԂÃTCY size Ԃ܂B

  G[

  L ̃R[͎gp܂BReaddir ̓Reit@C
  邽߂łBꂩsfBNg̉ǂ̊ԂɁǍčl
  B

  4.20.  vget

  Tv FSDB->Get s悤 Venus Ɏw܂B

  

     

                struct cfs_vget_in {
                    ViceFid VFid;
                } cfs_vget;

     o

                struct cfs_vget_out {
                    ViceFid VFid;
                    int vtype;
                } cfs_vget;

  ڍ  upcall  VFid Ńxtꂽ fsobj ɑ΂āAget 
  s悤 Venus Ɉ˗܂B

  G[

  L ͎̑gp܂BȂAɃ}bvꂽt@
  C̓ǂݏo^݂ɑΉ邽߂ɎgƂł̂ŁAɗL
  płB̃t@C vget gp Venus ̃LbV̒
  uŒvłAinactive ŉł܂B

  4.21.  fsync

  Tv t@C RVM XV悤 Venus ɖ܂B

  

     

                struct cfs_fsync_in {
                    ViceFid VFid;
                } cfs_fsync;

     o
        Ȃ

  ڍ  IuWFNg VFid  RVM XV悤 Venus Ɉ˗܂B
  ̓J[lx fsync ̗ނ̃R[̈ꕔƂČĂ΂͂
  Bʂ͓ǂ܂B

  G[

  NOTE Linux ͂̃R[Ă܂Bׂł

  4.22.  inactive

  Tv vnode gpȂ Venus ɖ܂B

  

     

                struct cfs_inactive_in {
                    ViceFid VFid;
                } cfs_inactive;

     o
        Ȃ

  ڍ ̑ EOPNOTSUPP Ԃ܂B

  G[

  L ͂Ԃ폜͂łB

  4.23.  rdwr

  Tv t@Cɑ΂ǂݏo݂܂B

  

     

                struct cfs_rdwr_in {
                    ViceFid     VFid;
                    int rwflag;
                    int count;
                    int offset;
                    int ioflag;
                    caddr_t     data;           /* Place holder for data. */
                } cfs_rdwr;

     o

                struct cfs_rdwr_out {
                    int rwflag;
                    int count;
                    caddr_t     data;   /* Place holder for data. */
                } cfs_rdwr;

  ڍ  upcall ̓t@Cɑ΂ǂݏo݂s悤 Venus 
  ˗܂B

  G[

  L ǂݏo^݂̑ Venus ͍sȂƂ Coda ̎`ɋt
  炤ƂȂ̂ŁA͍폜͂łB͓̑삵Ȃƕ
  ܂BݎgpĂ܂B

  4.24.  odymount

  Tv  Unix ̃}Eg|Cgɕ Coda t@CVXe}
  Eg邱Ƃ\Ƃ܂B

  

     

                struct ody_mount_in {
                    char        *name;          /* Place holder for data. */
                } ody_mount;

     o

                struct ody_mount_out {
                    ViceFid VFid;
                } ody_mount;

  ڍ  name Ŏw肳ꂽ Coda VXe rootfid Ԃ悤 Venus Ɉ
  ܂Bfid  VFid ̒ɕԂ܂B

  G[

  L ̃R[ dynamic set  David gĂ܂B
  VFS }EeBÖ̃|C^𕡎GɂĂ܂̂ŁA폜͂
  łBʂ Coda ͎gp܂B̃R[ Venus ł͎Ă
  ܂B

  4.25.  ody_lookup

  Tv 𒲂ׂ܂B

  

     
        ֌W

     o
        ֌W

  ڍ

  G[

  L g͂܂B̃R[ Venus ł͎Ă܂B

  4.26.  ody_expand

  Tv dynamic set ɂ鉽g܂B

  

     
        ֌W

     o
        ֌W

  ڍ

  G[

  L g͂܂B̃R[ Venus ł͎Ă܂B

  4.27.  prefetch

  Tv dynamic set ǂ݂܂B

  

     
        hLgĂ܂B

     o
        hLgĂ܂B

  ڍ  Venus  worker.cc ɂ͂̃R[̃T|[g܂A삵
  ȂƋLĂ܂BJ[l̓T|[gĂ܂̂ŁA͋
  Ƃł͂܂ (ODY_PREFETCH ͓삪`Ă܂)B

  G[

  L g͂܂BR[͓삹ACoda Ŏgp܂B

  4.28.  signal

  Tv upcall Ɋւ signal  Venus ɑ܂B

  

     
        Ȃ

     o
        Kp

  ڍ   Venus ւ upcall ̒ʏ폈͈͊Ô̂ŁAVenus 
  L[烁bZ[Wǂ񂾌AĂяõvZX signal 
  Ƃ Venus ɒʒm܂BVenus ͑邱ƂɂȂĂ
  ܂B

  G[ ͂܂B

  L Venus ̊𐳂s߂ Venus Kv
  ̂ǂĂKv܂BɁAVXeR[̏Ԗ
   upcall 𐳊mɈKv܂B܂AVenus  upcall ̌A
  J[l (ӔC͈͂Ƃ) ̒ʒmsKv̂ǂ̂悤ȏ
   Venus ŋN̂m邱Ƃdvł (Ⴆ open ͊ԈႢȂ
  ̂悤ȏԕωłȂ̂̂͂ł͂Ȃ܂)B

  5.  ~jLbV downcall

  Coda FS hCóAupcall ̉񐔂}邽߂ɁAlookup 
  access ̌ʂLbVł܂Bupcall ́AvZXReLXgX
  Cb`sKv̂ŁARXg܂BLbV邱
  ƂɑΉāAVenus  FS hCoɃLbVꂽGg̃tb
  V▼O̕ύXsȂ΂ȂȂƂʒms܂B

  ʓIɃJ[lR[h́AVenus Ǘ ViceFid Ƌɓ̃t@C
  nh (BSD  vnode, Linux  inode, Windows  FileHandle ƌĂ
  ܂) ɃN\̂ǗȂ΂Ȃ܂B̗ŔAp
  ȑo̕ϊAupcall sA upcall ̌ʂgpەK
  vƂȂ邩łBNꂽIuWFNg cnode ƌĂ΂
  ܂B

  s̃~jLbV͈̎ȉL^LbVGgɂȂĂ
  ܂ -

  1. t@C̖O

  2. IuWFNg܂łfBNg cnode

  3. lookup  CodaCred ̈ꗗ

  4. IuWFNg cnode

  Coda FS hCoɂ lookup R[́AĂяo̖OAfBNg
  ACodaCred nALbV]IuWFNg cnode v
  邩܂BLbV cnode ԂAȂ
  ł傤BCoda FS hCóAIuWFNg̏C͍폜
  ꍇALbVGgɂȂ悤ɁACtȂ΂Ȃ܂
  B

  LbVGgLł͂ȂƂ𓾂ꍇAVenus 
  J[l downcall 𔭍sł傤Bdowncall  Coda FS hCo
  ߊlALbVȉɏqׂނŖɂ܂Bdowncall ̃f[
  ^J[lɓǂݏoȂꍇACoda FS hCo̓G[
  Ԃ܂B

  5.1.  INVALIDATE

  ̃R[̏͂܂B

  5.2.  FLUSH

   Ȃ

  Tv l[LbVŜtbV܂B

  ڍ Venus ͋NяIɂ̃R[𔭍s܂BȃLb
  V̕ێh܂BJ[l̃l[LbV𓮓Iɐ؂Iy
  [eBOVXe܂BꂪI downcall ͏I
  B

  5.3.  PURGEUSER

  

          struct cfs_purgeuser_out {/* CFS_PURGEUSER is a venus->kernel call */
              struct CodaCred cred;
          } cfs_purgeuser;

  ڍ Cred LbVׂ̂ẴGg폜܂B̃R[
  ́A[Up̃g[N̊؂邩tbV鎞ɔs
  B

  5.4.  ZAPFILE

  

          struct cfs_zapfile_out {  /* CFS_ZAPFILE is a venus->kernel call */
              ViceFid CodaFid;
          } cfs_zapfile;

  ڍ fBNg vnode ƖȎg݂ׂẴGg폜
  BLbVꂽ vnode ̑ƂȂʁAs܂B

  L R[ NetBSD  Mach ŐOł͂܂B~j
  LbV zapfile [`͈̈قȂĂ܂BLinux́A
  𐳂Ă܂B

  5.5.  ZAPDIR

  

          struct cfs_zapdir_out {   /* CFS_ZAPDIR is a venus->kernel call */
              ViceFid CodaFid;
          } cfs_zapdir;

  ڍ fBNg CodaFid т̃fBNĝׂĂ̎q̃Gg
  ALbV̒Aׂč폜܂BVenus fBNg
  callback 󂯎ɔs܂B

  5.6.  ZAPVNODE

  

          struct cfs_zapvnode_out { /* CFS_ZAPVNODE is a venus->kernel call */
              struct CodaCred cred;
              ViceFid VFid;
          } cfs_zapvnode;

  ڍ œn cred  VFid LbV̒̃Gg
  ׂč폜܂B̃R[͂Ԃ񔭍s邱Ƃ͂܂B
  5.7.  PURGEFID

  Tv

  

          struct cfs_purgefid_out { /* CFS_PURGEFID is a venus->kernel call */
              ViceFid CodaFid;
          } cfs_purgefid;

  ڍ t@Ĉ߂̑tbV܂BꂪfBNg (
   vnode) ȂAl[LbV̂̎qAl[LbV
  t@C폜܂B

  5.8.  REPLACE

  Tv ÕRNV̂߂ Fid u܂B

  

          struct cfs_replace_out { /* cfs_replace is a venus->kernel call */
              ViceFid NewFid;
              ViceFid OldFid;
          } cfs_replace;

  ڍ ̃[`̓l[LbV̒ ViceFid ʂ̂̂ɒu
  ܂BؒfĂԃ[JɊĂꂽe| fid O[o
   fid ɒu邽߂̍ē̊ԁA fid ̎QƃJEg 0
  łȂƂłAVenus ɋǉ܂B

  6.  ƃN[Abv

  Nђ~邢 Venus ̌̏᎞ Coda FS hCopɖ]܂
  @\AȌɂ̃ZNVŏqׂ܂Bn߂OɁACoda FS h
  Cõf[^ǗĂ邱ƂĊmFĂ܂傤B

  1. bZ[WL[

  2. cnode

  3. l[LbVGg

     l[LbVGg͊SɃhCoL̂ŁA͊
     Pɑł܂BʂɃbZ[WL[ɂ͖mɏь㏈
     ̃[`ł傤Bcnode ͂͂邩ɈÂ炢̂
     BCoda t@CVXeɃ[UvZXQƂĂ񐔂
     ێĂ̂ŁAcnode N[Abv͍̂܂
     B

  ̂̂v\܂ -

  1. bZ[WTuVXe

  2. VFS w

  3. pioctl C^[tF[X

     ݁A pioctl  VFS  Coda ɓn̂ŁA𓯗lɈ
     Ƃł܂B

  6.1.  K{

  ̕K{ɑΉׂł -

  1. bZ[WL[ open  close [`Ă͂
     BUnix ̃LN^foCX̃I[v͂[`łB

     o  I[v̑OɁAbZ[WuƂ͂ł܂B

     o  I[v͕ۗ̂܂܂̌ÂbZ[Wׂč폜܂B

     o  N[Y upcall łȂX[ṽvZXׂĂɒʒm
        sł傤B

     o  N[Y̓bZ[WL[ɊĂꂽׂẴ
        ł傤B

  2. I[vŃl[LbV͋̏ԂɏׂłB

  3. bZ[WL[I[vÓAVFS ׂ͂Ďsł
     BK^ɂAI[vO Coda t@CVXẽ}Eg
     Ȃ̂ŁAɂmF邱Ƃł܂B

  4. L[̃N[Y̌́AVFS ͐܂BŋCtȂ
     ΂ȂȂƂ́Ȃ (lookup, read/write, readdir) 
     upcall ȂŐĂ܂ƂłB͖Iɑj~Ȃ
     Ȃ܂B

  5. N[Yɍۂăl[LbV̓tbVꖳɂȂ̂Ƃ
     ܂B

  6. cnode ɕێꂽׂẴ upcall ɈˑɂׂĂ
     邱Ƃł܂B

  7. t@CVXẽA}Eg upcall ɈˑɍsƂł
     ܂B

  8. Venus  rootfid  rootfid ̑𓾂ȂꍇAR[_
     t@CVXẽ}Eg͗DɎsׂłB}Eg
     OɁÃIuWFNgǂ݂邽߂ɁAVenus  lattr 
     sƗǂł傤B

  L   NetBSD ŁA Linux L̕K{SɎĂ
  ܂B~ȑ̂߂ɁAPĂKv܂B

  7.  Inode ԍ

  Unix  stat VXeR[̓t@Cp inode Ԃ܂Bgetwd 
  tar ̂悤ȃCuR[@\悤ɁACoda t@Cp
  PKv܂B

  {[̃}Eg|CǵAVenus  statbuf \̂̒ɊĂ
  inode ԍ̒l𕡎Gɂ܂BK͎̂Ƃł -

  1. fid ͐ (vol<<20) + (vnode<<10) + (uniq) ɕϊ܂B

  2. fid {[̃[głꍇÃ}Eg|CgłV
     {bNN inode ԍĂ܂B

  J[l̓}Eg|Cg̃V{bNNLbVĂ͂Ȃ
  񂪁AJo[邱ƂłȂꍇ邱Ƃ͂܂܂B
  ɃLbVV{bNN fid  downcall AJ[
  l}Eg|Cg fid ȑOɌĂȂƂɂ
  As܂B

  Coda p̃J[lR[h Fid ɊÂ vnode (BSD), inode (Linux),
  FileHandle (Win) T lookup ̎dg݂邽߂ɕKvŁA{
  [̃[g𐳂悤CKvł傤B

  8.  {ɂ

  { Linux Japanese FAQ Project s܂B|Ɋւ邲ӌ
   JF vWFNg <JF@linux.or.jp> ɘAĂB

     v1.2
        |: {_ <hng@ps.ksky.ne.jp>

        Z:
        J G <jeanne@mbox.kyoto-inet.or.jp>A
        Seiji Kaneko <skaneko@a2.mbn.or.jp>

