Re: PROBLEM: Attempting to create subdirectory returns error after removing parent directory with child entries using rmdir()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Does this patch which is in recent kernels change the behavior:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/fs/cifs?id=897fba1172d637d344f009d700f7eb8a1fa262f1

On Wed, Jun 22, 2016 at 8:35 AM, Bastian Arjun Shajit
<bastian@xxxxxxxxxx> wrote:
> Hi,
>
> We encountered the following error or unexpected behaviour when
> following the steps given below:
>
> 1. Mount the remote share exported by either windows or samba using the
> following command:
> sudo mount -t cifs -o
> port=445,vers=2.1,username=<username>,password=password,noperm,actimeo=0
> //<IP>/SH1 /mnt/test && cd /mnt/test
>
> 2. Run the attached program on the mounted share. You should see the
> following output:
>
> **bastian@gutbark-UX32VD:/mnt/test$ /KVMstorage/cifs_dir_bug
> ** [4428] mkdir ./parentdir 0777
> ** [4428] mkdir ./parentdir/sub.0 0777
> ** [4428] chdir ./parentdir/sub.0
> ** [4428] rmdir /mnt/test/parentdir
> !! [4428] stat() /mnt/test/parentdir Success
> ** [4428] mkdir /mnt/test/parentdir/sub.1
> !! [4428] mkdir /mnt/test/parentdir/sub.1 failed(No such file or directory)
>
> You can see from the above logs, stat of parentdir is successful but
> creating a new child directory under the parent fails.
>
> The attached program does the following:
> a. Create a parent directory
> b. Create a sub-directory under the parent.
> c. Change dir to sub-directory
> d. Now delete the parent directory using absolute path from the cifs
> client using "rmdir".
>
> The POSIX behaviour for rmdir() is that if there are entries other than
> "." and ".." it must return ENOTEMPTY error. But as per SMB2 protocol
> specification, we delete a directory by:
> a. Open directory with "Delete on Close" Flag set in the "CreateOptions"
> field of the SMB2 CREATE request.
> b. Close the open handle returned in the response for the previous request.
>
> As per SMB2 specification, the SMB2 close will always return NT status
> STATUS_SUCCESS for removing the directory even if the directory has
> child entries, but the server does not delete the directory itself.
>
> 4. Manually running "tree" on the mounted share shows the following:
> bastian@gutbark-UX32VD:/mnt/test$ tree
> .
> |__parentdir
> 1 directory, 0 files
>
> We clearly see above that the parent directory does not show any child
> directories.
>
> 5.Now we unmount and mount the remote share again
> bastian@gutbark-UX32VD:/mnt/test$ cd / && sudo umount /mnt/test
> bastian@gutbark-UX32VD:/KVMstorage/$ sudo mount -t cifs -o
> port=445,vers=2.1,username=<Username>,password=password,noperm,actimeo=0
> //<IP>/SH1 /mnt/test && cd /mnt/test
> bastian@gutbark-UX32VD:/mnt/test$ tree
> .
> |__parentdir
>            |__ sub.0
> 2 directories, 0 files//
>
> As you can see, remounting the remote share now displays a subdirectory
> which was not displayed in the earlier mount cycle.
>
> We used the following test setup for reproducing the above said issue:
> 1. Cifs client: Version = 2.06, Linux versions: Ubuntu, 3.19.8-ckt5 &
> 3.16.0-49-generic
> 2. Server: Windows 8.1 pro, Windows 7, Samba 4.1.6-Ubuntu.
> 3. Reproducible only on SMB2 protocol version.
>
> The issue was reproducible always on WIndows SMB server whereas on Samba
> server we were able to reproduce 1/2 times.
>
> We ran the same tests on CIFS client version: 2.08, Linux versions 4.4
> and 4.5 and we were unable to reproduce the issue.
>
> Br,
> Bastian
>



-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux