More recvfile optimizations
Jeremy Allison
jra at samba.org
Thu Apr 10 15:24:42 MDT 2014
On Thu, Apr 10, 2014 at 11:05:14PM +0200, Stefan (metze) Metzmacher wrote:
>
> I don't have a fix.
>
> But we would need such check in is_smb2_recvfile_write(), correct?
Well, there are two ways of doing it.
First one is to add the :
smbd_smb2_request_check_session()
smbd_smb2_request_check_tcon()
calls into is_smb2_recvfile_write(), which is
the same way the SMB1 code does it.
The second possibility is to add:
if (req->smb1req != NULL && req->smb1req->unread_bytes > 0) {
/* We can't do recvfile on print and ipc shares. */
if (IS_IPC(req->tcon->compat) || IS_PRINT(req->tcon->compat)) {
// DO A BLOCKING READ OF
// req->smb1req->unread_bytes
// AND ADJUST the req->iovecs...
}
}
into the:
if (call->need_tcon) {
.. stuff..
ADD the ABOVE CODE HERE...
}
stanza in smbd_smb2_request_dispatch(). Which would
be more efficient as we've already looked up the
session and tcon and won't be doing so twice on
every write call.
Which do you think is best ?
Oh yeah, we also need to add:
if (state->hdr.nbt[0] != 0x00) {
/* Not a standard NBT packet. Ignore. */
return false;
}
at the top of is_smb2_recvfile_write() to make
sure we correctly ignore non-NBT packets (not
that we should get many of those, but it's
better to be correct...).
> So we decided to drop support for compilers without support dynamic arrays?
Yep. Some new Volker code already uses it :-).
Jeremy.
More information about the samba-technical
mailing list