mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 14:42:24 +00:00
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: Joel Becker <joel.becker@oracle.com> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:
parent
14829422be
commit
16c6a4f24d
@ -1693,9 +1693,18 @@ static int o2hb_region_get(const char *region_uuid)
|
|||||||
ret = -ENOENT;
|
ret = -ENOENT;
|
||||||
spin_unlock(&o2hb_live_lock);
|
spin_unlock(&o2hb_live_lock);
|
||||||
|
|
||||||
if (!ret)
|
if (ret)
|
||||||
ret = o2nm_depend_item(®->hr_item);
|
goto out;
|
||||||
|
|
||||||
|
ret = o2nm_depend_this_node();
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
ret = o2nm_depend_item(®->hr_item);
|
||||||
|
if (ret)
|
||||||
|
o2nm_undepend_this_node();
|
||||||
|
|
||||||
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1709,8 +1718,10 @@ static void o2hb_region_put(const char *region_uuid)
|
|||||||
|
|
||||||
spin_unlock(&o2hb_live_lock);
|
spin_unlock(&o2hb_live_lock);
|
||||||
|
|
||||||
if (reg)
|
if (reg) {
|
||||||
o2nm_undepend_item(®->hr_item);
|
o2nm_undepend_item(®->hr_item);
|
||||||
|
o2nm_undepend_this_node();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int o2hb_register_callback(const char *region_uuid,
|
int o2hb_register_callback(const char *region_uuid,
|
||||||
|
@ -910,6 +910,36 @@ void o2nm_undepend_item(struct config_item *item)
|
|||||||
configfs_undepend_item(&o2nm_cluster_group.cs_subsys, 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)
|
static void __exit exit_o2nm(void)
|
||||||
{
|
{
|
||||||
if (ocfs2_table_header)
|
if (ocfs2_table_header)
|
||||||
|
@ -79,5 +79,7 @@ void o2nm_node_put(struct o2nm_node *node);
|
|||||||
|
|
||||||
int o2nm_depend_item(struct config_item *item);
|
int o2nm_depend_item(struct config_item *item);
|
||||||
void o2nm_undepend_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 */
|
#endif /* O2CLUSTER_NODEMANAGER_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user