Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * ocfs2_lockid.h
0004  *
0005  * Defines OCFS2 lockid bits.
0006  *
0007  * Copyright (C) 2002, 2005 Oracle.  All rights reserved.
0008  */
0009 
0010 #ifndef OCFS2_LOCKID_H
0011 #define OCFS2_LOCKID_H
0012 
0013 /* lock ids are made up in the following manner:
0014  * name[0]     --> type
0015  * name[1-6]   --> 6 pad characters, reserved for now
0016  * name[7-22]  --> block number, expressed in hex as 16 chars
0017  * name[23-30] --> i_generation, expressed in hex 8 chars
0018  * name[31]    --> '\0' */
0019 #define OCFS2_LOCK_ID_MAX_LEN  32
0020 #define OCFS2_LOCK_ID_PAD "000000"
0021 
0022 #define OCFS2_DENTRY_LOCK_INO_START 18
0023 
0024 enum ocfs2_lock_type {
0025     OCFS2_LOCK_TYPE_META = 0,
0026     OCFS2_LOCK_TYPE_DATA,
0027     OCFS2_LOCK_TYPE_SUPER,
0028     OCFS2_LOCK_TYPE_RENAME,
0029     OCFS2_LOCK_TYPE_RW,
0030     OCFS2_LOCK_TYPE_DENTRY,
0031     OCFS2_LOCK_TYPE_OPEN,
0032     OCFS2_LOCK_TYPE_FLOCK,
0033     OCFS2_LOCK_TYPE_QINFO,
0034     OCFS2_LOCK_TYPE_NFS_SYNC,
0035     OCFS2_LOCK_TYPE_ORPHAN_SCAN,
0036     OCFS2_LOCK_TYPE_REFCOUNT,
0037     OCFS2_LOCK_TYPE_TRIM_FS,
0038     OCFS2_NUM_LOCK_TYPES
0039 };
0040 
0041 static inline char ocfs2_lock_type_char(enum ocfs2_lock_type type)
0042 {
0043     char c;
0044     switch (type) {
0045         case OCFS2_LOCK_TYPE_META:
0046             c = 'M';
0047             break;
0048         case OCFS2_LOCK_TYPE_DATA:
0049             c = 'D';
0050             break;
0051         case OCFS2_LOCK_TYPE_SUPER:
0052             c = 'S';
0053             break;
0054         case OCFS2_LOCK_TYPE_RENAME:
0055             c = 'R';
0056             break;
0057         case OCFS2_LOCK_TYPE_RW:
0058             c = 'W';
0059             break;
0060         case OCFS2_LOCK_TYPE_DENTRY:
0061             c = 'N';
0062             break;
0063         case OCFS2_LOCK_TYPE_OPEN:
0064             c = 'O';
0065             break;
0066         case OCFS2_LOCK_TYPE_FLOCK:
0067             c = 'F';
0068             break;
0069         case OCFS2_LOCK_TYPE_QINFO:
0070             c = 'Q';
0071             break;
0072         case OCFS2_LOCK_TYPE_NFS_SYNC:
0073             c = 'Y';
0074             break;
0075         case OCFS2_LOCK_TYPE_ORPHAN_SCAN:
0076             c = 'P';
0077             break;
0078         case OCFS2_LOCK_TYPE_REFCOUNT:
0079             c = 'T';
0080             break;
0081         case OCFS2_LOCK_TYPE_TRIM_FS:
0082             c = 'I';
0083             break;
0084         default:
0085             c = '\0';
0086     }
0087 
0088     return c;
0089 }
0090 
0091 static char *ocfs2_lock_type_strings[] = {
0092     [OCFS2_LOCK_TYPE_META] = "Meta",
0093     [OCFS2_LOCK_TYPE_DATA] = "Data",
0094     [OCFS2_LOCK_TYPE_SUPER] = "Super",
0095     [OCFS2_LOCK_TYPE_RENAME] = "Rename",
0096     /* Need to differntiate from [R]ename.. serializing writes is the
0097      * important job it does, anyway. */
0098     [OCFS2_LOCK_TYPE_RW] = "Write/Read",
0099     [OCFS2_LOCK_TYPE_DENTRY] = "Dentry",
0100     [OCFS2_LOCK_TYPE_OPEN] = "Open",
0101     [OCFS2_LOCK_TYPE_FLOCK] = "Flock",
0102     [OCFS2_LOCK_TYPE_QINFO] = "Quota",
0103     [OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync",
0104     [OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan",
0105     [OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount",
0106     [OCFS2_LOCK_TYPE_TRIM_FS] = "TrimFs",
0107 };
0108 
0109 static inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type type)
0110 {
0111 #ifdef __KERNEL__
0112     BUG_ON(type >= OCFS2_NUM_LOCK_TYPES);
0113 #endif
0114     return ocfs2_lock_type_strings[type];
0115 }
0116 
0117 #endif  /* OCFS2_LOCKID_H */