Root/fs/ocfs2/ocfs2_lockid.h

1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * ocfs2_lockid.h
5 *
6 * Defines OCFS2 lockid bits.
7 *
8 * Copyright (C) 2002, 2005 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; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public
21 * License along with this program; if not, write to the
22 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 * Boston, MA 021110-1307, USA.
24 */
25
26#ifndef OCFS2_LOCKID_H
27#define OCFS2_LOCKID_H
28
29/* lock ids are made up in the following manner:
30 * name[0] --> type
31 * name[1-6] --> 6 pad characters, reserved for now
32 * name[7-22] --> block number, expressed in hex as 16 chars
33 * name[23-30] --> i_generation, expressed in hex 8 chars
34 * name[31] --> '\0' */
35#define OCFS2_LOCK_ID_MAX_LEN 32
36#define OCFS2_LOCK_ID_PAD "000000"
37
38#define OCFS2_DENTRY_LOCK_INO_START 18
39
40enum ocfs2_lock_type {
41    OCFS2_LOCK_TYPE_META = 0,
42    OCFS2_LOCK_TYPE_DATA,
43    OCFS2_LOCK_TYPE_SUPER,
44    OCFS2_LOCK_TYPE_RENAME,
45    OCFS2_LOCK_TYPE_RW,
46    OCFS2_LOCK_TYPE_DENTRY,
47    OCFS2_LOCK_TYPE_OPEN,
48    OCFS2_LOCK_TYPE_FLOCK,
49    OCFS2_LOCK_TYPE_QINFO,
50    OCFS2_LOCK_TYPE_NFS_SYNC,
51    OCFS2_LOCK_TYPE_ORPHAN_SCAN,
52    OCFS2_LOCK_TYPE_REFCOUNT,
53    OCFS2_NUM_LOCK_TYPES
54};
55
56static inline char ocfs2_lock_type_char(enum ocfs2_lock_type type)
57{
58    char c;
59    switch (type) {
60        case OCFS2_LOCK_TYPE_META:
61            c = 'M';
62            break;
63        case OCFS2_LOCK_TYPE_DATA:
64            c = 'D';
65            break;
66        case OCFS2_LOCK_TYPE_SUPER:
67            c = 'S';
68            break;
69        case OCFS2_LOCK_TYPE_RENAME:
70            c = 'R';
71            break;
72        case OCFS2_LOCK_TYPE_RW:
73            c = 'W';
74            break;
75        case OCFS2_LOCK_TYPE_DENTRY:
76            c = 'N';
77            break;
78        case OCFS2_LOCK_TYPE_OPEN:
79            c = 'O';
80            break;
81        case OCFS2_LOCK_TYPE_FLOCK:
82            c = 'F';
83            break;
84        case OCFS2_LOCK_TYPE_QINFO:
85            c = 'Q';
86            break;
87        case OCFS2_LOCK_TYPE_NFS_SYNC:
88            c = 'Y';
89            break;
90        case OCFS2_LOCK_TYPE_ORPHAN_SCAN:
91            c = 'P';
92            break;
93        case OCFS2_LOCK_TYPE_REFCOUNT:
94            c = 'T';
95            break;
96        default:
97            c = '\0';
98    }
99
100    return c;
101}
102
103static char *ocfs2_lock_type_strings[] = {
104    [OCFS2_LOCK_TYPE_META] = "Meta",
105    [OCFS2_LOCK_TYPE_DATA] = "Data",
106    [OCFS2_LOCK_TYPE_SUPER] = "Super",
107    [OCFS2_LOCK_TYPE_RENAME] = "Rename",
108    /* Need to differntiate from [R]ename.. serializing writes is the
109     * important job it does, anyway. */
110    [OCFS2_LOCK_TYPE_RW] = "Write/Read",
111    [OCFS2_LOCK_TYPE_DENTRY] = "Dentry",
112    [OCFS2_LOCK_TYPE_OPEN] = "Open",
113    [OCFS2_LOCK_TYPE_FLOCK] = "Flock",
114    [OCFS2_LOCK_TYPE_QINFO] = "Quota",
115    [OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync",
116    [OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan",
117    [OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount",
118};
119
120static inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type type)
121{
122#ifdef __KERNEL__
123    BUG_ON(type >= OCFS2_NUM_LOCK_TYPES);
124#endif
125    return ocfs2_lock_type_strings[type];
126}
127
128#endif /* OCFS2_LOCKID_H */
129

Archive Download this file



interactive