]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - fs/ocfs2/stackglue.h
ocfs2: handle async EAGAIN from NOQUEUE request
[mirror_ubuntu-bionic-kernel.git] / fs / ocfs2 / stackglue.h
CommitLineData
24ef1815
JB
1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * stackglue.h
5 *
6 * Glue to the underlying cluster stack.
7 *
8 * Copyright (C) 2007 Oracle. All rights reserved.
9 *
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.
13 *
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.
18 */
19
20
21#ifndef STACKGLUE_H
22#define STACKGLUE_H
23
bd3e7610
JB
24#include <linux/types.h>
25#include <linux/list.h>
26#include <linux/dlmconstants.h>
27
28/*
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.
32 */
33#define DLM_LKF_LOCAL 0x00100000
34
4670c46d
JB
35/*
36 * This shadows DLM_LOCKSPACE_LEN in fs/dlm/dlm_internal.h. That probably
37 * wants to be in a public header.
38 */
39#define GROUP_NAME_MAX 64
40
41
bd3e7610
JB
42#include "dlm/dlmapi.h"
43
4670c46d
JB
44struct ocfs2_protocol_version {
45 u8 pv_major;
46 u8 pv_minor;
47};
48
24ef1815 49struct ocfs2_locking_protocol {
4670c46d 50 struct ocfs2_protocol_version lp_max_version;
24ef1815
JB
51 void (*lp_lock_ast)(void *astarg);
52 void (*lp_blocking_ast)(void *astarg, int level);
7431cd7e 53 void (*lp_unlock_ast)(void *astarg, int error);
24ef1815
JB
54};
55
8f2c9c1b
JB
56union ocfs2_dlm_lksb {
57 struct dlm_lockstatus lksb_o2dlm;
58};
59
4670c46d
JB
60struct ocfs2_cluster_connection {
61 char cc_name[GROUP_NAME_MAX];
62 int cc_namelen;
63 struct ocfs2_protocol_version cc_version;
64 void (*cc_recovery_handler)(int node_num, void *recovery_data);
65 void *cc_recovery_data;
66 void *cc_lockspace;
67 void *cc_private;
68};
69
70int ocfs2_cluster_connect(const char *group,
71 int grouplen,
72 void (*recovery_handler)(int node_num,
73 void *recovery_data),
74 void *recovery_data,
75 struct ocfs2_cluster_connection **conn);
76int ocfs2_cluster_disconnect(struct ocfs2_cluster_connection *conn);
6953b4c0 77void ocfs2_cluster_hangup(const char *group, int grouplen);
19fdb624 78int ocfs2_cluster_this_node(unsigned int *node);
4670c46d
JB
79
80int ocfs2_dlm_lock(struct ocfs2_cluster_connection *conn,
24ef1815 81 int mode,
8f2c9c1b 82 union ocfs2_dlm_lksb *lksb,
24ef1815
JB
83 u32 flags,
84 void *name,
85 unsigned int namelen,
86 void *astarg);
4670c46d 87int ocfs2_dlm_unlock(struct ocfs2_cluster_connection *conn,
8f2c9c1b 88 union ocfs2_dlm_lksb *lksb,
24ef1815
JB
89 u32 flags,
90 void *astarg);
91
8f2c9c1b
JB
92int ocfs2_dlm_lock_status(union ocfs2_dlm_lksb *lksb);
93void *ocfs2_dlm_lvb(union ocfs2_dlm_lksb *lksb);
94
24ef1815
JB
95void o2cb_get_stack(struct ocfs2_locking_protocol *proto);
96void o2cb_put_stack(void);
97
98#endif /* STACKGLUE_H */