> From the man page for stat(), I would expect to get > the same values from stat()calls for the st_dev and > st_ino fields regardless of which host runs a program > containing a stat() call provided, of course, that > the path argument refers to the same physical file. > For example, my home directory points to the same > physical drive from several hosts. In this case, the > path name to a given text file is the same > everywhere. When I run the attached program on 3 > different hosts, I get the same st_ino values but 3 > different st_dev values. In one case, the file is ufs > mounted since that host is actually connected to the > hard drive. In the other two, the file is nfs > mounted.
actually despite all my former attempts to read the code differently, your observation is correct, debugging this same scenario leads to the fact, yes Mark you were correct, bo doubt ! that whats used on the NFS client is the dev_t for the NFS clients mounted file system (and not the remote file systems device id) ie. at rnode creation time we must stuff the NFS clients mount vfs_dev into the rnodes attributes va_fsid (though I still have not found this place...). if you have only 1 real NFS server hosting the file then the va_nodeid, ie. st_ino the inode number will be unique across all NFS clients and the local host as long as the file lives under that name and has not been deleted or renamed and the inode number got re-used on the server. So indeed over NFS you get different dev_t then the local one. client_A (onnv_98_amd) -> server_A (s10u5_sparc) NFSv4 / UFS opteron.batschul./mnt/export/home/batschul.=> /site/sw/getinode act.0 inode = 1153, device = 53c00061 opteron -> blade NFS C 4 (open ) PUTFH FH=5C4E OPEN act.0 OT=NC SQ=6 CT=N AC=R DN=N OO=001B GETFH GETATTR 10011a b0a23a blade -> opteron NFS R 4 (open ) NFS4_OK PUTFH NFS4_OK OPEN NFS4_OK ST=1855:1 RF=CF,PL DT=R DST=1DD5:0 GETFH NFS4_OK FH=4A79 GETATTR NFS4_OK opteron -> blade NFS C 4 (open_confirm) PUTFH FH=4A79 OPEN_CONFIRM SQ=7 OST=1855:1 blade -> opteron NFS R 4 (open_confirm) NFS4_OK PUTFH NFS4_OK OPEN_CONFIRM NFS4_OK OST=1855:2 opteron -> blade NFS C 4 (close ) PUTFH FH=4A79 GETATTR 10011a b0a23a CLOSE SQ=8 OST=1855:2 blade -> opteron NFS R 4 (close ) NFS4_OK PUTFH NFS4_OK GETATTR NFS4_OK CLOSE OST=1855:3 opteron -> blade NFS C 4 (lookup valid) PUTFH FH=5C4E NVERIFY GETATTR 10011a b0a23a ACCESS rd,lk,mo,ext,dl LOOKUP act.0 GETFH GETATTR 100... blade -> opteron NFS R 4 (lookup valid) NFS4_OK PUTFH NFS4_OK NVERIFY NFS4_OK GETATTR NFS4_OK ACCESS NFS4_OK Supp=rd,lk,mo,ext,dl Allow=rd,lk,mo,... opteron -> blade TCP D=2049 S=1021 Ack=252701753 Seq=3958462686 Len=0 Win=32806 Options=<nop,nop,tstamp 2946433 106390> > ::dnlc !grep act.0 ffffff01b07f3a80 ffffff01af826b00 act.0 > ffffff01b07f3a80::print vnode_t { v_lock = { _opaque = [ 0 ] } v_flag = 0 v_count = 0x1 v_data = 0xffffff01b305f7e0 v_vfsp = 0xffffff01afaf6838 v_path = 0xffffff01ae737988 "/mnt/export/home/batschul/act.0" } > 0xffffff01b305f7e0::print rnode4_t { r_attr = { va_mask = 0xbfff va_type = 1 (VREG) va_mode = 0x1a4 va_uid = 0xea61 va_gid = 0xea61 va_fsid = 0x14f00000006 va_nodeid = 0x1153 va_nlink = 0x1 va_size = 0x534af va_atime = { tv_sec = 2008 May 9 04:31:16 tv_nsec = 0x111e9d38 } va_mtime = { tv_sec = 2007 Feb 16 16:17:43 tv_nsec = 0 } va_ctime = { tv_sec = 2008 May 2 04:03:50 tv_nsec = 0x3a36c178 } va_rdev = 0 va_blksize = 0x2000 va_nblocks = 0x2b0 va_seq = 0 } r_time_attr_saved = 0x1ad80a7bf097 r_time_attr_inval = 0x1af6791897f5 r_mntd_fid = 0x1153 > 0xffffff01afaf6838::print vfs_t (nfs mount on the client) { vfs_next = root vfs_prev = 0xffffff01afaf6908 vfs_op = vfssw+0xd38 vfs_vnodecovered = 0xffffff01af827080 vfs_flag = 0x2400 vfs_bsize = 0x8000 vfs_fstype = 0x7 vfs_fsid = { val = [ 0x53c0006, 0x1a ] } vfs_data = 0xffffff01b2d23000 vfs_dev = 0x14f00000006 ============================= local server_A (s10u5_sparc) UFS blade.batschul./export/home/batschul.=> ./getinode act.0 inode = 1153, device = 1d800071 > ::dnlc!grep act.0 00000600140c8440 0000060013ffba40 act.0 > 00000600140c8440::print vnode_t { v_lock = { _opaque = [ 0 ] } v_flag = 0x10000 v_count = 0x2 v_data = 0x600140cc478 v_vfsp = 0x6001082c840 v_path = 0x600117a8e60 "/export/home/batschul/act.0" } > 0x600140cc478::print inode_t { i_dev = 0x7600000007 > 000006001082c840::print vfs_t { vfs_next = 0x6001082d2c0 vfs_prev = 0x6001082d200 vfs_op = vfssw+0x138 vfs_vnodecovered = 0x600121dbe00 vfs_flag = 0x2420 vfs_bsize = 0x2000 vfs_fstype = 0x2 vfs_fsid = { val = [ 0x1d80007, 0x2 ] } vfs_data = 0x600127e8040 vfs_dev = 0x7600000007 ========================================= client_C (s10u4 sparc) -> server_A (s10u5 sparc) NFSv4 / UFS kira.batschul./mnt/batschul.=> /export/home/batschul/getinode act.0 inode = 1153, device = 51c0003l > 0000030003a9bb00::print vnode_t { v_lock = { _opaque = [ 0 ] } v_flag = 0 v_count = 0x1 v_data = 0x30003aa4f08 v_vfsp = 0x300000a7840 v_path = 0x30002435da0 "/mnt/batschul/act.0" } > 0x300000a7840::print vfs_t { vfs_next = root vfs_prev = 0x300000a7540 vfs_op = vfssw+0xb38 vfs_vnodecovered = 0x30003aad8c0 vfs_flag = 0x2400 vfs_bsize = 0x8000 vfs_fstype = 0x7 vfs_fsid = { val = [ 0x51c0003, 0x16 ] } vfs_data = 0x3000170a000 vfs_dev = 0x14700000003 > 0x30003aa4f08::print rnode4_t { r_attr = { va_mask = 0xbfff va_type = 1 (VREG) va_mode = 0x1a4 va_uid = 0xbd3f va_gid = 0x1 va_fsid = 0x14700000003 va_nodeid = 0x1153 va_nlink = 0x1 va_size = 0x534af va_atime = { tv_sec = 2008 May 9 04:31:16 tv_nsec = 0x111e9d38 } va_mtime = { tv_sec = 2007 Feb 16 16:17:43 tv_nsec = 0 } va_ctime = { tv_sec = 2008 May 2 04:03:50 tv_nsec = 0x3a36c178 } va_rdev = 0 va_blksize = 0x2000 va_nblocks = 0x2b0 va_seq = 0 } r_time_attr_saved = 0x52e2c5e816 r_time_attr_inval = 0x5395d27a30 r_mntd_fid = 0x1153 -- This message posted from opensolaris.org