[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Apr 29 17:51:10 MDT 2010


The branch, master has been updated
       via  ebf6340... Move the global blocking lock records into the smb1 state.
      from  f2ccff8... s4-smbtorture: fix rap_pull_rap_PrintQueue2 and 4.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ebf6340bb568f279fc8b94856e01de473bd08575
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Apr 29 16:50:15 2010 -0700

    Move the global blocking lock records into the smb1 state.
    
    Jeremy

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/onefs_cbrl.c |    8 +++---
 source3/smbd/blocking.c      |   51 ++++++++++++++++++++++++-----------------
 source3/smbd/globals.c       |   12 ----------
 source3/smbd/globals.h       |   24 ++++++++++----------
 4 files changed, 46 insertions(+), 49 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/onefs_cbrl.c b/source3/modules/onefs_cbrl.c
index f7cb26c..35dc4d2 100644
--- a/source3/modules/onefs_cbrl.c
+++ b/source3/modules/onefs_cbrl.c
@@ -28,8 +28,6 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_LOCKING
 
-extern struct blocking_lock_record *blocking_lock_queue;
-
 static uint64_t onefs_get_new_id(void) {
 	static uint64_t id = 0;
 
@@ -84,6 +82,7 @@ static char *onefs_cbrl_blr_state_str(const struct blocking_lock_record *blr)
 
 static void onefs_cbrl_enumerate_blq(const char *fn)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct blocking_lock_record *blr;
 
 	if (DEBUGLVL(10))
@@ -91,18 +90,19 @@ static void onefs_cbrl_enumerate_blq(const char *fn)
 
 	DEBUG(10, ("CBRL BLR records (%s):\n", fn));
 
-	for (blr = blocking_lock_queue; blr; blr = blr->next)
+	for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = blr->next)
 		DEBUGADD(10, ("%s\n", onefs_cbrl_blr_state_str(blr)));
 }
 
 static struct blocking_lock_record *onefs_cbrl_find_blr(uint64_t id)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct blocking_lock_record *blr;
 	struct onefs_cbrl_blr_state *bs;
 
 	onefs_cbrl_enumerate_blq("onefs_cbrl_find_blr");
 
-	for (blr = blocking_lock_queue; blr; blr = blr->next) {
+	for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = blr->next) {
 		bs = (struct onefs_cbrl_blr_state *)blr->blr_private;
 
 		/* We don't control all of the BLRs on the BLQ. */
diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c
index d876c8b..f399e6b 100644
--- a/source3/smbd/blocking.c
+++ b/source3/smbd/blocking.c
@@ -38,8 +38,9 @@ static void brl_timeout_fn(struct event_context *event_ctx,
 			   struct timeval now,
 			   void *private_data)
 {
-	SMB_ASSERT(brl_timeout == te);
-	TALLOC_FREE(brl_timeout);
+	struct smbd_server_connection *sconn = smbd_server_conn;
+	SMB_ASSERT(sconn->smb1.locks.brl_timeout == te);
+	TALLOC_FREE(sconn->smb1.locks.brl_timeout);
 
 	change_to_root_user();	/* TODO: Possibly run all timed events as
 				 * root */
@@ -70,15 +71,16 @@ static struct timeval timeval_brl_min(const struct timeval *tv1,
 
 static bool recalc_brl_timeout(void)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct blocking_lock_record *blr;
 	struct timeval next_timeout;
 	int max_brl_timeout = lp_parm_int(-1, "brl", "recalctime", 5);
 
-	TALLOC_FREE(brl_timeout);
+	TALLOC_FREE(sconn->smb1.locks.brl_timeout);
 
 	next_timeout = timeval_zero();
 
-	for (blr = blocking_lock_queue; blr; blr = blr->next) {
+	for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = blr->next) {
 		if (timeval_is_zero(&blr->expire_time)) {
 			/*
 			 * If we're blocked on pid 0xFFFFFFFF this is
@@ -129,7 +131,7 @@ static bool recalc_brl_timeout(void)
 		    (int)from_now.tv_sec, (int)from_now.tv_usec));
 	}
 
-	if (!(brl_timeout = event_add_timed(smbd_event_context(), NULL,
+	if (!(sconn->smb1.locks.brl_timeout = event_add_timed(smbd_event_context(), NULL,
 					    next_timeout,
 					    brl_timeout_fn, NULL))) {
 		return False;
@@ -155,6 +157,7 @@ bool push_blocking_lock_request( struct byte_range_lock *br_lck,
 		uint64_t count,
 		uint32_t blocking_pid)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct blocking_lock_record *blr;
 	NTSTATUS status;
 
@@ -232,14 +235,14 @@ bool push_blocking_lock_request( struct byte_range_lock *br_lck,
 	SMB_PERFCOUNT_DEFER_OP(&req->pcd, &req->pcd);
 	blr->req = talloc_move(blr, &req);
 
-	DLIST_ADD_END(blocking_lock_queue, blr, struct blocking_lock_record *);
+	DLIST_ADD_END(sconn->smb1.locks.blocking_lock_queue, blr, struct blocking_lock_record *);
 	recalc_brl_timeout();
 
 	/* Ensure we'll receive messages when this is unlocked. */
-	if (!blocking_lock_unlock_state) {
+	if (!sconn->smb1.locks.blocking_lock_unlock_state) {
 		messaging_register(smbd_messaging_context(), NULL,
 				   MSG_SMB_UNLOCK, received_unlock_msg);
-		blocking_lock_unlock_state = true;
+		sconn->smb1.locks.blocking_lock_unlock_state = true;
 	}
 
 	DEBUG(3,("push_blocking_lock_request: lock request blocked with "
@@ -562,9 +565,10 @@ static bool blocking_lock_record_process(struct blocking_lock_record *blr)
 
 void cancel_pending_lock_requests_by_fid(files_struct *fsp, struct byte_range_lock *br_lck)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct blocking_lock_record *blr, *blr_cancelled, *next = NULL;
 
-	for(blr = blocking_lock_queue; blr; blr = next) {
+	for(blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
 		unsigned char locktype = 0;
 
 		next = blr->next;
@@ -610,9 +614,10 @@ void cancel_pending_lock_requests_by_fid(files_struct *fsp, struct byte_range_lo
 
 void remove_pending_lock_requests_by_mid(uint64_t mid)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct blocking_lock_record *blr, *next = NULL;
 
-	for(blr = blocking_lock_queue; blr; blr = next) {
+	for(blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
 		files_struct *fsp;
 		struct byte_range_lock *br_lck;
 
@@ -642,7 +647,7 @@ void remove_pending_lock_requests_by_mid(uint64_t mid)
 		}
 
 		blocking_lock_reply_error(blr,NT_STATUS_FILE_LOCK_CONFLICT);
-		DLIST_REMOVE(blocking_lock_queue, blr);
+		DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
 		TALLOC_FREE(blr);
 	}
 }
@@ -653,9 +658,10 @@ void remove_pending_lock_requests_by_mid(uint64_t mid)
 
 bool blocking_lock_was_deferred(uint64_t mid)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct blocking_lock_record *blr, *next = NULL;
 
-	for(blr = blocking_lock_queue; blr; blr = next) {
+	for(blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
 		next = blr->next;
 		if(blr->req->mid == mid) {
 			return True;
@@ -684,6 +690,7 @@ static void received_unlock_msg(struct messaging_context *msg,
 
 void process_blocking_lock_queue(void)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	struct timeval tv_curr = timeval_current();
 	struct blocking_lock_record *blr, *next = NULL;
 
@@ -691,7 +698,7 @@ void process_blocking_lock_queue(void)
 	 * Go through the queue and see if we can get any of the locks.
 	 */
 
-	for (blr = blocking_lock_queue; blr; blr = next) {
+	for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = next) {
 
 		next = blr->next;
 
@@ -729,7 +736,7 @@ void process_blocking_lock_queue(void)
 				TALLOC_FREE(br_lck);
 			}
 
-			DLIST_REMOVE(blocking_lock_queue, blr);
+			DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
 			TALLOC_FREE(blr);
 			continue;
 		}
@@ -767,7 +774,7 @@ void process_blocking_lock_queue(void)
 			}
 
 			blocking_lock_reply_error(blr,NT_STATUS_FILE_LOCK_CONFLICT);
-			DLIST_REMOVE(blocking_lock_queue, blr);
+			DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
 			TALLOC_FREE(blr);
 		}
 	}
@@ -787,6 +794,7 @@ static void process_blocking_lock_cancel_message(struct messaging_context *ctx,
 						 struct server_id server_id,
 						 DATA_BLOB *data)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	NTSTATUS err;
 	const char *msg = (const char *)data->data;
 	struct blocking_lock_record *blr;
@@ -808,7 +816,7 @@ static void process_blocking_lock_cancel_message(struct messaging_context *ctx,
 		nt_errstr(err) ));
 
 	blocking_lock_reply_error(blr, err);
-	DLIST_REMOVE(blocking_lock_cancelled_queue, blr);
+	DLIST_REMOVE(sconn->smb1.locks.blocking_lock_cancelled_queue, blr);
 	TALLOC_FREE(blr);
 }
 
@@ -825,19 +833,20 @@ struct blocking_lock_record *blocking_lock_cancel(files_struct *fsp,
 			unsigned char locktype,
                         NTSTATUS err)
 {
+	struct smbd_server_connection *sconn = smbd_server_conn;
 	char msg[MSG_BLOCKING_LOCK_CANCEL_SIZE];
 	struct blocking_lock_record *blr;
 
-	if (!blocking_lock_cancel_state) {
+	if (!sconn->smb1.locks.blocking_lock_cancel_state) {
 		/* Register our message. */
 		messaging_register(smbd_messaging_context(), NULL,
 				   MSG_SMB_BLOCKING_LOCK_CANCEL,
 				   process_blocking_lock_cancel_message);
 
-		blocking_lock_cancel_state = True;
+		sconn->smb1.locks.blocking_lock_cancel_state = True;
 	}
 
-	for (blr = blocking_lock_queue; blr; blr = blr->next) {
+	for (blr = sconn->smb1.locks.blocking_lock_queue; blr; blr = blr->next) {
 		if (fsp == blr->fsp &&
 				lock_pid == blr->lock_pid &&
 				offset == blr->offset &&
@@ -859,8 +868,8 @@ struct blocking_lock_record *blocking_lock_cancel(files_struct *fsp,
 	}
 
 	/* Move to cancelled queue. */
-	DLIST_REMOVE(blocking_lock_queue, blr);
-	DLIST_ADD(blocking_lock_cancelled_queue, blr);
+	DLIST_REMOVE(sconn->smb1.locks.blocking_lock_queue, blr);
+	DLIST_ADD(sconn->smb1.locks.blocking_lock_cancelled_queue, blr);
 
 	/* Create the message. */
 	memcpy(msg, &blr, sizeof(blr));
diff --git a/source3/smbd/globals.c b/source3/smbd/globals.c
index 0284171..38ba1a4 100644
--- a/source3/smbd/globals.c
+++ b/source3/smbd/globals.c
@@ -27,18 +27,6 @@ int aio_pending_size = 0;
 int outstanding_aio_calls = 0;
 #endif
 
-/* dlink list we store pending lock records on. */
-struct blocking_lock_record *blocking_lock_queue = NULL;
-
-/* dlink list we move cancelled lock records onto. */
-struct blocking_lock_record *blocking_lock_cancelled_queue = NULL;
-
-/* The event that makes us process our blocking lock queue */
-struct timed_event *brl_timeout = NULL;
-
-bool blocking_lock_unlock_state = false;
-bool blocking_lock_cancel_state = false;
-
 #ifdef USE_DMAPI
 struct smbd_dmapi_context *dmapi_ctx = NULL;
 #endif
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index 6f3b51b..614d8fc 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -26,18 +26,6 @@ extern int aio_pending_size;
 extern int outstanding_aio_calls;
 #endif
 
-/* dlink list we store pending lock records on. */
-extern struct blocking_lock_record *blocking_lock_queue;
-
-/* dlink list we move cancelled lock records onto. */
-extern struct blocking_lock_record *blocking_lock_cancelled_queue;
-
-/* The event that makes us process our blocking lock queue */
-extern struct timed_event *brl_timeout;
-
-extern bool blocking_lock_unlock_state;
-extern bool blocking_lock_cancel_state;
-
 #ifdef USE_DMAPI
 struct smbd_dmapi_context;
 extern struct smbd_dmapi_context *dmapi_ctx;
@@ -551,6 +539,18 @@ struct smbd_server_connection {
 			struct dptr_struct *dirptrs;
 			int dirhandles_open;
 		} searches;
+		struct {
+			/* dlink list we store pending lock records on. */
+			struct blocking_lock_record *blocking_lock_queue;
+			/* dlink list we move cancelled lock records onto. */
+			struct blocking_lock_record *blocking_lock_cancelled_queue;
+
+			/* The event that makes us process our blocking lock queue */
+			struct timed_event *brl_timeout;
+
+			bool blocking_lock_unlock_state;
+			bool blocking_lock_cancel_state;
+		} locks;
 	} smb1;
 	struct {
 		struct tevent_context *event_ctx;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list