delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2012/05/11/13:59:58

X-Recipient: archive-cygwin AT delorie DOT com
X-Spam-Check-By: sourceware.org
Date: Fri, 11 May 2012 19:58:43 +0200
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Cc: starlight DOT 2012q2 AT binnacle DOT cx, jra AT samba DOT org
Subject: Re: CYGWIN inode over Samba share not constructed from IndexNumber
Message-ID: <20120511175843.GL13090@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com, starlight DOT 2012q2 AT binnacle DOT cx, jra AT samba DOT org
References: <6 DOT 2 DOT 5 DOT 6 DOT 2 DOT 20120511125624 DOT 05cd1ff8 AT binnacle DOT cx>
MIME-Version: 1.0
In-Reply-To: <6.2.5.6.2.20120511125624.05cd1ff8@binnacle.cx>
User-Agent: Mutt/1.5.21 (2010-09-15)
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

On May 11 12:56, starlight DOT 2012q2 AT binnacle DOT cx wrote:
> Here is the logic Samba uses for inode
> determination, per Jermey Allison:
> 
> 
> 
> Ok, here's how we construct the 64-bit return
> value for that field:
> 
> /********************************************************************
>  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.

Btw., https://lists.samba.org/archive/samba/2012-May/167383.html is a
bit of a disappointment.  There's nothing "oddball" in the decision not
to trust remote inode numbers <= 0xffffffff.

It all started with the fact that remote NT4 servers returned ephemeral
file IDs <= 0xfffffff.  And there was some problem with 2.x Samba shares
as well, which also returned weird file IDs, but I don't recall the
details.

This is old code, I grant you that, but we had our reason to do so at
the time.  Here's the code in question including comment:

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 ());
}


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019