X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: Yes, hits=6.6 required=5.0 tests=AWL,BAYES_50,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Message-ID: <4E9EE8CC.5090806@lauterbach.com> Date: Wed, 19 Oct 2011 17:12:12 +0200 From: Franz Sirl User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: rm -rf cannot delete the upmost directory level anymore on a Novell share Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: 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 Hi, sometime between coreutils-7.0 and coreutils-8.4 (sorry, I don't have any other in between versions anymore) this simple command started to fail: # mkdir -p lev1/lev2/lev3 # rm -rfv lev1 removed directory: `lev1/lev2/lev3' removed directory: `lev1/lev2' rm: cannot remove `lev1': Device or resource busy Tested with coreutils-8.10 and cygwin1.dll from the 20111017 snapshot, as the cygwin1.dll didn't make any difference for the problem. If I just use rm.exe from coreutils-7.0 everything starts to work as expected again: # mkdir -p lev1/lev2/lev3 # rm -rfv lev1 removed directory: `lev1/lev2/lev3' removed directory: `lev1/lev2' removed directory: `lev1' Looking at the strace output of both rm-7.0 and rm-8.10 it seems that rm-8.10 thinks that lev1 is a file, because it uses unlink_nt() first. ... 3866 164248 [main] rm-8.10 336 rmdir: 0 = rmdir (/test_rm_rf/lev1/lev2/lev3) 295 164543 [main] rm-8.10 336 close: close (5) 231 164774 [main] rm-8.10 336 fhandler_base::close: closing '/test_rm_rf/lev1/lev2' handle 0x6FC 150 164924 [main] rm-8.10 336 close: 0 = close (5) 252 165176 [main] rm-8.10 336 normalize_posix_path: src /test_rm_rf/lev1/lev2 128 165304 [main] rm-8.10 336 normalize_posix_path: /test_rm_rf/lev1/lev2 = normalize_posix_path (/test_rm_rf/lev1/lev2) 267 165571 [main] rm-8.10 336 mount_info::conv_to_win32_path: conv_to_win32_path (/test_rm_rf/lev1/lev2) 133 165704 [main] rm-8.10 336 set_flags: flags: binary (0x2) 266 165970 [main] rm-8.10 336 mount_info::conv_to_win32_path: src_path /test_rm_rf/lev1/lev2, dst J:\FRA\test_rm_rf\lev1\lev2, flags 0x3000A, rc 0 333 166303 [main] rm-8.10 336 symlink_info::check: 0x0 = NtCreateFile (\??\J:\FRA\test_rm_rf\lev1\lev2) 345 166648 [main] rm-8.10 336 symlink_info::check: not a symlink 402 167050 [main] rm-8.10 336 symlink_info::check: 0 = symlink.check (J:\FRA\test_rm_rf\lev1\lev2, 0x22B5D0) (0x3000A) 252 167302 [main] rm-8.10 336 path_conv::check: this->path(J:\FRA\test_rm_rf\lev1\lev2), has_acls(0) 270 167572 [main] rm-8.10 336 build_fh_pc: fh 0x61256C7C, dev 0xC3 3861 171433 [main] rm-8.10 336 rmdir: 0 = rmdir (/test_rm_rf/lev1/lev2) 167 171600 [main] rm-8.10 336 normalize_posix_path: src /test_rm_rf/lev1 229 171829 [main] rm-8.10 336 normalize_posix_path: /test_rm_rf/lev1 = normalize_posix_path (/test_rm_rf/lev1) 398 172227 [main] rm-8.10 336 mount_info::conv_to_win32_path: conv_to_win32_path (/test_rm_rf/lev1) 399 172626 [main] rm-8.10 336 set_flags: flags: binary (0x2) 133 172759 [main] rm-8.10 336 mount_info::conv_to_win32_path: src_path /test_rm_rf/lev1, dst J:\FRA\test_rm_rf\lev1, flags 0x3000A, rc 0 318 173077 [main] rm-8.10 336 symlink_info::check: 0x0 = NtCreateFile (\??\J:\FRA\test_rm_rf\lev1) 227 173304 [main] rm-8.10 336 symlink_info::check: not a symlink 268 173572 [main] rm-8.10 336 symlink_info::check: 0 = symlink.check (J:\FRA\test_rm_rf\lev1, 0x22B5D0) (0x3000A) 253 173825 [main] rm-8.10 336 path_conv::check: this->path(J:\FRA\test_rm_rf\lev1), has_acls(0) 535 174360 [main] rm-8.10 336 build_fh_pc: fh 0x61256C7C, dev 0xC3 216 174576 [main] rm-8.10 336 unlink_nt: Opening file for delete failed, status = 0xC0000043 240 174816 [main] rm-8.10 336 seterrno_from_nt_status: /netrel/src/cygwin-snapshot-20111017-1/winsup/cygwin/fhandler_disk_file.cc:1735 status 0xC0000043 -> windows error 32 210 175026 [main] rm-8.10 336 geterrno_from_win_error: windows error 32 == errno 16 263 175289 [main] rm-8.10 336 rmdir: -1 = rmdir (/test_rm_rf/lev1) ... This happens both on XPSP3 (NWFS, Novell Client 4.91SP5IR1) and Win7SP1 (NcFsd, NovellClient2 SP1 IR9a). The strace was done on XP. Does this ring a bell for anyone? What else can I do to track down the cause? It cannot be so simple like rm-8.10 forgetting to close the open FDs of lev1 before trying to delete it? That was the only thing that jumped to my eyes while looking at the strace. Franz Sirl -- 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