summaryrefslogtreecommitdiffstats
path: root/source3
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2014-06-10 13:24:50 +0200
committerMichael Adam <obnox@samba.org>2014-08-06 09:51:11 +0200
commit92e96bedfb29101c1b0df6aed174b5ecf2b6001d (patch)
treed188e6fe5565fe50f556f574d95a2d1db92618b8 /source3
parent36e34842606b312a0ca338667797b6c00df50de7 (diff)
s3:smb2_server: move sconn->smb2.requests to xconn->smb2.requests
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.h3
-rw-r--r--source3/smbd/smb2_create.c3
-rw-r--r--source3/smbd/smb2_glue.c3
-rw-r--r--source3/smbd/smb2_lock.c9
-rw-r--r--source3/smbd/smb2_server.c10
-rw-r--r--source3/smbd/smb2_sesssetup.c7
-rw-r--r--source3/smbd/smb2_tcon.c3
7 files changed, 25 insertions, 13 deletions
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index a32f7b41ba..4e275eb940 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -497,6 +497,8 @@ struct smbXsrv_connection {
uint32_t max_read;
uint32_t max_write;
} server;
+
+ struct smbd_smb2_request *requests;
} smb2;
uint64_t smbd_idle_profstamp;
@@ -841,7 +843,6 @@ struct smbd_server_connection {
struct tevent_timer *brl_timeout;
bool blocking_lock_unlock_state;
} locks;
- struct smbd_smb2_request *requests;
} smb2;
/*
diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
index d22df4da34..0c27a01058 100644
--- a/source3/smbd/smb2_create.c
+++ b/source3/smbd/smb2_create.c
@@ -1213,9 +1213,10 @@ bool get_deferred_open_message_state_smb2(struct smbd_smb2_request *smb2req,
static struct smbd_smb2_request *find_open_smb2req(
struct smbd_server_connection *sconn, uint64_t mid)
{
+ struct smbXsrv_connection *xconn = sconn->conn;
struct smbd_smb2_request *smb2req;
- for (smb2req = sconn->smb2.requests; smb2req; smb2req = smb2req->next) {
+ for (smb2req = xconn->smb2.requests; smb2req; smb2req = smb2req->next) {
uint64_t message_id;
if (smb2req->subreq == NULL) {
/* This message has been processed. */
diff --git a/source3/smbd/smb2_glue.c b/source3/smbd/smb2_glue.c
index 54135b5585..69ff7bba6a 100644
--- a/source3/smbd/smb2_glue.c
+++ b/source3/smbd/smb2_glue.c
@@ -77,9 +77,10 @@ size_t smbd_smb2_unread_bytes(struct smbd_smb2_request *req)
void remove_smb2_chained_fsp(files_struct *fsp)
{
struct smbd_server_connection *sconn = fsp->conn->sconn;
+ struct smbXsrv_connection *xconn = sconn->conn;
struct smbd_smb2_request *smb2req;
- for (smb2req = sconn->smb2.requests; smb2req; smb2req = smb2req->next) {
+ for (smb2req = xconn->smb2.requests; smb2req; smb2req = smb2req->next) {
if (smb2req->compat_chain_fsp == fsp) {
smb2req->compat_chain_fsp = NULL;
}
diff --git a/source3/smbd/smb2_lock.c b/source3/smbd/smb2_lock.c
index 4c5b61ee2c..8e1eb40dca 100644
--- a/source3/smbd/smb2_lock.c
+++ b/source3/smbd/smb2_lock.c
@@ -468,13 +468,14 @@ struct blocking_lock_record *get_pending_smb2req_blr(struct smbd_smb2_request *s
static bool recalc_smb2_brl_timeout(struct smbd_server_connection *sconn)
{
+ struct smbXsrv_connection *xconn = sconn->conn;
struct smbd_smb2_request *smb2req;
struct timeval next_timeout = timeval_zero();
int max_brl_timeout = lp_parm_int(-1, "brl", "recalctime", 5);
TALLOC_FREE(sconn->smb2.locks.brl_timeout);
- for (smb2req = sconn->smb2.requests; smb2req; smb2req = smb2req->next) {
+ for (smb2req = xconn->smb2.requests; smb2req; smb2req = smb2req->next) {
struct blocking_lock_record *blr =
get_pending_smb2req_blr(smb2req);
if (!blr) {
@@ -774,9 +775,10 @@ static void reprocess_blocked_smb2_lock(struct smbd_smb2_request *smb2req,
void process_blocking_lock_queue_smb2(
struct smbd_server_connection *sconn, struct timeval tv_curr)
{
+ struct smbXsrv_connection *xconn = sconn->conn;
struct smbd_smb2_request *smb2req, *nextreq;
- for (smb2req = sconn->smb2.requests; smb2req; smb2req = nextreq) {
+ for (smb2req = xconn->smb2.requests; smb2req; smb2req = nextreq) {
const uint8_t *inhdr;
nextreq = smb2req->next;
@@ -808,9 +810,10 @@ void cancel_pending_lock_requests_by_fid_smb2(files_struct *fsp,
enum file_close_type close_type)
{
struct smbd_server_connection *sconn = fsp->conn->sconn;
+ struct smbXsrv_connection *xconn = sconn->conn;
struct smbd_smb2_request *smb2req, *nextreq;
- for (smb2req = sconn->smb2.requests; smb2req; smb2req = nextreq) {
+ for (smb2req = xconn->smb2.requests; smb2req; smb2req = nextreq) {
struct smbd_smb2_lock_state *state = NULL;
files_struct *fsp_curr = NULL;
struct blocking_lock_record *blr = NULL;
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index b48d1819ba..b963b949b0 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -938,6 +938,7 @@ DATA_BLOB smbd_smb2_generate_outbody(struct smbd_smb2_request *req, size_t size)
static NTSTATUS smbd_smb2_request_setup_out(struct smbd_smb2_request *req)
{
+ struct smbXsrv_connection *xconn = req->sconn->conn;
TALLOC_CTX *mem_ctx;
struct iovec *vector;
int count;
@@ -1035,7 +1036,7 @@ static NTSTATUS smbd_smb2_request_setup_out(struct smbd_smb2_request *req)
/* setup the length of the NBT packet */
smb2_setup_nbt_length(req->out.vector, req->out.vector_count);
- DLIST_ADD_END(req->sconn->smb2.requests, req, struct smbd_smb2_request *);
+ DLIST_ADD_END(xconn->smb2.requests, req, struct smbd_smb2_request *);
return NT_STATUS_OK;
}
@@ -1613,6 +1614,7 @@ static void smbd_smb2_request_pending_timer(struct tevent_context *ev,
static NTSTATUS smbd_smb2_request_process_cancel(struct smbd_smb2_request *req)
{
struct smbd_server_connection *sconn = req->sconn;
+ struct smbXsrv_connection *xconn = sconn->conn;
struct smbd_smb2_request *cur;
const uint8_t *inhdr;
uint32_t flags;
@@ -1630,10 +1632,10 @@ static NTSTATUS smbd_smb2_request_process_cancel(struct smbd_smb2_request *req)
* we don't need the request anymore
* cancel requests never have a response
*/
- DLIST_REMOVE(req->sconn->smb2.requests, req);
+ DLIST_REMOVE(xconn->smb2.requests, req);
TALLOC_FREE(req);
- for (cur = sconn->smb2.requests; cur; cur = cur->next) {
+ for (cur = xconn->smb2.requests; cur; cur = cur->next) {
const uint8_t *outhdr;
uint64_t message_id;
uint64_t async_id;
@@ -2511,7 +2513,7 @@ static NTSTATUS smbd_smb2_request_reply(struct smbd_smb2_request *req)
* We're done with this request -
* move it off the "being processed" queue.
*/
- DLIST_REMOVE(req->sconn->smb2.requests, req);
+ DLIST_REMOVE(conn->smb2.requests, req);
req->queue_entry.mem_ctx = req;
req->queue_entry.vector = req->out.vector;
diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c
index 391b1003fa..d4f0d793a5 100644
--- a/source3/smbd/smb2_sesssetup.c
+++ b/source3/smbd/smb2_sesssetup.c
@@ -457,6 +457,7 @@ static int pp_self_ref_destructor(struct smbd_smb2_session_setup_state **pp_stat
static int smbd_smb2_session_setup_state_destructor(struct smbd_smb2_session_setup_state *state)
{
+ struct smbXsrv_connection *xconn;
struct smbd_smb2_request *preq;
/*
@@ -478,8 +479,9 @@ static int smbd_smb2_session_setup_state_destructor(struct smbd_smb2_session_set
* Ensure that any outstanding requests don't also refer
* to it.
*/
+ xconn = state->smb2req->sconn->conn;
- for (preq = state->smb2req->sconn->smb2.requests; preq != NULL; preq = preq->next) {
+ for (preq = xconn->smb2.requests; preq != NULL; preq = preq->next) {
if (preq == state->smb2req) {
continue;
}
@@ -875,6 +877,7 @@ static struct tevent_req *smbd_smb2_logoff_send(TALLOC_CTX *mem_ctx,
struct smbd_smb2_logout_state *state;
struct tevent_req *subreq;
struct smbd_smb2_request *preq;
+ struct smbXsrv_connection *xconn = smb2req->sconn->conn;
req = tevent_req_create(mem_ctx, &state,
struct smbd_smb2_logout_state);
@@ -893,7 +896,7 @@ static struct tevent_req *smbd_smb2_logoff_send(TALLOC_CTX *mem_ctx,
*/
smb2req->session->status = NT_STATUS_USER_SESSION_DELETED;
- for (preq = smb2req->sconn->smb2.requests; preq != NULL; preq = preq->next) {
+ for (preq = xconn->smb2.requests; preq != NULL; preq = preq->next) {
if (preq == smb2req) {
/* Can't cancel current request. */
continue;
diff --git a/source3/smbd/smb2_tcon.c b/source3/smbd/smb2_tcon.c
index 93f62fdcb1..6289427bf9 100644
--- a/source3/smbd/smb2_tcon.c
+++ b/source3/smbd/smb2_tcon.c
@@ -498,6 +498,7 @@ static struct tevent_req *smbd_smb2_tdis_send(TALLOC_CTX *mem_ctx,
struct smbd_smb2_tdis_state *state;
struct tevent_req *subreq;
struct smbd_smb2_request *preq;
+ struct smbXsrv_connection *xconn = smb2req->sconn->conn;
req = tevent_req_create(mem_ctx, &state,
struct smbd_smb2_tdis_state);
@@ -516,7 +517,7 @@ static struct tevent_req *smbd_smb2_tdis_send(TALLOC_CTX *mem_ctx,
*/
smb2req->tcon->status = NT_STATUS_NETWORK_NAME_DELETED;
- for (preq = smb2req->sconn->smb2.requests; preq != NULL; preq = preq->next) {
+ for (preq = xconn->smb2.requests; preq != NULL; preq = preq->next) {
if (preq == smb2req) {
/* Can't cancel current request. */
continue;