[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Tue Jul 14 07:57:07 UTC 2015
The branch, master has been updated
via 539125c ctdbd_conn: Move release_ip handling into process.c
via 5523394 ctdbd_conn: Do an early return from ctdb_read_req
via 41b4139 ctdbd_conn: Return early from ctdbd_msg_call_back
via db1bee9 ctdbd_conn: Make register_with_ctdbd use an int-returning callback
via eca508f ctdbd_conn: Convert ctdb_read_req to return 0/errno
via 177b6a4 ctdbd_conn: Convert ctdb_handle_message to return 0/errno
via 9bb10ca ctdbd_conn: Make ctdb_read_packet return 0/errno
via 0b9a8a0 ctdbd_conn: Rename "ret"->"ok"
via 4496845 ctdbd_conn: Fix a memleak
from 452e698 lib/util/charset: reduce loglevel for push_ucs2_talloc error
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 539125c99dfe03aeac5b324106273d8dc10bd7f9
Author: Volker Lendecke <vl at samba.org>
Date: Tue Jun 23 19:07:44 2015 +0200
ctdbd_conn: Move release_ip handling into process.c
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Volker Lendecke <vl at samba.org>
Autobuild-Date(master): Tue Jul 14 09:56:25 CEST 2015 on sn-devel-104
commit 55233940c67a1854e4354766451023a3724c7967
Author: Volker Lendecke <vl at samba.org>
Date: Tue Jun 23 17:04:59 2015 +0200
ctdbd_conn: Do an early return from ctdb_read_req
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 41b413916b52943c95fb751dec5e8ac297e19922
Author: Volker Lendecke <vl at samba.org>
Date: Tue Jun 23 16:59:00 2015 +0200
ctdbd_conn: Return early from ctdbd_msg_call_back
... if the callback returns != 0
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit db1bee97f28ab57868aae6512d6d39e08450b6c3
Author: Volker Lendecke <vl at samba.org>
Date: Tue Jun 23 16:55:09 2015 +0200
ctdbd_conn: Make register_with_ctdbd use an int-returning callback
This will allow an early return from ctdbd_msg_call_back so that we can also
handle CTDB_SRVID_RELEASE_IP via register_with_ctdbd.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit eca508f3c821a73ab08c079ba3ca3522363ad59f
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jun 19 11:47:01 2015 +0200
ctdbd_conn: Convert ctdb_read_req to return 0/errno
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 177b6a4571cce9a9f3b4b3c87b3479b6e955a8ba
Author: Volker Lendecke <vl at samba.org>
Date: Fri Jun 19 11:47:01 2015 +0200
ctdbd_conn: Convert ctdb_handle_message to return 0/errno
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 9bb10caff832b7f8313bf322ce85dabf64ed38e2
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jul 11 12:23:22 2015 +0200
ctdbd_conn: Make ctdb_read_packet return 0/errno
A little less dependencies
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 0b9a8a042f621e60f4279cdd6a0cadff41b88e28
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jul 11 12:21:55 2015 +0200
ctdbd_conn: Rename "ret"->"ok"
We'll need "ret" soon
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 44968456cb7ec96fb3268cda1175da29f37e8a07
Author: Volker Lendecke <vl at samba.org>
Date: Wed Jul 1 17:00:43 2015 +0200
ctdbd_conn: Fix a memleak
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/include/ctdbd_conn.h | 14 +--
source3/lib/ctdb_dummy.c | 14 +--
source3/lib/ctdbd_conn.c | 213 +++++++++++++++++------------------------
source3/lib/messages_ctdbd.c | 8 +-
source3/smbd/notifyd/notifyd.c | 30 +++---
source3/smbd/process.c | 23 ++++-
source3/smbd/server.c | 4 +-
7 files changed, 147 insertions(+), 159 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/ctdbd_conn.h b/source3/include/ctdbd_conn.h
index 6cf123f..b60a0e5 100644
--- a/source3/include/ctdbd_conn.h
+++ b/source3/include/ctdbd_conn.h
@@ -75,8 +75,10 @@ NTSTATUS ctdbd_traverse(uint32_t db_id,
NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
const struct sockaddr_storage *server,
const struct sockaddr_storage *client,
- bool (*release_ip_handler)(const char *ip_addr,
- void *private_data),
+ int (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
+ uint64_t dst_srvid,
+ const uint8_t *msg, size_t msglen,
+ void *private_data),
void *private_data);
NTSTATUS ctdbd_control_local(struct ctdbd_connection *conn, uint32_t opcode,
@@ -89,10 +91,10 @@ NTSTATUS ctdb_unwatch(struct ctdbd_connection *conn);
struct ctdb_req_message;
NTSTATUS register_with_ctdbd(struct ctdbd_connection *conn, uint64_t srvid,
- void (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
- uint64_t dst_srvid,
- const uint8_t *msg, size_t msglen,
- void *private_data),
+ int (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
+ uint64_t dst_srvid,
+ const uint8_t *msg, size_t msglen,
+ void *private_data),
void *private_data);
NTSTATUS ctdbd_probe(void);
diff --git a/source3/lib/ctdb_dummy.c b/source3/lib/ctdb_dummy.c
index b4300c1..df05de7 100644
--- a/source3/lib/ctdb_dummy.c
+++ b/source3/lib/ctdb_dummy.c
@@ -37,10 +37,10 @@ NTSTATUS ctdbd_messaging_send_iov(struct ctdbd_connection *conn,
}
NTSTATUS register_with_ctdbd(struct ctdbd_connection *conn, uint64_t srvid,
- void (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
- uint64_t dst_srvid,
- const uint8_t *msg, size_t msglen,
- void *private_data),
+ int (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
+ uint64_t dst_srvid,
+ const uint8_t *msg, size_t msglen,
+ void *private_data),
void *private_data)
{
return NT_STATUS_NOT_IMPLEMENTED;
@@ -49,8 +49,10 @@ NTSTATUS register_with_ctdbd(struct ctdbd_connection *conn, uint64_t srvid,
NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
const struct sockaddr_storage *_server,
const struct sockaddr_storage *_client,
- bool (*release_ip_handler)(const char *ip_addr,
- void *private_data),
+ int (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
+ uint64_t dst_srvid,
+ const uint8_t *msg, size_t msglen,
+ void *private_data),
void *private_data)
{
return NT_STATUS_NOT_IMPLEMENTED;
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c
index fae086a..1acce12 100644
--- a/source3/lib/ctdbd_conn.c
+++ b/source3/lib/ctdbd_conn.c
@@ -35,10 +35,10 @@
struct ctdbd_srvid_cb {
uint64_t srvid;
- void (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
- uint64_t dst_srvid,
- const uint8_t *msg, size_t msglen,
- void *private_data);
+ int (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
+ uint64_t dst_srvid,
+ const uint8_t *msg, size_t msglen,
+ void *private_data);
void *private_data;
};
@@ -50,9 +50,6 @@ struct ctdbd_connection {
struct ctdbd_srvid_cb *callbacks;
int fd;
struct tevent_fd *fde;
-
- bool (*release_ip_handler)(const char *ip_addr, void *private_data);
- void *release_ip_priv;
};
static uint32_t ctdbd_next_reqid(struct ctdbd_connection *conn)
@@ -101,10 +98,10 @@ static void ctdb_packet_dump(struct ctdb_req_header *hdr)
* Register a srvid with ctdbd
*/
NTSTATUS register_with_ctdbd(struct ctdbd_connection *conn, uint64_t srvid,
- void (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
- uint64_t dst_srvid,
- const uint8_t *msg, size_t msglen,
- void *private_data),
+ int (*cb)(uint32_t src_vnn, uint32_t dst_vnn,
+ uint64_t dst_srvid,
+ const uint8_t *msg, size_t msglen,
+ void *private_data),
void *private_data)
{
@@ -136,8 +133,8 @@ NTSTATUS register_with_ctdbd(struct ctdbd_connection *conn, uint64_t srvid,
return NT_STATUS_OK;
}
-static void ctdbd_msg_call_back(struct ctdbd_connection *conn,
- struct ctdb_req_message *msg)
+static int ctdbd_msg_call_back(struct ctdbd_connection *conn,
+ struct ctdb_req_message *msg)
{
size_t msg_len;
size_t i, num_callbacks;
@@ -146,14 +143,14 @@ static void ctdbd_msg_call_back(struct ctdbd_connection *conn,
if (msg_len < offsetof(struct ctdb_req_message, data)) {
DEBUG(10, ("%s: len %u too small\n", __func__,
(unsigned)msg_len));
- return;
+ return 0;
}
msg_len -= offsetof(struct ctdb_req_message, data);
if (msg_len < msg->datalen) {
DEBUG(10, ("%s: msg_len=%u < msg->datalen=%u\n", __func__,
(unsigned)msg_len, (unsigned)msg->datalen));
- return;
+ return 0;
}
num_callbacks = talloc_array_length(conn->callbacks);
@@ -162,11 +159,17 @@ static void ctdbd_msg_call_back(struct ctdbd_connection *conn,
struct ctdbd_srvid_cb *cb = &conn->callbacks[i];
if ((cb->srvid == msg->srvid) && (cb->cb != NULL)) {
- cb->cb(msg->hdr.srcnode, msg->hdr.destnode,
- msg->srvid, msg->data, msg->datalen,
- cb->private_data);
+ int ret;
+
+ ret = cb->cb(msg->hdr.srcnode, msg->hdr.destnode,
+ msg->srvid, msg->data, msg->datalen,
+ cb->private_data);
+ if (ret != 0) {
+ return ret;
+ }
}
}
+ return 0;
}
/*
@@ -301,8 +304,8 @@ static int ctdbd_connect(int *pfd)
return 0;
}
-static NTSTATUS ctdb_read_packet(int fd, TALLOC_CTX *mem_ctx,
- struct ctdb_req_header **result)
+static int ctdb_read_packet(int fd, TALLOC_CTX *mem_ctx,
+ struct ctdb_req_header **result)
{
int timeout = lp_ctdb_timeout();
struct ctdb_req_header *req;
@@ -317,31 +320,31 @@ static NTSTATUS ctdb_read_packet(int fd, TALLOC_CTX *mem_ctx,
if (timeout != -1) {
ret = poll_one_fd(fd, POLLIN, timeout, &revents);
if (ret == -1) {
- return map_nt_error_from_unix(errno);
+ return errno;
}
if (ret == 0) {
- return NT_STATUS_IO_TIMEOUT;
+ return ETIMEDOUT;
}
if (ret != 1) {
- return NT_STATUS_UNEXPECTED_IO_ERROR;
+ return EIO;
}
}
nread = read_data(fd, &msglen, sizeof(msglen));
if (nread == -1) {
- return map_nt_error_from_unix(errno);
+ return errno;
}
if (nread == 0) {
- return NT_STATUS_UNEXPECTED_IO_ERROR;
+ return EIO;
}
if (msglen < sizeof(struct ctdb_req_header)) {
- return NT_STATUS_UNEXPECTED_IO_ERROR;
+ return EIO;
}
req = talloc_size(mem_ctx, msglen);
if (req == NULL) {
- return NT_STATUS_NO_MEMORY;
+ return ENOMEM;
}
talloc_set_name_const(req, "struct ctdb_req_header");
@@ -350,14 +353,14 @@ static NTSTATUS ctdb_read_packet(int fd, TALLOC_CTX *mem_ctx,
nread = read_data(fd, ((char *)req) + sizeof(msglen),
msglen - sizeof(msglen));
if (nread == -1) {
- return map_nt_error_from_unix(errno);
+ return errno;
}
if (nread == 0) {
- return NT_STATUS_UNEXPECTED_IO_ERROR;
+ return EIO;
}
*result = req;
- return NT_STATUS_OK;
+ return 0;
}
/*
@@ -365,18 +368,17 @@ static NTSTATUS ctdb_read_packet(int fd, TALLOC_CTX *mem_ctx,
* messages that might come in between.
*/
-static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32_t reqid,
- TALLOC_CTX *mem_ctx,
- struct ctdb_req_header **result)
+static int ctdb_read_req(struct ctdbd_connection *conn, uint32_t reqid,
+ TALLOC_CTX *mem_ctx, struct ctdb_req_header **result)
{
struct ctdb_req_header *hdr;
- NTSTATUS status;
+ int ret;
next_pkt:
- status = ctdb_read_packet(conn->fd, mem_ctx, &hdr);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("ctdb_read_packet failed: %s\n", nt_errstr(status)));
+ ret = ctdb_read_packet(conn->fd, mem_ctx, &hdr);
+ if (ret != 0) {
+ DEBUG(0, ("ctdb_read_packet failed: %s\n", strerror(ret)));
cluster_fatal("ctdbd died\n");
}
@@ -390,34 +392,16 @@ static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32_t reqid,
DEBUG(1, ("Got a message without having a msg ctx, "
"dropping msg %llu\n",
(long long unsigned)msg->srvid));
+ TALLOC_FREE(hdr);
goto next_pkt;
}
- if ((conn->release_ip_handler != NULL)
- && (msg->srvid == CTDB_SRVID_RELEASE_IP)) {
- bool ret;
-
- /* must be dispatched immediately */
- DEBUG(10, ("received CTDB_SRVID_RELEASE_IP\n"));
- ret = conn->release_ip_handler((const char *)msg->data,
- conn->release_ip_priv);
+ ret = ctdbd_msg_call_back(conn, msg);
+ if (ret != 0) {
TALLOC_FREE(hdr);
-
- if (ret) {
- /*
- * We need to release the ip,
- * so return an error to the upper layers.
- *
- * We make sure we don't trigger this again.
- */
- conn->release_ip_handler = NULL;
- conn->release_ip_priv = NULL;
- return NT_STATUS_ADDRESS_CLOSED;
- }
- goto next_pkt;
+ return ret;
}
- ctdbd_msg_call_back(conn, msg);
TALLOC_FREE(hdr);
goto next_pkt;
}
@@ -432,7 +416,7 @@ static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32_t reqid,
*result = talloc_move(mem_ctx, &hdr);
- return NT_STATUS_OK;
+ return 0;
}
static int ctdbd_connection_destructor(struct ctdbd_connection *c)
@@ -538,42 +522,22 @@ int ctdbd_conn_get_fd(struct ctdbd_connection *conn)
/*
* Packet handler to receive and handle a ctdb message
*/
-static NTSTATUS ctdb_handle_message(struct ctdbd_connection *conn,
- struct ctdb_req_header *hdr)
+static int ctdb_handle_message(struct ctdbd_connection *conn,
+ struct ctdb_req_header *hdr)
{
struct ctdb_req_message *msg;
if (hdr->operation != CTDB_REQ_MESSAGE) {
DEBUG(0, ("Received async msg of type %u, discarding\n",
hdr->operation));
- return NT_STATUS_INVALID_PARAMETER;
+ return EINVAL;
}
msg = (struct ctdb_req_message *)hdr;
- if ((conn->release_ip_handler != NULL)
- && (msg->srvid == CTDB_SRVID_RELEASE_IP)) {
- bool ret;
-
- /* must be dispatched immediately */
- DEBUG(10, ("received CTDB_SRVID_RELEASE_IP\n"));
- ret = conn->release_ip_handler((const char *)msg->data,
- conn->release_ip_priv);
- if (ret) {
- /*
- * We need to release the ip.
- *
- * We make sure we don't trigger this again.
- */
- conn->release_ip_handler = NULL;
- conn->release_ip_priv = NULL;
- }
- return NT_STATUS_OK;
- }
-
ctdbd_msg_call_back(conn, msg);
- return NT_STATUS_OK;
+ return 0;
}
/*
@@ -588,21 +552,21 @@ static void ctdbd_socket_handler(struct tevent_context *event_ctx,
struct ctdbd_connection *conn = talloc_get_type_abort(
private_data, struct ctdbd_connection);
struct ctdb_req_header *hdr = NULL;
- NTSTATUS status;
+ int ret;
- status = ctdb_read_packet(conn->fd, talloc_tos(), &hdr);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("ctdb_read_packet failed: %s\n", nt_errstr(status)));
+ ret = ctdb_read_packet(conn->fd, talloc_tos(), &hdr);
+ if (ret != 0) {
+ DEBUG(0, ("ctdb_read_packet failed: %s\n", strerror(ret)));
cluster_fatal("ctdbd died\n");
}
- status = ctdb_handle_message(conn, hdr);
+ ret = ctdb_handle_message(conn, hdr);
TALLOC_FREE(hdr);
- if (!NT_STATUS_IS_OK(status)) {
+ if (ret != 0) {
DEBUG(10, ("could not handle incoming message: %s\n",
- nt_errstr(status)));
+ strerror(ret)));
}
}
@@ -684,6 +648,7 @@ static NTSTATUS ctdbd_control(struct ctdbd_connection *conn,
struct iovec iov[2];
ssize_t nwritten;
NTSTATUS status;
+ int ret;
if (conn == NULL) {
status = ctdbd_init_connection(NULL, &new_conn);
@@ -731,10 +696,10 @@ static NTSTATUS ctdbd_control(struct ctdbd_connection *conn,
return NT_STATUS_OK;
}
- status = ctdb_read_req(conn, req.hdr.reqid, NULL, &hdr);
-
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(10, ("ctdb_read_req failed: %s\n", nt_errstr(status)));
+ ret = ctdb_read_req(conn, req.hdr.reqid, NULL, &hdr);
+ if (ret != 0) {
+ DEBUG(10, ("ctdb_read_req failed: %s\n", strerror(ret)));
+ status = map_nt_error_from_unix(ret);
goto fail;
}
@@ -788,7 +753,6 @@ bool ctdb_processes_exist(struct ctdbd_connection *conn,
{
TALLOC_CTX *frame = talloc_stackframe();
int i, num_received;
- NTSTATUS status;
uint32_t *reqids;
bool result = false;
@@ -840,7 +804,6 @@ bool ctdb_processes_exist(struct ctdbd_connection *conn,
nwritten = write_data_iov(conn->fd, iov, ARRAY_SIZE(iov));
if (nwritten == -1) {
- status = map_nt_error_from_unix(errno);
DEBUG(10, ("write_data_iov failed: %s\n",
strerror(errno)));
goto fail;
@@ -853,11 +816,12 @@ bool ctdb_processes_exist(struct ctdbd_connection *conn,
struct ctdb_req_header *hdr;
struct ctdb_reply_control *reply;
uint32_t reqid;
+ int ret;
- status = ctdb_read_req(conn, 0, talloc_tos(), &hdr);
- if (!NT_STATUS_IS_OK(status)) {
+ ret = ctdb_read_req(conn, 0, talloc_tos(), &hdr);
+ if (ret != 0) {
DEBUG(10, ("ctdb_read_req failed: %s\n",
- nt_errstr(status)));
+ strerror(ret)));
goto fail;
}
@@ -992,7 +956,6 @@ bool ctdb_serverids_exist(struct ctdbd_connection *conn,
bool *results)
{
unsigned i, num_received;
- NTSTATUS status;
struct ctdb_vnn_list *vnns = NULL;
unsigned num_vnns;
@@ -1037,7 +1000,6 @@ bool ctdb_serverids_exist(struct ctdbd_connection *conn,
nwritten = write_data_iov(conn->fd, iov, ARRAY_SIZE(iov));
if (nwritten == -1) {
- status = map_nt_error_from_unix(errno);
DEBUG(10, ("write_data_iov failed: %s\n",
strerror(errno)));
goto fail;
@@ -1052,11 +1014,12 @@ bool ctdb_serverids_exist(struct ctdbd_connection *conn,
struct ctdb_vnn_list *vnn;
uint32_t reqid;
uint8_t *reply_data;
+ int ret;
- status = ctdb_read_req(conn, 0, talloc_tos(), &hdr);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(1, ("ctdb_read_req failed: %s\n",
- nt_errstr(status)));
+ ret = ctdb_read_req(conn, 0, talloc_tos(), &hdr);
+ if (ret != 0) {
+ DEBUG(10, ("ctdb_read_req failed: %s\n",
+ strerror(ret)));
goto fail;
}
@@ -1224,6 +1187,7 @@ NTSTATUS ctdbd_migrate(struct ctdbd_connection *conn, uint32_t db_id,
struct iovec iov[2];
ssize_t nwritten;
NTSTATUS status;
+ int ret;
ZERO_STRUCT(req);
@@ -1251,10 +1215,10 @@ NTSTATUS ctdbd_migrate(struct ctdbd_connection *conn, uint32_t db_id,
cluster_fatal("cluster dispatch daemon msg write error\n");
}
- status = ctdb_read_req(conn, req.hdr.reqid, NULL, &hdr);
-
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("ctdb_read_req failed: %s\n", nt_errstr(status)));
+ ret = ctdb_read_req(conn, req.hdr.reqid, NULL, &hdr);
+ if (ret != 0) {
+ DEBUG(10, ("ctdb_read_req failed: %s\n", strerror(ret)));
+ status = map_nt_error_from_unix(ret);
goto fail;
}
@@ -1287,6 +1251,7 @@ NTSTATUS ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
ssize_t nwritten;
NTSTATUS status;
uint32_t flags;
+ int ret;
flags = local_copy ? CTDB_WANT_READONLY : 0;
@@ -1313,10 +1278,10 @@ NTSTATUS ctdbd_parse(struct ctdbd_connection *conn, uint32_t db_id,
cluster_fatal("cluster dispatch daemon msg write error\n");
}
- status = ctdb_read_req(conn, req.hdr.reqid, NULL, &hdr);
-
- if (!NT_STATUS_IS_OK(status)) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list