There's a problem, I believe an oversight, in the fix for bug 11206. # mount.cifs //windowshost/share /mnt -overs=3.0,mapposix,iocharset=utf8,user=xxx,domain=yyy,password=zzz # cd /mnt/tricky-names # mkdir dir-trailing-dot. # ls dir-trailing-dot. # echo foo >dir-trailing-dot./foo -bash: dir-trailing-dot./foo: No such file or directory # mkdir x # echo foo >x/foo # mv x dir2-trailing-dot. # ls dir2-trailing-dot. foo # cat dir2-trailing-dot./foo cat: dir2-trailing-dot./foo: No such file or directory I used the CentOS 3.10.0-957.1.3.el7.x86_64 kernel and cifs module, but I think every modern version has the same problem. I'll attach a patch for the fix that we are using.
Created attachment 14738 [details] patch for cifsConvertToUTF16()
resolving this as a dup of bug 11206 - with kernel 5.8 this is working fine. If the old kernel od CentOS/RHEL doesn't have the fix you need to file a bug report in their bug tracker. *** This bug has been marked as a duplicate of bug 11206 ***
sory, I need to correct myself, the testcase you mention is really broken! Steve or someone else who feels responsible for cifs vfs bug repost, can you have a look at this, please?
Can you tell me which version you still see it failing in? It works for me in 5.10. See below: root@smfrench-ThinkPad-P52:/mnt2# mkdir subdir root@smfrench-ThinkPad-P52:/mnt2# cd subdir root@smfrench-ThinkPad-P52:/mnt2/subdir# mkdir dir-trailing-dot. root@smfrench-ThinkPad-P52:/mnt2/subdir# ls dir-trailing-dot. root@smfrench-ThinkPad-P52:/mnt2/subdir# echo foo > dir-trailing-dot./foo root@smfrench-ThinkPad-P52:/mnt2/subdir# mkdir x root@smfrench-ThinkPad-P52:/mnt2/subdir# echo foo > x/foo root@smfrench-ThinkPad-P52:/mnt2/subdir# mv x dir2-trailing-dot. root@smfrench-ThinkPad-P52:/mnt2/subdir# ls dir2-trailing-dot. foo root@smfrench-ThinkPad-P52:/mnt2/subdir# cat dir2-trailing-dot./foo foo root@smfrench-ThinkPad-P52:/mnt2/subdir# mount | grep cifs //localhost/scratch on /mnt2 type cifs (rw,relatime,vers=3.1.1,cache=strict,username=smfrench,uid=0,noforceuid,gid=0,noforcegid,addr=127.0.0.1,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,mfsymlinks,rsize=4194304,wsize=4194304,bsize=1048576,echo_interval=60,actimeo=1) This was fixed multiple years ago in patch: commit 45e8a2583d97ca758a55c608f78c4cef562644d1 Author: Steve French <smfrench@gmail.com> Date: Wed Jun 22 21:07:32 2016 -0500 File names with trailing period or space need special case conversion POSIX allows files with trailing spaces or a trailing period but SMB3 does not, so convert these using the normal Services For Mac mapping as we do for other reserved characters such as : < > | ? * This is similar to what Macs do for the same problem over SMB3. CC: Stable <stable@vger.kernel.org> Signed-off-by: Steve French <steve.french@primarydata.com> Acked-by: Pavel Shilovsky <pshilovsky@samba.org>
it's a quite recent kernel here: root@cifstest1:/mnt2# uname -a Linux cifstest1 5.8.0-33-generic #36~20.04.1-Ubuntu SMP Wed Dec 9 17:01:13 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux root@cifstest1:/mnt2# mkdir dir-trailing-dot. root@cifstest1:/mnt2# ls dir-trailing-dot. root@cifstest1:/mnt2# echo foo >dir-trailing-dot./foo -bash: dir-trailing-dot./foo: Datei oder Verzeichnis nicht gefunden root@cifstest1:/mnt2# uname -a Linux cifstest1.int.sernet.de 5.8.0-33-generic #36~20.04.1-Ubuntu SMP Wed Dec 9 17:01:13 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
The patch I provided in comment 1 only helps if cifsConvertToUTF16() is called for a full path, of course. Perhaps that is not always the case.
Here is the additional patch which helps with the case where the path component with the trailing space or . (period) is not at the end of the path. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/cifs?id=57c176074057531b249cf522d90c22313fa74b0b
The additional fix is in 5.10
Steve, it would be very good if you would backport this to all the stable kernels, which have the unfixed tailing dot behaviour because without the patch that you mention, cifs vfs behaves completely broken in casees where such a directory exists.