With GPFS 3.4.0-10 and 3.4.0-11 on Redhat 5.7 and samba 3.6.3 Windows clients can no longer create new files on shares with vfs_gpfs enabled. vfs_gpfs_get_real_filename() returns "Bad address", which probably causes the error. I see the same with samba 3.5.12. I did recompile samba 3.6.3 with gpfs 3.4.0-11 to ensure that I get the right headers, still no luck, the error stays. Since gpfs 3.4.0-10 gpfs_reafilename_path_fn() does no longer set errno=2(ENOSYS?) if a file does not exist but sets errno=14. I guess that this triggers this issue. The client (Windows 2008R2 Server) tries to create a new file with the command echo hello > test.txt the samba log shows [2012/02/14 14:20:30.507269, 4] smbd/uid.c:351(change_to_user) Skipping user change - already user [2012/02/14 14:20:30.507316, 5] smbd/filename.c:257(unix_convert) unix_convert called on file "test.txt" [2012/02/14 14:20:30.507343, 5] smbd/filename.c:416(unix_convert) unix_convert begin: name = test.txt, dirpath = , start = test.txt [2012/02/14 14:20:30.507379, 10] modules/vfs_gpfs.c:152(vfs_gpfs_get_real_filename) smbd_gpfs_get_realfilename_path returned Bad address smb.conf: [global] guest account = smbguest netbios name = XBL-TEST-20 workgroup = XBLTEST max protocol = SMB2 min receivefile size = 131072 log level = 5 vfs:20 [public] guest ok = yes guest only = yes path = /export/xbl2/Data/scratch/bench/test.d/cifs read only = no vfs objects = gpfs fileid fileid:mapping = fsname gpfs:sharemodes = No I addes some more debug statements to the code to bracket the failing call to gpfs_get_realfilename_path_fn(): [2012/02/14 15:38:10.324041, 3] modules/gpfs.c:161(smbd_gpfs_get_realfilename_path) calling gpfs_get_realfilename_path_fn() with args pathname=/test.txt filename=BBBBBBBBBB... buflen=4096 [2012/02/14 15:38:10.324074, 3] modules/gpfs.c:163(smbd_gpfs_get_realfilename_path) called gpfs_get_realfilename_path_fn(), returned -1, args pathname=/test.txt filename=BBBBBBBBBB... buflen=4096 [2012/02/14 15:38:10.324098, 10] modules/vfs_gpfs.c:152(vfs_gpfs_get_real_filename) smbd_gpfs_get_realfilename_path returned Bad address Now when I do the same with GPFS 3.4.0-9 I get [2012/02/14 15:41:21.271090, 5] smbd/filename.c:416(unix_convert) unix_convert begin: name = test.txt, dirpath = , start = test.txt [2012/02/14 15:41:21.276993, 3] modules/gpfs.c:161(smbd_gpfs_get_realfilename_path) calling gpfs_get_realfilename_path_fn() with args pathname=/test.txt filename=BBBBBBBBBB buflen=4096 [2012/02/14 15:41:21.277041, 3] modules/gpfs.c:163(smbd_gpfs_get_realfilename_path) called gpfs_get_realfilename_path_fn(), returned -1, args pathname=/test.txt filename=BBBBBBBBBB buflen=4096 [2012/02/14 15:41:21.277069, 10] modules/vfs_gpfs.c:152(vfs_gpfs_get_real_filename) smbd_gpfs_get_realfilename_path returned No such file or directory [2012/02/14 15:41:21.277104, 5] smbd/filename.c:781(unix_convert) New file test.txt So the call to gpfs_get_realfilename_path_fn() works the same and returns -1 as before, but the interpretation is different: with gpfs 3.4.0-9 I get "No such file or directory" but with gpfs 3.4.0-11 I get "Bad address" It looks like gpfs_get_realfilename_path_fn() set "errno" to different values, I included errno in the debug output: gpfs 3.4.0-9 working - errno=2 [2012/02/14 15:49:22.067993, 3] modules/gpfs.c:161(smbd_gpfs_get_realfilename_path) calling gpfs_get_realfilename_path_fn() with args pathname=/test.txt filename= } buflen=4096 [2012/02/14 15:49:22.068041, 3] modules/gpfs.c:163(smbd_gpfs_get_realfilename_path) called gpfs_get_realfilename_path_fn(), returned -1 errno=2, args pathname=/test.txt filename= } buflen=4096 [2012/02/14 15:49:22.068068, 10] modules/vfs_gpfs.c:152(vfs_gpfs_get_real_filename) smbd_gpfs_get_realfilename_path returned No such file or directory gpfs 3.4.0-11 not longer working - errno=14 [2012/02/14 15:59:54.772861, 5] smbd/filename.c:257(unix_convert) unix_convert called on file "test.txt" [2012/02/14 15:59:54.772896, 5] smbd/filename.c:416(unix_convert) unix_convert begin: name = test.txt, dirpath = , start = test.txt [2012/02/14 15:59:54.772934, 3] modules/gpfs.c:161(smbd_gpfs_get_realfilename_path) calling gpfs_get_realfilename_path_fn() with args pathname=/test.txt filename=BBBBBBBBBB buflen=4096 [2012/02/14 15:59:54.772968, 3] modules/gpfs.c:163(smbd_gpfs_get_realfilename_path) called gpfs_get_realfilename_path_fn(), returned -1 errno=14, args pathname=/test.txt filename=BBBBBBBBBB buflen=4096 [2012/02/14 15:59:54.772994, 10] modules/vfs_gpfs.c:152(vfs_gpfs_get_real_filename) smbd_gpfs_get_realfilename_path returned Bad address
This seems to be a regression in GPFS that should be fixed in GPFS. You can disable the use of this call with gpfs:getrealfilename = no in smb.conf until GPFS has solved the issue
Hello, thank you for the workaround. It did work when I've put the setting gpfs:getrealfilename = no into the [global] section, it did not work when I've put it into section for the specific share.
We just recently made this a share specific option in upstream, this is not available in 3.5.x or 3.6.x yet So you need to set it as global option.
(In reply to comment #1) > This seems to be a regression in GPFS that should be fixed in GPFS. > > You can disable the use of this call with gpfs:getrealfilename = no in smb.conf > until GPFS has solved the issue I did send a report to the gpfs mailing list, too.