Skip to content

Commit

Permalink
ocfs2: pass ocfs2_cluster_connection to ocfs2_this_node
Browse files Browse the repository at this point in the history
This is done to differentiate between using and not using controld and
use the connection information accordingly.

We need to be backward compatible.  So, we use a new enum
ocfs2_connection_type to identify when controld is used and when it is
not.

Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: Mark Fasheh <mfasheh@suse.de>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Goldwyn Rodrigues authored and Linus Torvalds committed Jan 22, 2014
1 parent 24aa338 commit 3e83415
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 8 deletions.
2 changes: 1 addition & 1 deletion fs/ocfs2/dlmglue.c
Original file line number Diff line number Diff line change
Expand Up @@ -3007,7 +3007,7 @@ int ocfs2_dlm_init(struct ocfs2_super *osb)
goto bail;
}

status = ocfs2_cluster_this_node(&osb->node_num);
status = ocfs2_cluster_this_node(conn, &osb->node_num);
if (status < 0) {
mlog_errno(status);
mlog(ML_ERROR,
Expand Down
3 changes: 2 additions & 1 deletion fs/ocfs2/stack_o2cb.c
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,8 @@ static int o2cb_cluster_disconnect(struct ocfs2_cluster_connection *conn)
return 0;
}

static int o2cb_cluster_this_node(unsigned int *node)
static int o2cb_cluster_this_node(struct ocfs2_cluster_connection *conn,
unsigned int *node)
{
int node_num;

Expand Down
16 changes: 14 additions & 2 deletions fs/ocfs2/stack_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,19 @@
#define OCFS2_CONTROL_MESSAGE_VERNUM_LEN 2
#define OCFS2_CONTROL_MESSAGE_NODENUM_LEN 8

enum ocfs2_connection_type {
WITH_CONTROLD,
NO_CONTROLD
};

/*
* ocfs2_live_connection is refcounted because the filesystem and
* miscdevice sides can detach in different order. Let's just be safe.
*/
struct ocfs2_live_connection {
struct list_head oc_list;
struct ocfs2_cluster_connection *oc_conn;
enum ocfs2_connection_type oc_type;
atomic_t oc_this_node;
int oc_our_slot;
};
Expand Down Expand Up @@ -840,6 +846,7 @@ static int user_cluster_connect(struct ocfs2_cluster_connection *conn)
goto out;
}

lc->oc_type = WITH_CONTROLD;
rc = ocfs2_live_connection_attach(conn, lc);
if (rc)
goto out;
Expand Down Expand Up @@ -886,11 +893,16 @@ static int user_cluster_disconnect(struct ocfs2_cluster_connection *conn)
return 0;
}

static int user_cluster_this_node(unsigned int *this_node)
static int user_cluster_this_node(struct ocfs2_cluster_connection *conn,
unsigned int *this_node)
{
int rc;
struct ocfs2_live_connection *lc = conn->cc_private;

rc = ocfs2_control_get_this_node();
if (lc->oc_type == WITH_CONTROLD)
rc = ocfs2_control_get_this_node();
else
rc = -EINVAL;
if (rc < 0)
return rc;

Expand Down
5 changes: 3 additions & 2 deletions fs/ocfs2/stackglue.c
Original file line number Diff line number Diff line change
Expand Up @@ -465,9 +465,10 @@ void ocfs2_cluster_hangup(const char *group, int grouplen)
}
EXPORT_SYMBOL_GPL(ocfs2_cluster_hangup);

int ocfs2_cluster_this_node(unsigned int *node)
int ocfs2_cluster_this_node(struct ocfs2_cluster_connection *conn,
unsigned int *node)
{
return active_stack->sp_ops->this_node(node);
return active_stack->sp_ops->this_node(conn, node);
}
EXPORT_SYMBOL_GPL(ocfs2_cluster_this_node);

Expand Down
6 changes: 4 additions & 2 deletions fs/ocfs2/stackglue.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,8 @@ struct ocfs2_stack_operations {
* ->this_node() returns the cluster's unique identifier for the
* local node.
*/
int (*this_node)(unsigned int *node);
int (*this_node)(struct ocfs2_cluster_connection *conn,
unsigned int *node);

/*
* Call the underlying dlm lock function. The ->dlm_lock()
Expand Down Expand Up @@ -267,7 +268,8 @@ int ocfs2_cluster_connect_agnostic(const char *group,
int ocfs2_cluster_disconnect(struct ocfs2_cluster_connection *conn,
int hangup_pending);
void ocfs2_cluster_hangup(const char *group, int grouplen);
int ocfs2_cluster_this_node(unsigned int *node);
int ocfs2_cluster_this_node(struct ocfs2_cluster_connection *conn,
unsigned int *node);

struct ocfs2_lock_res;
int ocfs2_dlm_lock(struct ocfs2_cluster_connection *conn,
Expand Down

0 comments on commit 3e83415

Please sign in to comment.