1 /* SPDX-License-Identifier: GPL-2.0-or-later * !! 1 /* -*- mode: c; c-basic-offset: 8; -*- 2 /* !! 2 * vim: noexpandtab sw=8 ts=8 sts=0: >> 3 * 3 * ocfs2_lockid.h 4 * ocfs2_lockid.h 4 * 5 * 5 * Defines OCFS2 lockid bits. 6 * Defines OCFS2 lockid bits. 6 * 7 * 7 * Copyright (C) 2002, 2005 Oracle. All right 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. 8 */ 24 */ 9 25 10 #ifndef OCFS2_LOCKID_H 26 #ifndef OCFS2_LOCKID_H 11 #define OCFS2_LOCKID_H 27 #define OCFS2_LOCKID_H 12 28 13 /* lock ids are made up in the following manne 29 /* lock ids are made up in the following manner: 14 * name[0] --> type 30 * name[0] --> type 15 * name[1-6] --> 6 pad characters, reserved 31 * name[1-6] --> 6 pad characters, reserved for now 16 * name[7-22] --> block number, expressed in 32 * name[7-22] --> block number, expressed in hex as 16 chars 17 * name[23-30] --> i_generation, expressed in 33 * name[23-30] --> i_generation, expressed in hex 8 chars 18 * name[31] --> '\0' */ 34 * name[31] --> '\0' */ 19 #define OCFS2_LOCK_ID_MAX_LEN 32 35 #define OCFS2_LOCK_ID_MAX_LEN 32 20 #define OCFS2_LOCK_ID_PAD "000000" 36 #define OCFS2_LOCK_ID_PAD "000000" 21 37 22 #define OCFS2_DENTRY_LOCK_INO_START 18 38 #define OCFS2_DENTRY_LOCK_INO_START 18 23 39 24 enum ocfs2_lock_type { 40 enum ocfs2_lock_type { 25 OCFS2_LOCK_TYPE_META = 0, 41 OCFS2_LOCK_TYPE_META = 0, 26 OCFS2_LOCK_TYPE_DATA, 42 OCFS2_LOCK_TYPE_DATA, 27 OCFS2_LOCK_TYPE_SUPER, 43 OCFS2_LOCK_TYPE_SUPER, 28 OCFS2_LOCK_TYPE_RENAME, 44 OCFS2_LOCK_TYPE_RENAME, 29 OCFS2_LOCK_TYPE_RW, 45 OCFS2_LOCK_TYPE_RW, 30 OCFS2_LOCK_TYPE_DENTRY, 46 OCFS2_LOCK_TYPE_DENTRY, 31 OCFS2_LOCK_TYPE_OPEN, 47 OCFS2_LOCK_TYPE_OPEN, 32 OCFS2_LOCK_TYPE_FLOCK, 48 OCFS2_LOCK_TYPE_FLOCK, 33 OCFS2_LOCK_TYPE_QINFO, 49 OCFS2_LOCK_TYPE_QINFO, 34 OCFS2_LOCK_TYPE_NFS_SYNC, 50 OCFS2_LOCK_TYPE_NFS_SYNC, 35 OCFS2_LOCK_TYPE_ORPHAN_SCAN, 51 OCFS2_LOCK_TYPE_ORPHAN_SCAN, 36 OCFS2_LOCK_TYPE_REFCOUNT, 52 OCFS2_LOCK_TYPE_REFCOUNT, 37 OCFS2_LOCK_TYPE_TRIM_FS, 53 OCFS2_LOCK_TYPE_TRIM_FS, 38 OCFS2_NUM_LOCK_TYPES 54 OCFS2_NUM_LOCK_TYPES 39 }; 55 }; 40 56 41 static inline char ocfs2_lock_type_char(enum o 57 static inline char ocfs2_lock_type_char(enum ocfs2_lock_type type) 42 { 58 { 43 char c; 59 char c; 44 switch (type) { 60 switch (type) { 45 case OCFS2_LOCK_TYPE_META: 61 case OCFS2_LOCK_TYPE_META: 46 c = 'M'; 62 c = 'M'; 47 break; 63 break; 48 case OCFS2_LOCK_TYPE_DATA: 64 case OCFS2_LOCK_TYPE_DATA: 49 c = 'D'; 65 c = 'D'; 50 break; 66 break; 51 case OCFS2_LOCK_TYPE_SUPER: 67 case OCFS2_LOCK_TYPE_SUPER: 52 c = 'S'; 68 c = 'S'; 53 break; 69 break; 54 case OCFS2_LOCK_TYPE_RENAME: 70 case OCFS2_LOCK_TYPE_RENAME: 55 c = 'R'; 71 c = 'R'; 56 break; 72 break; 57 case OCFS2_LOCK_TYPE_RW: 73 case OCFS2_LOCK_TYPE_RW: 58 c = 'W'; 74 c = 'W'; 59 break; 75 break; 60 case OCFS2_LOCK_TYPE_DENTRY: 76 case OCFS2_LOCK_TYPE_DENTRY: 61 c = 'N'; 77 c = 'N'; 62 break; 78 break; 63 case OCFS2_LOCK_TYPE_OPEN: 79 case OCFS2_LOCK_TYPE_OPEN: 64 c = 'O'; 80 c = 'O'; 65 break; 81 break; 66 case OCFS2_LOCK_TYPE_FLOCK: 82 case OCFS2_LOCK_TYPE_FLOCK: 67 c = 'F'; 83 c = 'F'; 68 break; 84 break; 69 case OCFS2_LOCK_TYPE_QINFO: 85 case OCFS2_LOCK_TYPE_QINFO: 70 c = 'Q'; 86 c = 'Q'; 71 break; 87 break; 72 case OCFS2_LOCK_TYPE_NFS_SYNC: 88 case OCFS2_LOCK_TYPE_NFS_SYNC: 73 c = 'Y'; 89 c = 'Y'; 74 break; 90 break; 75 case OCFS2_LOCK_TYPE_ORPHAN_SC 91 case OCFS2_LOCK_TYPE_ORPHAN_SCAN: 76 c = 'P'; 92 c = 'P'; 77 break; 93 break; 78 case OCFS2_LOCK_TYPE_REFCOUNT: 94 case OCFS2_LOCK_TYPE_REFCOUNT: 79 c = 'T'; 95 c = 'T'; 80 break; 96 break; 81 case OCFS2_LOCK_TYPE_TRIM_FS: 97 case OCFS2_LOCK_TYPE_TRIM_FS: 82 c = 'I'; 98 c = 'I'; 83 break; 99 break; 84 default: 100 default: 85 c = '\0'; 101 c = '\0'; 86 } 102 } 87 103 88 return c; 104 return c; 89 } 105 } 90 106 91 static char *ocfs2_lock_type_strings[] = { 107 static char *ocfs2_lock_type_strings[] = { 92 [OCFS2_LOCK_TYPE_META] = "Meta", 108 [OCFS2_LOCK_TYPE_META] = "Meta", 93 [OCFS2_LOCK_TYPE_DATA] = "Data", 109 [OCFS2_LOCK_TYPE_DATA] = "Data", 94 [OCFS2_LOCK_TYPE_SUPER] = "Super", 110 [OCFS2_LOCK_TYPE_SUPER] = "Super", 95 [OCFS2_LOCK_TYPE_RENAME] = "Rename", 111 [OCFS2_LOCK_TYPE_RENAME] = "Rename", 96 /* Need to differntiate from [R]ename. 112 /* Need to differntiate from [R]ename.. serializing writes is the 97 * important job it does, anyway. */ 113 * important job it does, anyway. */ 98 [OCFS2_LOCK_TYPE_RW] = "Write/Read", 114 [OCFS2_LOCK_TYPE_RW] = "Write/Read", 99 [OCFS2_LOCK_TYPE_DENTRY] = "Dentry", 115 [OCFS2_LOCK_TYPE_DENTRY] = "Dentry", 100 [OCFS2_LOCK_TYPE_OPEN] = "Open", 116 [OCFS2_LOCK_TYPE_OPEN] = "Open", 101 [OCFS2_LOCK_TYPE_FLOCK] = "Flock", 117 [OCFS2_LOCK_TYPE_FLOCK] = "Flock", 102 [OCFS2_LOCK_TYPE_QINFO] = "Quota", 118 [OCFS2_LOCK_TYPE_QINFO] = "Quota", 103 [OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync" 119 [OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync", 104 [OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "Orpha 120 [OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan", 105 [OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount 121 [OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount", 106 [OCFS2_LOCK_TYPE_TRIM_FS] = "TrimFs", 122 [OCFS2_LOCK_TYPE_TRIM_FS] = "TrimFs", 107 }; 123 }; 108 124 109 static inline const char *ocfs2_lock_type_stri 125 static inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type type) 110 { 126 { 111 #ifdef __KERNEL__ 127 #ifdef __KERNEL__ 112 BUG_ON(type >= OCFS2_NUM_LOCK_TYPES); 128 BUG_ON(type >= OCFS2_NUM_LOCK_TYPES); 113 #endif 129 #endif 114 return ocfs2_lock_type_strings[type]; 130 return ocfs2_lock_type_strings[type]; 115 } 131 } 116 132 117 #endif /* OCFS2_LOCKID_H */ 133 #endif /* OCFS2_LOCKID_H */ 118 134
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.