2019-05-24 13:04:05 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2021-05-07 04:06:44 +03:00
/*
2005-12-16 01:31:24 +03:00
* ocfs2_lockid . h
*
* Defines OCFS2 lockid bits .
*
* Copyright ( C ) 2002 , 2005 Oracle . All rights reserved .
*/
# ifndef OCFS2_LOCKID_H
# define OCFS2_LOCKID_H
/* lock ids are made up in the following manner:
* name [ 0 ] - - > type
* name [ 1 - 6 ] - - > 6 pad characters , reserved for now
* name [ 7 - 22 ] - - > block number , expressed in hex as 16 chars
* name [ 23 - 30 ] - - > i_generation , expressed in hex 8 chars
* name [ 31 ] - - > ' \0 ' */
# define OCFS2_LOCK_ID_MAX_LEN 32
# define OCFS2_LOCK_ID_PAD "000000"
2006-09-09 01:14:34 +04:00
# define OCFS2_DENTRY_LOCK_INO_START 18
2005-12-16 01:31:24 +03:00
enum ocfs2_lock_type {
OCFS2_LOCK_TYPE_META = 0 ,
OCFS2_LOCK_TYPE_DATA ,
OCFS2_LOCK_TYPE_SUPER ,
OCFS2_LOCK_TYPE_RENAME ,
OCFS2_LOCK_TYPE_RW ,
2006-09-09 01:14:34 +04:00
OCFS2_LOCK_TYPE_DENTRY ,
2007-03-21 02:01:38 +03:00
OCFS2_LOCK_TYPE_OPEN ,
2007-12-21 03:43:10 +03:00
OCFS2_LOCK_TYPE_FLOCK ,
2008-08-25 21:56:50 +04:00
OCFS2_LOCK_TYPE_QINFO ,
2009-03-06 16:29:10 +03:00
OCFS2_LOCK_TYPE_NFS_SYNC ,
2009-06-04 04:02:55 +04:00
OCFS2_LOCK_TYPE_ORPHAN_SCAN ,
2009-08-18 07:19:58 +04:00
OCFS2_LOCK_TYPE_REFCOUNT ,
2018-02-01 03:15:10 +03:00
OCFS2_LOCK_TYPE_TRIM_FS ,
2005-12-16 01:31:24 +03:00
OCFS2_NUM_LOCK_TYPES
} ;
static inline char ocfs2_lock_type_char ( enum ocfs2_lock_type type )
{
char c ;
switch ( type ) {
case OCFS2_LOCK_TYPE_META :
c = ' M ' ;
break ;
case OCFS2_LOCK_TYPE_DATA :
c = ' D ' ;
break ;
case OCFS2_LOCK_TYPE_SUPER :
c = ' S ' ;
break ;
case OCFS2_LOCK_TYPE_RENAME :
c = ' R ' ;
break ;
case OCFS2_LOCK_TYPE_RW :
c = ' W ' ;
break ;
2006-09-09 01:14:34 +04:00
case OCFS2_LOCK_TYPE_DENTRY :
c = ' N ' ;
break ;
2007-03-21 02:01:38 +03:00
case OCFS2_LOCK_TYPE_OPEN :
c = ' O ' ;
break ;
2007-12-21 03:43:10 +03:00
case OCFS2_LOCK_TYPE_FLOCK :
c = ' F ' ;
break ;
2008-08-25 21:56:50 +04:00
case OCFS2_LOCK_TYPE_QINFO :
c = ' Q ' ;
break ;
2009-03-06 16:29:10 +03:00
case OCFS2_LOCK_TYPE_NFS_SYNC :
c = ' Y ' ;
break ;
2009-06-04 04:02:55 +04:00
case OCFS2_LOCK_TYPE_ORPHAN_SCAN :
c = ' P ' ;
break ;
2009-08-18 07:19:58 +04:00
case OCFS2_LOCK_TYPE_REFCOUNT :
c = ' T ' ;
break ;
2018-02-01 03:15:10 +03:00
case OCFS2_LOCK_TYPE_TRIM_FS :
c = ' I ' ;
break ;
2005-12-16 01:31:24 +03:00
default :
c = ' \0 ' ;
}
return c ;
}
2006-09-09 01:14:34 +04:00
static char * ocfs2_lock_type_strings [ ] = {
[ OCFS2_LOCK_TYPE_META ] = " Meta " ,
[ OCFS2_LOCK_TYPE_DATA ] = " Data " ,
[ OCFS2_LOCK_TYPE_SUPER ] = " Super " ,
[ OCFS2_LOCK_TYPE_RENAME ] = " Rename " ,
/* Need to differntiate from [R]ename.. serializing writes is the
* important job it does , anyway . */
[ OCFS2_LOCK_TYPE_RW ] = " Write/Read " ,
[ OCFS2_LOCK_TYPE_DENTRY ] = " Dentry " ,
2007-03-21 02:01:38 +03:00
[ OCFS2_LOCK_TYPE_OPEN ] = " Open " ,
2007-12-21 03:43:10 +03:00
[ OCFS2_LOCK_TYPE_FLOCK ] = " Flock " ,
2008-08-25 21:56:50 +04:00
[ OCFS2_LOCK_TYPE_QINFO ] = " Quota " ,
2009-08-20 20:26:52 +04:00
[ OCFS2_LOCK_TYPE_NFS_SYNC ] = " NFSSync " ,
2009-06-04 04:02:55 +04:00
[ OCFS2_LOCK_TYPE_ORPHAN_SCAN ] = " OrphanScan " ,
2009-08-18 07:19:58 +04:00
[ OCFS2_LOCK_TYPE_REFCOUNT ] = " Refcount " ,
2018-02-01 03:15:10 +03:00
[ OCFS2_LOCK_TYPE_TRIM_FS ] = " TrimFs " ,
2006-09-09 01:14:34 +04:00
} ;
static inline const char * ocfs2_lock_type_string ( enum ocfs2_lock_type type )
{
# ifdef __KERNEL__
2008-03-05 03:09:39 +03:00
BUG_ON ( type > = OCFS2_NUM_LOCK_TYPES ) ;
2006-09-09 01:14:34 +04:00
# endif
return ocfs2_lock_type_strings [ type ] ;
}
2005-12-16 01:31:24 +03:00
# endif /* OCFS2_LOCKID_H */