delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2012/02/16/06:11:12

X-Recipient: archive-cygwin AT delorie DOT com
X-Spam-Check-By: sourceware.org
Date: Thu, 16 Feb 2012 12:09:44 +0100
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: File operations really slow in emacs
Message-ID: <20120216110944.GE19092@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <4F3A63AF DOT 7010905 AT cs DOT utoronto DOT ca> <20120214135246 DOT GA25918 AT calimero DOT vinschen DOT de> <4F3A7357 DOT 4010505 AT cs DOT utoronto DOT ca> <20120214151745 DOT GD25918 AT calimero DOT vinschen DOT de> <4F3A81F8 DOT 80205 AT cs DOT utoronto DOT ca> <20120214162656 DOT GE25918 AT calimero DOT vinschen DOT de> <4F3A9E01 DOT 7000500 AT cs DOT utoronto DOT ca> <20120214175735 DOT GH25918 AT calimero DOT vinschen DOT de> <4F3ABAEC DOT 40900 AT cs DOT utoronto DOT ca> <20120215092439 DOT GM25918 AT calimero DOT vinschen DOT de>
MIME-Version: 1.0
In-Reply-To: <20120215092439.GM25918@calimero.vinschen.de>
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 Feb 15 10:24, Corinna Vinschen wrote:
> On Feb 14 14:50, Ryan Johnson wrote:
> > Heisenburg? Impossible to know both what SMB share a mount points to
> > and whether it's currently connected?

Almost.  You have to access the share to find out if it is really
connected because the information returned from NetUseGetInfo that the
drive is disconnected could be outdated.  This is deep within the way
SMB works.  Either you wait up to, I'm not quite sure, 60 minutes I
think, or you just plunge into the drive and try to access it and
potentially suffer network timeouts.

> > It's really unfortunate Windows doesn't have a GetLocalDrives() or
> > GetAccessibleDriveLetters() function. Actually, isn't there a
> > function to convert DOS paths to those funky //?/ paths? Maybe that
> 
> \\?\ is nothing but a Win32 path prefix which tells the kernel32
> routines to omit the step to convert to native NT paths.  The problem is
> that the conversion buffers  have a fixed size of MAX_PATH characters,
> so Win32 paths without the prefix are restricted to 259 chars.  So
> in fact, there's no difference between the paths other than to omit
> a conversion step.  Apart from that the paths are equivalent:
> 
>   standard Win32        C:\dir\file    \\server\share\file
>   "long-path" Win32 \\?\C:\dir\file    \\?\UNC\server\share\file
>   native NT         \??\C:\dir\file    \??\UNC\server\share\file
> 
> > would be both fast and give enough information to keep stat() happy;
> 
> Not at all.  It's all the same file and the underlying NT functions
> will do the same in all cases.
> 
> But I already changed cygdrive::fstat yesterday to set st_nlinks to 1
> without calling GetFileAttributes in a loop.

I just applied a patch which calls NetUseGetInfo on SMB drives in
the cygdrive::readdir call.  As I mentioned above, if the function
returns OK, we fetch the inode number.  If the function returns
"Disconnected", we just omit the drive from the cygdrive directory.
If the drive is available again, it might not be noticed by the
NetUseGetInfo function for a long while.  But as soon as you access
the drive successfully, the info will be updated in the OS, and the
NetUseGetInfo function will happily return OK again.  This new
behaviour is not a swiss army knife since that's impossible with
SMB.  But it might be better suited then the former code.  I'm
just going to create a new snapshot.  Please test.


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