Greg Ercolano
2004-Oct-06 07:10 UTC
[Samba] "Text file busy" inconsistent problem with newly created files: bug?
I have noticed an inconsistency with the behavior of linux smbfs
mounting a remote win2k server while a file is open for writing:
1) If a linux process opens a file that /doesn't exist/ on the
win2k server, while the file is open, other machines trying
to read the file give the usual 'Text file is busy' (linux) or
'file is in use by another process' (windows).
2) However, if a linux process opens a file that /does/ exist,
other machines can read the file just fine while it is open,
both linux and windows print the file's contents just fine.
It seems like a bug; why should it matter if the file exists or not?
If intentional, how can a unix program (or mount flags?) control
opening the windows file in such a way that the file is /always/
readable by other machines, without ever giving 'text file busy'
errors. Basically, I need behavior #2 above consistently.
VERSIONS
--------
Client is Redhat 9.0, running the default samba 2.2.7a-6.
The file server is Windows 2000.
I was able to confirm this behavior at a separate location,
where they are running redhat 9.0 with the latest Samba 3.x.x installed,
and I think they have a Windows 2003 server.
REPLICATION
-----------
The problem is replicated in the following screen history, using
a 'ping' command to hold the file open while other machines try
to read its log output.
Note that the *second* run of the 'ping' command is readable by
the other machines, while the first is not.
'win2k' is the remote win2k file server.
'linux1' is the local linux machine, win2k mounted as /win2k/c
'linux2' is the remote linux machine, win2k mounted as /win2k/c
------------------------------------------------------------------------- snip
[root@linux1] $ grep smbfs /etc/fstab <-- SHOW HOW
LOCALHOST
MOUNTS THE WIN2K
SERVER
//win2k/c /win2k/c smbfs noauto,uid=500,gid=500,dmask=775,fmask=775 0 0
[root@linux1] $ mount | grep win2k <-- SHOW MOUNT
//win2k/c on /win2k/c type smbfs (0)
[root@linux1] $ rm /win2k/c/foo.log <-- MAKE SURE LOG
FILE DOESNT EXIST
[root@linux1] $ ping localhost >& /win2k/c/foo.log & <--
REDIRECT A 'SLOW' PROGRAM TO LOG
[1] 5778
[root@linux1] $ rsh linux2 cat /win2k/c/foo.log <-- REMOTE LINUX
CAN'T READ FILE
cat: /win2k/c/foo.log: Text file busy
[root@linux1] $ rsh win2k 'type c:\foo.log' <-- WIN2K
SERVER CAN'T READ FILE
The process cannot access the file because it is being used by another process.
[root@linux1] $ kill %% <-- KILL THE
PROCESS, CLOSING LOG
[1] + Terminated ping localhost >& /win2k/c/foo.log
[root@linux1] $ ls -la /win2k/c/foo.log <-- VERIFY LOG FILE
NOW EXISTS
-rwxrwxr-x 1 foo foo 14534 Oct 5 23:26 /win2k/c/foo.log
[root@linux1] $ ping localhost >& /win2k/c/foo.log & <-- RUN
*SAME* COMMAND AGAIN
[1] 6397 <-- (Only
difference: file exists)
[root@linux1] $ rsh linux2 cat /win2k/c/foo.log <-- REMOTE LINUX
READS OK
PING localhost.erco.x (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.erco.x (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from localhost.erco.x (127.0.0.1): icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from localhost.erco.x (127.0.0.1): icmp_seq=3 ttl=64 time=0.035 ms
[..]
[root@linux1] $ rsh win2k 'type c:\foo.log' <-- WIN2K
SERVER READS OK
PING localhost.erco.x (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.erco.x (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from localhost.erco.x (127.0.0.1): icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from localhost.erco.x (127.0.0.1): icmp_seq=3 ttl=64 time=0.035 ms
[..]
------------------------------------------------------------------------- snip
Apparently Analagous Threads
- Re: ocfs2 and configfs.ko..fixed...but gnuparted has issues....fixed gnuparted...but mount -t ocfs2 fails...
- Re: ocfs2 and configfs.ko..fixed...but gnuparted has issues....fixed gnuparted...but mount -t ocfs2 fails...
- Two Linux PC
- [LLVMdev] buildbot failure in LLVM on llvm-ppc64-linux1
- Re: ocfs2 and configfs.ko..fixed...but gnuparted has issues....
