]>
Commit | Line | Data |
---|---|---|
328970de | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
fa60ce2c | 2 | /* |
ccd979bd MF |
3 | * ocfs2_lockid.h |
4 | * | |
5 | * Defines OCFS2 lockid bits. | |
6 | * | |
7 | * Copyright (C) 2002, 2005 Oracle. All rights reserved. | |
ccd979bd MF |
8 | */ |
9 | ||
10 | #ifndef OCFS2_LOCKID_H | |
11 | #define OCFS2_LOCKID_H | |
12 | ||
13 | /* lock ids are made up in the following manner: | |
14 | * name[0] --> type | |
15 | * name[1-6] --> 6 pad characters, reserved for now | |
16 | * name[7-22] --> block number, expressed in hex as 16 chars | |
17 | * name[23-30] --> i_generation, expressed in hex 8 chars | |
18 | * name[31] --> '\0' */ | |
19 | #define OCFS2_LOCK_ID_MAX_LEN 32 | |
20 | #define OCFS2_LOCK_ID_PAD "000000" | |
21 | ||
d680efe9 MF |
22 | #define OCFS2_DENTRY_LOCK_INO_START 18 |
23 | ||
ccd979bd MF |
24 | enum ocfs2_lock_type { |
25 | OCFS2_LOCK_TYPE_META = 0, | |
26 | OCFS2_LOCK_TYPE_DATA, | |
27 | OCFS2_LOCK_TYPE_SUPER, | |
28 | OCFS2_LOCK_TYPE_RENAME, | |
29 | OCFS2_LOCK_TYPE_RW, | |
d680efe9 | 30 | OCFS2_LOCK_TYPE_DENTRY, |
50008630 | 31 | OCFS2_LOCK_TYPE_OPEN, |
cf8e06f1 | 32 | OCFS2_LOCK_TYPE_FLOCK, |
9e33d69f | 33 | OCFS2_LOCK_TYPE_QINFO, |
6ca497a8 | 34 | OCFS2_LOCK_TYPE_NFS_SYNC, |
83273932 | 35 | OCFS2_LOCK_TYPE_ORPHAN_SCAN, |
8dec98ed | 36 | OCFS2_LOCK_TYPE_REFCOUNT, |
4882abeb | 37 | OCFS2_LOCK_TYPE_TRIM_FS, |
ccd979bd MF |
38 | OCFS2_NUM_LOCK_TYPES |
39 | }; | |
40 | ||
41 | static inline char ocfs2_lock_type_char(enum ocfs2_lock_type type) | |
42 | { | |
43 | char c; | |
44 | switch (type) { | |
45 | case OCFS2_LOCK_TYPE_META: | |
46 | c = 'M'; | |
47 | break; | |
48 | case OCFS2_LOCK_TYPE_DATA: | |
49 | c = 'D'; | |
50 | break; | |
51 | case OCFS2_LOCK_TYPE_SUPER: | |
52 | c = 'S'; | |
53 | break; | |
54 | case OCFS2_LOCK_TYPE_RENAME: | |
55 | c = 'R'; | |
56 | break; | |
57 | case OCFS2_LOCK_TYPE_RW: | |
58 | c = 'W'; | |
59 | break; | |
d680efe9 MF |
60 | case OCFS2_LOCK_TYPE_DENTRY: |
61 | c = 'N'; | |
62 | break; | |
50008630 TY |
63 | case OCFS2_LOCK_TYPE_OPEN: |
64 | c = 'O'; | |
65 | break; | |
cf8e06f1 MF |
66 | case OCFS2_LOCK_TYPE_FLOCK: |
67 | c = 'F'; | |
68 | break; | |
9e33d69f JK |
69 | case OCFS2_LOCK_TYPE_QINFO: |
70 | c = 'Q'; | |
71 | break; | |
6ca497a8 | 72 | case OCFS2_LOCK_TYPE_NFS_SYNC: |
73 | c = 'Y'; | |
74 | break; | |
83273932 SE |
75 | case OCFS2_LOCK_TYPE_ORPHAN_SCAN: |
76 | c = 'P'; | |
77 | break; | |
8dec98ed TM |
78 | case OCFS2_LOCK_TYPE_REFCOUNT: |
79 | c = 'T'; | |
80 | break; | |
4882abeb GH |
81 | case OCFS2_LOCK_TYPE_TRIM_FS: |
82 | c = 'I'; | |
83 | break; | |
ccd979bd MF |
84 | default: |
85 | c = '\0'; | |
86 | } | |
87 | ||
88 | return c; | |
89 | } | |
90 | ||
d680efe9 MF |
91 | static char *ocfs2_lock_type_strings[] = { |
92 | [OCFS2_LOCK_TYPE_META] = "Meta", | |
93 | [OCFS2_LOCK_TYPE_DATA] = "Data", | |
94 | [OCFS2_LOCK_TYPE_SUPER] = "Super", | |
95 | [OCFS2_LOCK_TYPE_RENAME] = "Rename", | |
96 | /* Need to differntiate from [R]ename.. serializing writes is the | |
97 | * important job it does, anyway. */ | |
98 | [OCFS2_LOCK_TYPE_RW] = "Write/Read", | |
99 | [OCFS2_LOCK_TYPE_DENTRY] = "Dentry", | |
50008630 | 100 | [OCFS2_LOCK_TYPE_OPEN] = "Open", |
cf8e06f1 | 101 | [OCFS2_LOCK_TYPE_FLOCK] = "Flock", |
9e33d69f | 102 | [OCFS2_LOCK_TYPE_QINFO] = "Quota", |
a8b88d3d | 103 | [OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync", |
83273932 | 104 | [OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan", |
8dec98ed | 105 | [OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount", |
4882abeb | 106 | [OCFS2_LOCK_TYPE_TRIM_FS] = "TrimFs", |
d680efe9 MF |
107 | }; |
108 | ||
109 | static inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type type) | |
110 | { | |
111 | #ifdef __KERNEL__ | |
8f318311 | 112 | BUG_ON(type >= OCFS2_NUM_LOCK_TYPES); |
d680efe9 MF |
113 | #endif |
114 | return ocfs2_lock_type_strings[type]; | |
115 | } | |
116 | ||
ccd979bd | 117 | #endif /* OCFS2_LOCKID_H */ |