[Ocfs2-devel] [PATCH 8/8] ocfs2/dlm: Add message DLM_QUERY_NODEINFO

Wengang Wang wen.gang.wang at oracle.com
Wed Jul 28 23:49:36 PDT 2010


On 10-07-23 16:55, Sunil Mushran wrote:
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
> ---
>  fs/ocfs2/dlm/dlmcommon.h |   17 ++++
>  fs/ocfs2/dlm/dlmdomain.c |  188 +++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 204 insertions(+), 1 deletions(-)
> 
> +	for (i = 0; i < O2NM_MAX_NODES && !status; ++i) {
> +		local = o2nm_get_node_by_num(i);
> +		remote = NULL;
> +		for (j = 0; j < qn->qn_numnodes; ++j) {
> +			if (qn->qn_nodes[j].ni_nodenum == i) {
> +				remote = &(qn->qn_nodes[j]);
> +				break;
> +			}
> +		}
> +
> +		if (!local && !remote)
> +			continue;
> +
> +		if ((local && !remote) || (!local && remote))
> +			status = -EINVAL;
> +
> +		if (!status &&
> +		    ((remote->ni_nodenum != local->nd_num) ||

ni_nodenum already checked in the for loop.
> +		     (remote->ni_ipv4_port != local->nd_ipv4_port) ||
> +		     (remote->ni_ipv4_address != local->nd_ipv4_address)))
> +			status = -EINVAL;
> +

> +static int dlm_send_nodeinfo(struct dlm_ctxt *dlm, unsigned long *node_map)
> +{
> +	struct dlm_query_nodeinfo *qn = NULL;
> +	struct o2nm_node *node;
> +	int ret = 0, status, count, i;
> +
> +	if (find_next_bit(node_map, O2NM_MAX_NODES, 0) >= O2NM_MAX_NODES)
> +		goto bail;
> +
> +	qn = kmalloc(sizeof(struct dlm_query_nodeinfo), GFP_KERNEL);
> +	if (!qn) {
> +		ret = -ENOMEM;
> +		mlog_errno(ret);
> +		goto bail;
> +	}
> +
> +	memset(qn, 0, sizeof(struct dlm_query_nodeinfo));

Any reason we are not using kzalloc() here and in dlm_send_hbregions()?

> +	for (i = 0, count = 0; i < O2NM_MAX_NODES; ++i) {
> +		node = o2nm_get_node_by_num(i);
> +		if (!node)
> +			continue;
> +		qn->qn_nodes[count].ni_nodenum = node->nd_num;
> +		qn->qn_nodes[count].ni_ipv4_port = node->nd_ipv4_port;
> +

> +static int dlm_query_nodeinfo_handler(struct o2net_msg *msg, u32 len,
> +				      void *data, void **ret_data)
> +{
> +	struct dlm_query_nodeinfo *qn;
> +	struct dlm_ctxt *dlm = NULL;
> +	int locked = 0, status = 0;
> +
> +	qn = (struct dlm_query_nodeinfo *) msg->buf;
> +
> +	mlog(ML_NOTICE, "Node %u queries nodes on domain %s\n",
> +	     qn->qn_nodenum, qn->qn_domain);
> +
> +	status = -EINVAL;

how about remove this line and

+	int locked = 0, status = -EINVAL;

regards,
wengang.
> +
> +	spin_lock(&dlm_domain_lock);
> +	dlm = __dlm_lookup_domain_full(qn->qn_domain, qn->qn_namelen);
> +	if (!dlm) {
> +		mlog(ML_ERROR, "Node %d queried nodes on domain %s before "
> +		     "join domain\n", qn->qn_nodenum, qn->qn_domain);
> +		goto bail;
> +	}
> +



More information about the Ocfs2-devel mailing list