summaryrefslogtreecommitdiffstats
path: root/source3
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-05-23 09:53:21 +0200
committerMichael Adam <obnox@samba.org>2014-08-06 09:51:11 +0200
commite644406bcd2e4e6b8fe65b9ee2f6c85aec020ce4 (patch)
treeb6f19def28cbc59431379ff70fa9afcd9f1ecd4a /source3
parentf9ef2a58509672265a67f44515178c4a4a21e59b (diff)
downloadsamba-e644406bcd2e4e6b8fe65b9ee2f6c85aec020ce4.tar.gz
samba-e644406bcd2e4e6b8fe65b9ee2f6c85aec020ce4.tar.xz
samba-e644406bcd2e4e6b8fe65b9ee2f6c85aec020ce4.zip
s3:smb2_server: move sconn->smb2.send_queue* to xconn->smb2.send_queue*
This prepares the structures for multi-channel support. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'source3')
-rw-r--r--source3/smbd/globals.h4
-rw-r--r--source3/smbd/smb2_server.c41
2 files changed, 21 insertions, 24 deletions
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index 9d32a7e085..fb27649880 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -431,6 +431,8 @@ struct smbXsrv_connection {
size_t pktlen;
uint8_t *pktbuf;
} request_read_state;
+ struct smbd_smb2_send_queue *send_queue;
+ size_t send_queue_len;
struct {
uint32_t capabilities;
@@ -787,8 +789,6 @@ struct smbd_server_connection {
} locks;
} smb1;
struct {
- struct smbd_smb2_send_queue *send_queue;
- size_t send_queue_len;
bool negprot_2ff;
struct {
/* The event that makes us process our blocking lock queue */
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 3b0b10a75d..ba0091103b 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -204,8 +204,6 @@ static NTSTATUS smbd_initialize_smb2(struct smbd_server_connection *sconn)
TALLOC_FREE(xconn->transport.fde);
- sconn->smb2.send_queue = NULL;
-
sconn->smb2.seqnum_low = 0;
sconn->smb2.seqnum_range = 1;
sconn->smb2.credits_granted = 1;
@@ -1263,8 +1261,8 @@ static NTSTATUS smb2_send_async_interim_response(const struct smbd_smb2_request
nreq->queue_entry.mem_ctx = nreq;
nreq->queue_entry.vector = nreq->out.vector;
nreq->queue_entry.count = nreq->out.vector_count;
- DLIST_ADD_END(nreq->sconn->smb2.send_queue, &nreq->queue_entry, NULL);
- nreq->sconn->smb2.send_queue_len++;
+ DLIST_ADD_END(conn->smb2.send_queue, &nreq->queue_entry, NULL);
+ conn->smb2.send_queue_len++;
status = smbd_smb2_flush_send_queue(sconn);
if (!NT_STATUS_IS_OK(status)) {
@@ -1424,6 +1422,7 @@ static void smbd_smb2_request_pending_timer(struct tevent_context *ev,
talloc_get_type_abort(private_data,
struct smbd_smb2_request);
struct smbd_server_connection *sconn = req->sconn;
+ struct smbXsrv_connection *xconn = sconn->conn;
struct smbd_smb2_request_pending_state *state = NULL;
uint8_t *outhdr = NULL;
const uint8_t *inhdr = NULL;
@@ -1565,11 +1564,10 @@ static void smbd_smb2_request_pending_timer(struct tevent_context *ev,
if (req->do_encryption) {
struct smbXsrv_session *x = req->session;
- struct smbXsrv_connection *conn = x->connection;
DATA_BLOB encryption_key = x->global->encryption_key;
status = smb2_signing_encrypt_pdu(encryption_key,
- conn->protocol,
+ xconn->protocol,
&state->vector[1+SMBD_SMB2_TF_IOV_OFS],
SMBD_SMB2_NUM_IOV_PER_REQ);
if (!NT_STATUS_IS_OK(status)) {
@@ -1579,11 +1577,10 @@ static void smbd_smb2_request_pending_timer(struct tevent_context *ev,
}
} else if (req->do_signing) {
struct smbXsrv_session *x = req->session;
- struct smbXsrv_connection *conn = x->connection;
DATA_BLOB signing_key = x->global->channels[0].signing_key;
status = smb2_signing_sign_pdu(signing_key,
- conn->protocol,
+ xconn->protocol,
&state->vector[1+SMBD_SMB2_HDR_IOV_OFS],
SMBD_SMB2_NUM_IOV_PER_REQ - 1);
if (!NT_STATUS_IS_OK(status)) {
@@ -1596,8 +1593,8 @@ static void smbd_smb2_request_pending_timer(struct tevent_context *ev,
state->queue_entry.mem_ctx = state;
state->queue_entry.vector = state->vector;
state->queue_entry.count = ARRAY_SIZE(state->vector);
- DLIST_ADD_END(sconn->smb2.send_queue, &state->queue_entry, NULL);
- sconn->smb2.send_queue_len++;
+ DLIST_ADD_END(xconn->smb2.send_queue, &state->queue_entry, NULL);
+ xconn->smb2.send_queue_len++;
status = smbd_smb2_flush_send_queue(sconn);
if (!NT_STATUS_IS_OK(status)) {
@@ -2512,8 +2509,8 @@ static NTSTATUS smbd_smb2_request_reply(struct smbd_smb2_request *req)
req->queue_entry.mem_ctx = req;
req->queue_entry.vector = req->out.vector;
req->queue_entry.count = req->out.vector_count;
- DLIST_ADD_END(req->sconn->smb2.send_queue, &req->queue_entry, NULL);
- req->sconn->smb2.send_queue_len++;
+ DLIST_ADD_END(conn->smb2.send_queue, &req->queue_entry, NULL);
+ conn->smb2.send_queue_len++;
status = smbd_smb2_flush_send_queue(sconn);
if (!NT_STATUS_IS_OK(status)) {
@@ -2841,8 +2838,8 @@ static NTSTATUS smbd_smb2_send_break(struct smbd_server_connection *sconn,
state->queue_entry.mem_ctx = state;
state->queue_entry.vector = state->vector;
state->queue_entry.count = ARRAY_SIZE(state->vector);
- DLIST_ADD_END(state->sconn->smb2.send_queue, &state->queue_entry, NULL);
- state->sconn->smb2.send_queue_len++;
+ DLIST_ADD_END(conn->smb2.send_queue, &state->queue_entry, NULL);
+ conn->smb2.send_queue_len++;
status = smbd_smb2_flush_send_queue(sconn);
if (!NT_STATUS_IS_OK(status)) {
@@ -2974,7 +2971,7 @@ static NTSTATUS smbd_smb2_request_next_incoming(struct smbd_server_connection *s
}
max_send_queue_len = MAX(1, sconn->smb2.max_credits/16);
- cur_send_queue_len = sconn->smb2.send_queue_len;
+ cur_send_queue_len = xconn->smb2.send_queue_len;
if (cur_send_queue_len > max_send_queue_len) {
/*
@@ -3105,13 +3102,13 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbd_server_connection *sconn)
int err;
bool retry;
- if (sconn->smb2.send_queue == NULL) {
+ if (xconn->smb2.send_queue == NULL) {
TEVENT_FD_NOT_WRITEABLE(xconn->transport.fde);
return NT_STATUS_OK;
}
- while (sconn->smb2.send_queue != NULL) {
- struct smbd_smb2_send_queue *e = sconn->smb2.send_queue;
+ while (xconn->smb2.send_queue != NULL) {
+ struct smbd_smb2_send_queue *e = xconn->smb2.send_queue;
if (e->sendfile_header != NULL) {
size_t size = 0;
@@ -3143,8 +3140,8 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbd_server_connection *sconn)
e->sendfile_header->length = size;
e->count = 0;
- sconn->smb2.send_queue_len--;
- DLIST_REMOVE(sconn->smb2.send_queue, e);
+ xconn->smb2.send_queue_len--;
+ DLIST_REMOVE(xconn->smb2.send_queue, e);
/*
* This triggers the sendfile path via
* the destructor.
@@ -3200,8 +3197,8 @@ static NTSTATUS smbd_smb2_flush_send_queue(struct smbd_server_connection *sconn)
return NT_STATUS_OK;
}
- sconn->smb2.send_queue_len--;
- DLIST_REMOVE(sconn->smb2.send_queue, e);
+ xconn->smb2.send_queue_len--;
+ DLIST_REMOVE(xconn->smb2.send_queue, e);
talloc_free(e->mem_ctx);
}