1 /* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
6 * Glue to the underlying cluster stack.
8 * Copyright (C) 2007 Oracle. All rights reserved.
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public
12 * License as published by the Free Software Foundation, version 2.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
24 #include <linux/types.h>
25 #include <linux/list.h>
26 #include <linux/dlmconstants.h>
29 * dlmconstants.h does not have a LOCAL flag. We hope to remove it
30 * some day, but right now we need it. Let's fake it. This value is larger
31 * than any flag in dlmconstants.h.
33 #define DLM_LKF_LOCAL 0x00100000
36 * This shadows DLM_LOCKSPACE_LEN in fs/dlm/dlm_internal.h. That probably
37 * wants to be in a public header.
39 #define GROUP_NAME_MAX 64
42 #include "dlm/dlmapi.h"
44 struct ocfs2_protocol_version {
49 struct ocfs2_locking_protocol {
50 struct ocfs2_protocol_version lp_max_version;
51 void (*lp_lock_ast)(void *astarg);
52 void (*lp_blocking_ast)(void *astarg, int level);
53 void (*lp_unlock_ast)(void *astarg, int error);
56 union ocfs2_dlm_lksb {
57 struct dlm_lockstatus lksb_o2dlm;
60 struct ocfs2_cluster_connection {
61 char cc_name[GROUP_NAME_MAX];
63 struct ocfs2_protocol_version cc_version;
64 void (*cc_recovery_handler)(int node_num, void *recovery_data);
65 void *cc_recovery_data;
70 int ocfs2_cluster_connect(const char *group,
72 void (*recovery_handler)(int node_num,
75 struct ocfs2_cluster_connection **conn);
76 int ocfs2_cluster_disconnect(struct ocfs2_cluster_connection *conn);
77 void ocfs2_cluster_hangup(const char *group, int grouplen);
78 int ocfs2_cluster_this_node(unsigned int *node);
80 int ocfs2_dlm_lock(struct ocfs2_cluster_connection *conn,
82 union ocfs2_dlm_lksb *lksb,
87 int ocfs2_dlm_unlock(struct ocfs2_cluster_connection *conn,
88 union ocfs2_dlm_lksb *lksb,
92 int ocfs2_dlm_lock_status(union ocfs2_dlm_lksb *lksb);
93 void *ocfs2_dlm_lvb(union ocfs2_dlm_lksb *lksb);
95 void o2cb_get_stack(struct ocfs2_locking_protocol *proto);
96 void o2cb_put_stack(void);
98 #endif /* STACKGLUE_H */