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 40 enum 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_LOCK_TYPE_TRIM_FS, 54 OCFS2_NUM_LOCK_TYPES 55 }; 56 57 static inline char ocfs2_lock_type_char(enum ocfs2_lock_type type) 58 { 59 char c; 60 switch (type) { 61 case OCFS2_LOCK_TYPE_META: 62 c = 'M'; 63 break; 64 case OCFS2_LOCK_TYPE_DATA: 65 c = 'D'; 66 break; 67 case OCFS2_LOCK_TYPE_SUPER: 68 c = 'S'; 69 break; 70 case OCFS2_LOCK_TYPE_RENAME: 71 c = 'R'; 72 break; 73 case OCFS2_LOCK_TYPE_RW: 74 c = 'W'; 75 break; 76 case OCFS2_LOCK_TYPE_DENTRY: 77 c = 'N'; 78 break; 79 case OCFS2_LOCK_TYPE_OPEN: 80 c = 'O'; 81 break; 82 case OCFS2_LOCK_TYPE_FLOCK: 83 c = 'F'; 84 break; 85 case OCFS2_LOCK_TYPE_QINFO: 86 c = 'Q'; 87 break; 88 case OCFS2_LOCK_TYPE_NFS_SYNC: 89 c = 'Y'; 90 break; 91 case OCFS2_LOCK_TYPE_ORPHAN_SCAN: 92 c = 'P'; 93 break; 94 case OCFS2_LOCK_TYPE_REFCOUNT: 95 c = 'T'; 96 break; 97 case OCFS2_LOCK_TYPE_TRIM_FS: 98 c = 'I'; 99 break; 100 default: 101 c = '\0'; 102 } 103 104 return c; 105 } 106 107 static char *ocfs2_lock_type_strings[] = { 108 [OCFS2_LOCK_TYPE_META] = "Meta", 109 [OCFS2_LOCK_TYPE_DATA] = "Data", 110 [OCFS2_LOCK_TYPE_SUPER] = "Super", 111 [OCFS2_LOCK_TYPE_RENAME] = "Rename", 112 /* Need to differntiate from [R]ename.. serializing writes is the 113 * important job it does, anyway. */ 114 [OCFS2_LOCK_TYPE_RW] = "Write/Read", 115 [OCFS2_LOCK_TYPE_DENTRY] = "Dentry", 116 [OCFS2_LOCK_TYPE_OPEN] = "Open", 117 [OCFS2_LOCK_TYPE_FLOCK] = "Flock", 118 [OCFS2_LOCK_TYPE_QINFO] = "Quota", 119 [OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync", 120 [OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan", 121 [OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount", 122 [OCFS2_LOCK_TYPE_TRIM_FS] = "TrimFs", 123 }; 124 125 static inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type type) 126 { 127 #ifdef __KERNEL__ 128 BUG_ON(type >= OCFS2_NUM_LOCK_TYPES); 129 #endif 130 return ocfs2_lock_type_strings[type]; 131 } 132 133 #endif /* OCFS2_LOCKID_H */ 134