X-Recipient: archive-cygwin@delorie.com
X-SWARE-Spam-Status: No, hits=-6.4 required=5.0	tests=BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,T_RP_MATCHES_RCVD
X-Spam-Check-By: sourceware.org
Date: Mon, 14 May 2012 10:33:28 -0700
From: Jeremy Allison <jra@samba.org>
To: cygwin@cygwin.com, Jeremy Allison <jra@samba.org>,
        starlight.2012q2@binnacle.cx
Subject: Re: CYGWIN inode over Samba share not constructed from   IndexNumber
Message-ID: <20120514173328.GG2607@samba2>
Reply-To: Jeremy Allison <jra@samba.org>
References: <6.2.5.6.2.20120511125624.05cd1ff8@binnacle.cx> <20120511175843.GL13090@calimero.vinschen.de> <20120511211532.GB2278@jeremy-laptop> <20120512105349.GM13090@calimero.vinschen.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <20120512105349.GM13090@calimero.vinschen.de>
User-Agent: Mutt/1.5.20 (2009-06-14)
Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm
Precedence: bulk
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie.com@cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe@cygwin.com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-help@cygwin.com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
Delivered-To: mailing list cygwin@cygwin.com

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.2012q2@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

