Skip to content
Snippets Groups Projects
Commit 2b190ce9 authored by Sunil Mushran's avatar Sunil Mushran Committed by Joel Becker
Browse files

ocfs2/cluster: Pin the remote node item in configfs


o2net pins the node item of the remote node in configfs before initiating
the connection. It is unpinned on disconnect. This is to prevent the node
item from being unlinked while it is still in use.

Signed-off-by: default avatarSunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
parent 66f45005
No related branches found
No related tags found
No related merge requests found
...@@ -355,6 +355,7 @@ static void sc_kref_release(struct kref *kref) ...@@ -355,6 +355,7 @@ static void sc_kref_release(struct kref *kref)
sc->sc_sock = NULL; sc->sc_sock = NULL;
} }
o2nm_undepend_item(&sc->sc_node->nd_item);
o2nm_node_put(sc->sc_node); o2nm_node_put(sc->sc_node);
sc->sc_node = NULL; sc->sc_node = NULL;
...@@ -376,6 +377,7 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node) ...@@ -376,6 +377,7 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node)
{ {
struct o2net_sock_container *sc, *ret = NULL; struct o2net_sock_container *sc, *ret = NULL;
struct page *page = NULL; struct page *page = NULL;
int status = 0;
page = alloc_page(GFP_NOFS); page = alloc_page(GFP_NOFS);
sc = kzalloc(sizeof(*sc), GFP_NOFS); sc = kzalloc(sizeof(*sc), GFP_NOFS);
...@@ -386,6 +388,13 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node) ...@@ -386,6 +388,13 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node)
o2nm_node_get(node); o2nm_node_get(node);
sc->sc_node = node; sc->sc_node = node;
/* pin the node item of the remote node */
status = o2nm_depend_item(&node->nd_item);
if (status) {
mlog_errno(status);
o2nm_node_put(node);
goto out;
}
INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed); INIT_WORK(&sc->sc_connect_work, o2net_sc_connect_completed);
INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty); INIT_WORK(&sc->sc_rx_work, o2net_rx_until_empty);
INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc); INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment