18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/* -*- mode: c; c-basic-offset: 8; -*-
38c2ecf20Sopenharmony_ci * vim: noexpandtab sw=8 ts=8 sts=0:
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * ocfs2_lockid.h
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Defines OCFS2 lockid bits.
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * Copyright (C) 2002, 2005 Oracle.  All rights reserved.
108c2ecf20Sopenharmony_ci */
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#ifndef OCFS2_LOCKID_H
138c2ecf20Sopenharmony_ci#define OCFS2_LOCKID_H
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci/* lock ids are made up in the following manner:
168c2ecf20Sopenharmony_ci * name[0]     --> type
178c2ecf20Sopenharmony_ci * name[1-6]   --> 6 pad characters, reserved for now
188c2ecf20Sopenharmony_ci * name[7-22]  --> block number, expressed in hex as 16 chars
198c2ecf20Sopenharmony_ci * name[23-30] --> i_generation, expressed in hex 8 chars
208c2ecf20Sopenharmony_ci * name[31]    --> '\0' */
218c2ecf20Sopenharmony_ci#define OCFS2_LOCK_ID_MAX_LEN  32
228c2ecf20Sopenharmony_ci#define OCFS2_LOCK_ID_PAD "000000"
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#define OCFS2_DENTRY_LOCK_INO_START 18
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cienum ocfs2_lock_type {
278c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_META = 0,
288c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_DATA,
298c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_SUPER,
308c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_RENAME,
318c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_RW,
328c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_DENTRY,
338c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_OPEN,
348c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_FLOCK,
358c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_QINFO,
368c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_NFS_SYNC,
378c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_ORPHAN_SCAN,
388c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_REFCOUNT,
398c2ecf20Sopenharmony_ci	OCFS2_LOCK_TYPE_TRIM_FS,
408c2ecf20Sopenharmony_ci	OCFS2_NUM_LOCK_TYPES
418c2ecf20Sopenharmony_ci};
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cistatic inline char ocfs2_lock_type_char(enum ocfs2_lock_type type)
448c2ecf20Sopenharmony_ci{
458c2ecf20Sopenharmony_ci	char c;
468c2ecf20Sopenharmony_ci	switch (type) {
478c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_META:
488c2ecf20Sopenharmony_ci			c = 'M';
498c2ecf20Sopenharmony_ci			break;
508c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_DATA:
518c2ecf20Sopenharmony_ci			c = 'D';
528c2ecf20Sopenharmony_ci			break;
538c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_SUPER:
548c2ecf20Sopenharmony_ci			c = 'S';
558c2ecf20Sopenharmony_ci			break;
568c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_RENAME:
578c2ecf20Sopenharmony_ci			c = 'R';
588c2ecf20Sopenharmony_ci			break;
598c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_RW:
608c2ecf20Sopenharmony_ci			c = 'W';
618c2ecf20Sopenharmony_ci			break;
628c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_DENTRY:
638c2ecf20Sopenharmony_ci			c = 'N';
648c2ecf20Sopenharmony_ci			break;
658c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_OPEN:
668c2ecf20Sopenharmony_ci			c = 'O';
678c2ecf20Sopenharmony_ci			break;
688c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_FLOCK:
698c2ecf20Sopenharmony_ci			c = 'F';
708c2ecf20Sopenharmony_ci			break;
718c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_QINFO:
728c2ecf20Sopenharmony_ci			c = 'Q';
738c2ecf20Sopenharmony_ci			break;
748c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_NFS_SYNC:
758c2ecf20Sopenharmony_ci			c = 'Y';
768c2ecf20Sopenharmony_ci			break;
778c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_ORPHAN_SCAN:
788c2ecf20Sopenharmony_ci			c = 'P';
798c2ecf20Sopenharmony_ci			break;
808c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_REFCOUNT:
818c2ecf20Sopenharmony_ci			c = 'T';
828c2ecf20Sopenharmony_ci			break;
838c2ecf20Sopenharmony_ci		case OCFS2_LOCK_TYPE_TRIM_FS:
848c2ecf20Sopenharmony_ci			c = 'I';
858c2ecf20Sopenharmony_ci			break;
868c2ecf20Sopenharmony_ci		default:
878c2ecf20Sopenharmony_ci			c = '\0';
888c2ecf20Sopenharmony_ci	}
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci	return c;
918c2ecf20Sopenharmony_ci}
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_cistatic char *ocfs2_lock_type_strings[] = {
948c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_META] = "Meta",
958c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_DATA] = "Data",
968c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_SUPER] = "Super",
978c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_RENAME] = "Rename",
988c2ecf20Sopenharmony_ci	/* Need to differntiate from [R]ename.. serializing writes is the
998c2ecf20Sopenharmony_ci	 * important job it does, anyway. */
1008c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_RW] = "Write/Read",
1018c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_DENTRY] = "Dentry",
1028c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_OPEN] = "Open",
1038c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_FLOCK] = "Flock",
1048c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_QINFO] = "Quota",
1058c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync",
1068c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan",
1078c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount",
1088c2ecf20Sopenharmony_ci	[OCFS2_LOCK_TYPE_TRIM_FS] = "TrimFs",
1098c2ecf20Sopenharmony_ci};
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_cistatic inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type type)
1128c2ecf20Sopenharmony_ci{
1138c2ecf20Sopenharmony_ci#ifdef __KERNEL__
1148c2ecf20Sopenharmony_ci	BUG_ON(type >= OCFS2_NUM_LOCK_TYPES);
1158c2ecf20Sopenharmony_ci#endif
1168c2ecf20Sopenharmony_ci	return ocfs2_lock_type_strings[type];
1178c2ecf20Sopenharmony_ci}
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci#endif  /* OCFS2_LOCKID_H */
120