Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com From: ericblake AT comcast DOT net (Eric Blake) To: bug-coreutils AT gnu DOT org Cc: cygwin AT cygwin DOT com Subject: mkdir -p and EROFS Date: Wed, 12 Oct 2005 14:47:01 +0000 Message-Id: <101220051447.16978.434D21E5000D25EB0000425222007610640A050E040D0C079D0A@comcast.net> The algorithm change between 5.3.0 and 5.90 in lib/mkdir-p.c to try mkdir() first instead of stat(), and key off of EEXIST, breaks when mkdir() fails with EROFS on an intermediate directory when the writable directory has been mounted inside a read-only tree. For example, on cygwin: $ mkdir -p //EBLAKE/share/dir mkdir: cannot create directory `//EBLAKE': Read-only file system where // and //EBLAKE are read-only, //EBLAKE/share exists and is writable, and //EBLAKE/share/dir does not exist. The failure comes because mkdir("//EBLAKE") fails with EROFS, which, as far as I can tell, is permitted by POSIX since // (the parent of //EBLAKE) is not writable, even though I would have preferred EEXIST. I have already raised this with the cygwin developers, who have expressed their desire to leave things as is rather than trying to return EEXIST in the case that an intermediate directory in the read-only file system exists, as it is much faster to blindly return EROFS than to stat the directory name to check for existance. So is it worth a patch to mkdir-p.c to treat EROFS as an indicator to perform a followup stat() (similar to the ENOSYS hack used for NFS mounts on Solaris)? -- Eric Blake -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/