1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-05 20:58:40 +03:00

s3:smb2_server: optimize smbd_smb2_request_setup_out()

We can use a preallocated buffer for the possible error
response of the first response in the compound chain.

This avoids a talloc_array_zero() call for the common case.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Stefan Metzmacher 2013-11-20 09:56:19 +01:00 committed by Jeremy Allison
parent 66877dfaa5
commit ec498a2414
2 changed files with 10 additions and 6 deletions

View File

@ -611,6 +611,8 @@ struct smbd_smb2_request {
*/
struct iovec *vector;
int vector_count;
#define OUTVEC_ALLOC_SIZE (SMB2_HDR_BODY + 9)
uint8_t _hdr[OUTVEC_ALLOC_SIZE];
} out;
};

View File

@ -37,8 +37,6 @@ static void smbd_smb2_connection_handler(struct tevent_context *ev,
static NTSTATUS smbd_smb2_io_handler(struct smbd_server_connection *sconn,
uint16_t fde_flags);
#define OUTVEC_ALLOC_SIZE (SMB2_HDR_BODY + 9)
static const struct smbd_smb2_dispatch_table {
uint16_t opcode;
const char *name;
@ -948,10 +946,14 @@ static NTSTATUS smbd_smb2_request_setup_out(struct smbd_smb2_request *req)
next_command_ofs = SMB2_HDR_BODY + 9;
}
outhdr = talloc_zero_array(vector, uint8_t,
OUTVEC_ALLOC_SIZE);
if (outhdr == NULL) {
return NT_STATUS_NO_MEMORY;
if (idx == 1) {
outhdr = req->out._hdr;
} else {
outhdr = talloc_zero_array(vector, uint8_t,
OUTVEC_ALLOC_SIZE);
if (outhdr == NULL) {
return NT_STATUS_NO_MEMORY;
}
}
outbody = outhdr + SMB2_HDR_BODY;