[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Thu Mar 25 09:41:11 MDT 2010
The branch, master has been updated
via 5a88e43... s3: Make sure our CLEAR_IF_FIRST optimization works for serverid.tdb
via ed18945... s3: Make sure our CLEAR_IF_FIRST optimization works for the notify tdbs
via 4cdbe07... s3: Make sure our CLEAR_IF_FIRST optimization works for messaging.tdb
via f20bdd3... s3: Fix some nonempty blank lines
from 9a5d50b... s3-selftest: enable RAP-RPC test against s3.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 5a88e43c693f9e0c5dd93e4fd238364262643b5a
Author: Volker Lendecke <vl at samba.org>
Date: Thu Mar 25 16:02:54 2010 +0100
s3: Make sure our CLEAR_IF_FIRST optimization works for serverid.tdb
In the child, we fully re-open serverid.tdb, which leads to one fcntl lock for
CLEAR_IF_FIRST detection per smbd. This opens the tdb in the parent and holds
it, so that tdb_reopen_all correctly catches the CLEAR_IF_FIRST bit.
commit ed189459b9d7776700ffd353f81b283232940199
Author: Volker Lendecke <vl at samba.org>
Date: Thu Mar 25 16:01:54 2010 +0100
s3: Make sure our CLEAR_IF_FIRST optimization works for the notify tdbs
The notify tdb files are opened at tconX time, which leads to one fcntl lock
for CLEAR_IF_FIRST detection per smbd. This opens the tdbs in the parent and
holds it, so that tdb_reopen_all correctly catches the CLEAR_IF_FIRST bit.
commit 4cdbe07b2563b56c2d8b9a5733eedf25245ba86b
Author: Volker Lendecke <vl at samba.org>
Date: Thu Mar 25 15:59:41 2010 +0100
s3: Make sure our CLEAR_IF_FIRST optimization works for messaging.tdb
In the child, we fully re-open messaging.tdb, which leads to one fcntl lock for
CLEAR_IF_FIRST detection per smbd. This opens the tdb in the parent and holds
it, so that tdb_reopen_all correctly catches the CLEAR_IF_FIRST bit.
commit f20bdd32ddabf79800c876fa94b65b928bea3c30
Author: Volker Lendecke <vl at samba.org>
Date: Thu Mar 25 15:43:47 2010 +0100
s3: Fix some nonempty blank lines
-----------------------------------------------------------------------
Summary of changes:
source3/include/messages.h | 2 ++
source3/include/proto.h | 1 +
source3/include/serverid.h | 5 +++++
source3/lib/messages_local.c | 28 ++++++++++++++++++++++------
source3/lib/serverid.c | 16 ++++++++++++++++
source3/smbd/notify_internal.c | 27 +++++++++++++++++++++++++++
source3/smbd/server.c | 12 ++++++++++++
7 files changed, 85 insertions(+), 6 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/messages.h b/source3/include/messages.h
index 6063d35..865ffd4 100644
--- a/source3/include/messages.h
+++ b/source3/include/messages.h
@@ -111,6 +111,8 @@ NTSTATUS messaging_tdb_init(struct messaging_context *msg_ctx,
TALLOC_CTX *mem_ctx,
struct messaging_backend **presult);
+bool messaging_tdb_parent_init(void);
+
NTSTATUS messaging_ctdbd_init(struct messaging_context *msg_ctx,
TALLOC_CTX *mem_ctx,
struct messaging_backend **presult);
diff --git a/source3/include/proto.h b/source3/include/proto.h
index e8f9985..dca58cc 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6545,6 +6545,7 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx, struct server_id server,
struct messaging_context *messaging_ctx,
struct event_context *ev,
connection_struct *conn);
+bool notify_internal_parent_init(void);
NTSTATUS notify_add(struct notify_context *notify, struct notify_entry *e0,
void (*callback)(void *, const struct notify_event *),
void *private_data);
diff --git a/source3/include/serverid.h b/source3/include/serverid.h
index 9ef778c..e60fc47 100644
--- a/source3/include/serverid.h
+++ b/source3/include/serverid.h
@@ -63,4 +63,9 @@ bool serverid_traverse_read(int (*fn)(const struct server_id *id,
uint32_t msg_flags,
void *private_data),
void *private_data);
+/*
+ * Ensure CLEAR_IF_FIRST works fine, to be called from the parent smbd
+ */
+bool serverid_parent_init(void);
+
#endif
diff --git a/source3/lib/messages_local.c b/source3/lib/messages_local.c
index 0da0546..b171282 100644
--- a/source3/lib/messages_local.c
+++ b/source3/lib/messages_local.c
@@ -2,17 +2,17 @@
Unix SMB/CIFS implementation.
Samba internal messaging functions
Copyright (C) 2007 by Volker Lendecke
-
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -21,7 +21,7 @@
@defgroup messages Internal messaging framework
@{
@file messages.c
-
+
@brief Module for internal messaging between Samba daemons.
The idea is that if a part of Samba wants to do communication with
@@ -133,6 +133,22 @@ NTSTATUS messaging_tdb_init(struct messaging_context *msg_ctx,
return NT_STATUS_OK;
}
+bool messaging_tdb_parent_init(void)
+{
+ struct tdb_wrap *db;
+
+ db = tdb_wrap_open(talloc_autofree_context(),
+ lock_path("messages.tdb"), 0,
+ TDB_CLEAR_IF_FIRST|TDB_DEFAULT|TDB_VOLATILE,
+ O_RDWR|O_CREAT,0600);
+ if (db == NULL) {
+ DEBUG(1, ("could not open messaging.tdb: %s\n",
+ strerror(errno)));
+ return false;
+ }
+ return true;
+}
+
/*******************************************************************
Form a static tdb key from a pid.
******************************************************************/
@@ -145,7 +161,7 @@ static TDB_DATA message_key_pid(TALLOC_CTX *mem_ctx, struct server_id pid)
key = talloc_asprintf(talloc_tos(), "PID/%s", procid_str_static(&pid));
SMB_ASSERT(key != NULL);
-
+
kbuf.dptr = (uint8 *)key;
kbuf.dsize = strlen(key)+1;
return kbuf;
@@ -371,7 +387,7 @@ static NTSTATUS messaging_tdb_send(struct messaging_context *msg_ctx,
if (!NT_STATUS_IS_OK(status)) {
goto done;
}
-
+
status = message_notify(pid);
if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_HANDLE)) {
diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c
index 9842ead..5401eed 100644
--- a/source3/lib/serverid.c
+++ b/source3/lib/serverid.c
@@ -27,6 +27,22 @@ struct serverid_key {
#endif
};
+bool serverid_parent_init(void)
+{
+ struct tdb_wrap *db;
+
+ db = tdb_wrap_open(talloc_autofree_context(),
+ lock_path("serverid.tdb"),
+ 0, TDB_DEFAULT|TDB_CLEAR_IF_FIRST, O_RDWR|O_CREAT,
+ 0644);
+ if (db == NULL) {
+ DEBUG(1, ("could not open serverid.tdb: %s\n",
+ strerror(errno)));
+ return false;
+ }
+ return true;
+}
+
struct serverid_data {
uint64_t unique_id;
uint32_t msg_flags;
diff --git a/source3/smbd/notify_internal.c b/source3/smbd/notify_internal.c
index 0467e67..0e38da6 100644
--- a/source3/smbd/notify_internal.c
+++ b/source3/smbd/notify_internal.c
@@ -128,6 +128,33 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx, struct server_id server,
return notify;
}
+bool notify_internal_parent_init(void)
+{
+ struct tdb_wrap *db1, *db2;
+
+ if (lp_clustering()) {
+ return true;
+ }
+
+ db1 = tdb_wrap_open(talloc_autofree_context(), lock_path("notify.tdb"),
+ 0, TDB_SEQNUM|TDB_CLEAR_IF_FIRST,
+ O_RDWR|O_CREAT, 0644);
+ if (db1 == NULL) {
+ DEBUG(1, ("could not open notify.tdb: %s\n", strerror(errno)));
+ return false;
+ }
+ db2 = tdb_wrap_open(talloc_autofree_context(),
+ lock_path("notify_onelevel.tdb"),
+ 0, TDB_CLEAR_IF_FIRST, O_RDWR|O_CREAT, 0644);
+ if (db2 == NULL) {
+ DEBUG(1, ("could not open notify_onelevel.tdb: %s\n",
+ strerror(errno)));
+ TALLOC_FREE(db1);
+ return false;
+ }
+ return true;
+}
+
/*
lock and fetch the record
*/
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 81d75b1..e5cfc27 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -1296,6 +1296,18 @@ extern void build_options(bool screen);
if (!locking_init())
exit(1);
+ if (!messaging_tdb_parent_init()) {
+ exit(1);
+ }
+
+ if (!notify_internal_parent_init()) {
+ exit(1);
+ }
+
+ if (!serverid_parent_init()) {
+ exit(1);
+ }
+
namecache_enable();
if (!W_ERROR_IS_OK(registry_init_full()))
--
Samba Shared Repository
More information about the samba-cvs
mailing list