Bug in reply_write_and_X?
Conrad Minshall
conrad at apple.com
Sat Dec 7 09:43:00 GMT 2002
I'm testing my smb client against Samba on FreeBSD. The server's
local filesystem has a maximum filesize of 16 Terabytes. If my
client attempts a writex with an offset of exactly 16TB then I see
ERRnoaccess rather than ERRdiskfull. Looking at some 3.0 sources, it
appears reply_write_and_X() assumes that if write_file() returns zero
(nwritten) then an access error is presumed and reported. But if the
offset is 16TB minus 1 then one byte is written and ERRdiskfull comes
back.
For now I put this comment (below) in my client. Hopefully I'm
overlooking something obvious. Anyone have other ideas for a
workaround (detecting when ERRdiskfull should have been returned)?
* There is a case for which server(s) return
* ERRnoaccess but should return ERRdiskfull: When
* the offset for a write is exactly the server
* file size limit then Samba (at least) thinks
* the reason for zero bytes having been written
* must have been "access denied" from the local
* filesystem. This cannot be easily worked
* around since the server behaviour is
* indistinguishable from actual access denied.
* An incomplete workaround: attempt a 2 byte write
* from "offset-1". (That may require reading at
* offset-1 first.) The flaw is that reading or
* writing at offset-1 could cause an
* unrelated error (due to a byte range lock
* for instance) and we can't presume the
* order servers check errors in.
More information about the samba-technical
mailing list