On Sat, May 12, 2012 at 12:53:49PM +0200, Corinna Vinschen wrote: > Hi Jeremy, > > On May 11 14:15, Jeremy Allison wrote: > > On Fri, May 11, 2012 at 07:58:43PM +0200, Corinna Vinschen wrote: > > > On May 11 12:56, starlight.201...@binnacle.cx wrote: > > > > /******************************************************************** > > > > Create a 64 bit FileIndex. If the file is on the same device as > > > > the root of the share, just return the 64-bit inode. If it isn't, > > > > mangle as we used to do. > > > > ********************************************************************/ > > > > > > > > uint64_t get_FileIndex(connection_struct *conn, const SMB_STRUCT_STAT > > > > *psbuf) > > > > { > > > > uint64_t file_index; > > > > if (conn->base_share_dev == psbuf->st_ex_dev) { > > > > return (uint64_t)psbuf->st_ex_ino; > > > > } > > > > file_index = ((psbuf->st_ex_ino) & UINT32_MAX); /* FileIndexLow */ > > > > file_index |= ((uint64_t)((psbuf->st_ex_dev) & UINT32_MAX)) << 32; > > > > /* FileIndexHigh */ > > > > return file_index; > > > > } > > > > > > Which Samba version introduced this behaviour? Originally, way back > > > when Samba 3.0.28 was new, the inode numbers were always mangled to be > > > 64 bit numbers, AFAIK. The code in Cygwin which doesn't trust 32 bit > > > inode numbers on remote drives is there for ages, at least since 2007. > > > > > > Fortunately we have an interface which allows to fetch the Samba version > > > number from the server since Samba 3.0.28a. So, if we know which Samba > > > version started to return the real 32 bit inode number, we can adapt. > > > [...] > > > inline bool > > > path_conv::isgood_inode (__ino64_t ino) const > > > { > > > /* We can't trust remote inode numbers of only 32 bit. That means, > > > remote NT4 NTFS, as well as shares of Samba version < 3.0. > > > The known exception are SFU NFS shares, which return the valid 32 bit > > > inode number from the remote file system unchanged. */ > > > return hasgood_inode () && (ino > UINT32_MAX || !isremote () || > > > fs_is_nfs ()); > > > } > > > > The get_FileIndex() code has been there since at least 3.6.x, but > > I'll try and track down when it was first introduced. > > That would be nice. For now, assuming the get_FileIndex has been > introduced with 3.6.0, I'd go with this new implementation, stretched > out and better comments for readability:
get_FileIndex() is in 3.5.x (current code). It was added in commit 920ffe49290cacd30d9bc582c1c3fee38308c260, which went in on Thu May 20 11:36:47 2010, which means it went into Samba 3.5.4. Jeremy. -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple