diff options
author | Stefan Metzmacher <metze@samba.org> | 2013-12-04 12:32:36 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-03-05 13:59:20 -0800 |
commit | a6ce8001b4d022134e21cdf4c3180596a5a69101 (patch) | |
tree | 7c96d4a6be820ecd2bf1857a688380940bad0dd8 /source3/smbd/smb2_server.c | |
parent | 0ac924b2bb3c256f10cde358b95ea1d8a3833972 (diff) | |
download | samba-a6ce8001b4d022134e21cdf4c3180596a5a69101.tar.gz samba-a6ce8001b4d022134e21cdf4c3180596a5a69101.tar.xz samba-a6ce8001b4d022134e21cdf4c3180596a5a69101.zip |
s3:smb2_read: avoid 2 talloc* calls when using sendfile()
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/smbd/smb2_server.c')
-rw-r--r-- | source3/smbd/smb2_server.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c index dea3915d966..b805c1a3906 100644 --- a/source3/smbd/smb2_server.c +++ b/source3/smbd/smb2_server.c @@ -3035,9 +3035,13 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbd_server_connection *sconn) size += e->vector[i].iov_len; } - buf = talloc_array(e->mem_ctx, uint8_t, size); - if (buf == NULL) { - return NT_STATUS_NO_MEMORY; + if (size <= e->sendfile_header->length) { + buf = e->sendfile_header->data; + } else { + buf = talloc_array(e->mem_ctx, uint8_t, size); + if (buf == NULL) { + return NT_STATUS_NO_MEMORY; + } } size = 0; @@ -3054,6 +3058,10 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbd_server_connection *sconn) sconn->smb2.send_queue_len--; DLIST_REMOVE(sconn->smb2.send_queue, e); + /* + * This triggers the sendfile path via + * the destructor. + */ talloc_free(e->mem_ctx); continue; } |