Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16c6a4f2 authored by Joel Becker's avatar Joel Becker Committed by Mark Fasheh
Browse files

ocfs2: live heartbeat depends on the local node configuration



Removing the local node configuration out from underneath a running
heartbeat is "bad".  Provide an API in the ocfs2 nodemanager to request
a configfs dependancy on the local node, then use it in heartbeat.

Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent 14829422
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -1693,9 +1693,18 @@ static int o2hb_region_get(const char *region_uuid)
		ret = -ENOENT;
	spin_unlock(&o2hb_live_lock);

	if (!ret)
	if (ret)
		goto out;

	ret = o2nm_depend_this_node();
	if (ret)
		goto out;

	ret = o2nm_depend_item(&reg->hr_item);
	if (ret)
		o2nm_undepend_this_node();

out:
	return ret;
}

@@ -1709,8 +1718,10 @@ static void o2hb_region_put(const char *region_uuid)

	spin_unlock(&o2hb_live_lock);

	if (reg)
	if (reg) {
		o2nm_undepend_item(&reg->hr_item);
		o2nm_undepend_this_node();
	}
}

int o2hb_register_callback(const char *region_uuid,
+30 −0
Original line number Diff line number Diff line
@@ -910,6 +910,36 @@ void o2nm_undepend_item(struct config_item *item)
	configfs_undepend_item(&o2nm_cluster_group.cs_subsys, item);
}

int o2nm_depend_this_node(void)
{
	int ret = 0;
	struct o2nm_node *local_node;

	local_node = o2nm_get_node_by_num(o2nm_this_node());
	if (!local_node) {
		ret = -EINVAL;
		goto out;
	}

	ret = o2nm_depend_item(&local_node->nd_item);
	o2nm_node_put(local_node);

out:
	return ret;
}

void o2nm_undepend_this_node(void)
{
	struct o2nm_node *local_node;

	local_node = o2nm_get_node_by_num(o2nm_this_node());
	BUG_ON(!local_node);

	o2nm_undepend_item(&local_node->nd_item);
	o2nm_node_put(local_node);
}


static void __exit exit_o2nm(void)
{
	if (ocfs2_table_header)
+2 −0
Original line number Diff line number Diff line
@@ -79,5 +79,7 @@ void o2nm_node_put(struct o2nm_node *node);

int o2nm_depend_item(struct config_item *item);
void o2nm_undepend_item(struct config_item *item);
int o2nm_depend_this_node(void);
void o2nm_undepend_this_node(void);

#endif /* O2CLUSTER_NODEMANAGER_H */