Imported Upstream version 2.02.79
[platform/upstream/device-mapper.git] / lib / locking / locking_types.h
1 /*
2  * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.  
3  * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
4  *
5  * This file is part of LVM2.
6  *
7  * This copyrighted material is made available to anyone wishing to use,
8  * modify, copy, or redistribute it subject to the terms and conditions
9  * of the GNU Lesser General Public License v.2.1.
10  *
11  * You should have received a copy of the GNU Lesser General Public License
12  * along with this program; if not, write to the Free Software Foundation,
13  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
14  */
15
16 #include "metadata.h"
17 #include "config.h"
18
19 typedef int (*lock_resource_fn) (struct cmd_context * cmd, const char *resource,
20                                  uint32_t flags);
21 typedef int (*query_resource_fn) (const char *resource, int *mode);
22
23 typedef void (*fin_lock_fn) (void);
24 typedef void (*reset_lock_fn) (void);
25
26 #define LCK_PRE_MEMLOCK 0x00000001      /* Is memlock() needed before calls? */
27 #define LCK_CLUSTERED   0x00000002
28
29 struct locking_type {
30         uint32_t flags;
31         lock_resource_fn lock_resource;
32         query_resource_fn query_resource;
33
34         reset_lock_fn reset_locking;
35         fin_lock_fn fin_locking;
36 };
37
38 /*
39  * Locking types
40  */
41 int init_no_locking(struct locking_type *locking, struct cmd_context *cmd);
42
43 int init_readonly_locking(struct locking_type *locking, struct cmd_context *cmd);
44
45 int init_file_locking(struct locking_type *locking, struct cmd_context *cmd);
46
47 int init_external_locking(struct locking_type *locking, struct cmd_context *cmd);
48
49 int init_cluster_locking(struct locking_type *locking, struct cmd_context *cmd);