From 2cf1347211aab592437af81af312026151e578dd Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 26 Oct 2011 10:56:32 +0200 Subject: s3-ctdb: Don't hand out 0 as reqid 0 will be used as a wildcard reqid in ctdb_read_req --- source3/lib/ctdbd_conn.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c index 6e6c466128..d4786659d0 100644 --- a/source3/lib/ctdbd_conn.c +++ b/source3/lib/ctdbd_conn.c @@ -62,6 +62,15 @@ struct ctdbd_connection { void *release_ip_priv; }; +static uint32_t ctdbd_next_reqid(struct ctdbd_connection *conn) +{ + conn->reqid += 1; + if (conn->reqid == 0) { + conn->reqid += 1; + } + return conn->reqid; +} + static NTSTATUS ctdbd_control(struct ctdbd_connection *conn, uint32_t vnn, uint32 opcode, uint64_t srvid, uint32_t flags, TDB_DATA data, @@ -833,7 +842,7 @@ static NTSTATUS ctdbd_control(struct ctdbd_connection *conn, req.hdr.ctdb_magic = CTDB_MAGIC; req.hdr.ctdb_version = CTDB_VERSION; req.hdr.operation = CTDB_REQ_CONTROL; - req.hdr.reqid = ++conn->reqid; + req.hdr.reqid = ctdbd_next_reqid(conn); req.hdr.destnode = vnn; req.opcode = opcode; req.srvid = srvid; @@ -1016,7 +1025,7 @@ NTSTATUS ctdbd_migrate(struct ctdbd_connection *conn, uint32 db_id, req.hdr.ctdb_magic = CTDB_MAGIC; req.hdr.ctdb_version = CTDB_VERSION; req.hdr.operation = CTDB_REQ_CALL; - req.hdr.reqid = ++conn->reqid; + req.hdr.reqid = ctdbd_next_reqid(conn); req.flags = CTDB_IMMEDIATE_MIGRATION; req.callid = CTDB_NULL_FUNC; req.db_id = db_id; @@ -1078,7 +1087,7 @@ NTSTATUS ctdbd_fetch(struct ctdbd_connection *conn, uint32 db_id, req.hdr.ctdb_magic = CTDB_MAGIC; req.hdr.ctdb_version = CTDB_VERSION; req.hdr.operation = CTDB_REQ_CALL; - req.hdr.reqid = ++conn->reqid; + req.hdr.reqid = ctdbd_next_reqid(conn); req.flags = 0; req.callid = CTDB_FETCH_FUNC; req.db_id = db_id; @@ -1225,7 +1234,7 @@ NTSTATUS ctdbd_traverse(uint32 db_id, t.db_id = db_id; t.srvid = conn->rand_srvid; - t.reqid = ++conn->reqid; + t.reqid = ctdbd_next_reqid(conn); data.dptr = (uint8_t *)&t; data.dsize = sizeof(t); -- cgit