162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ocfs2_lockid.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Defines OCFS2 lockid bits.
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (C) 2002, 2005 Oracle.  All rights reserved.
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef OCFS2_LOCKID_H
1162306a36Sopenharmony_ci#define OCFS2_LOCKID_H
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/* lock ids are made up in the following manner:
1462306a36Sopenharmony_ci * name[0]     --> type
1562306a36Sopenharmony_ci * name[1-6]   --> 6 pad characters, reserved for now
1662306a36Sopenharmony_ci * name[7-22]  --> block number, expressed in hex as 16 chars
1762306a36Sopenharmony_ci * name[23-30] --> i_generation, expressed in hex 8 chars
1862306a36Sopenharmony_ci * name[31]    --> '\0' */
1962306a36Sopenharmony_ci#define OCFS2_LOCK_ID_MAX_LEN  32
2062306a36Sopenharmony_ci#define OCFS2_LOCK_ID_PAD "000000"
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define OCFS2_DENTRY_LOCK_INO_START 18
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cienum ocfs2_lock_type {
2562306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_META = 0,
2662306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_DATA,
2762306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_SUPER,
2862306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_RENAME,
2962306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_RW,
3062306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_DENTRY,
3162306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_OPEN,
3262306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_FLOCK,
3362306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_QINFO,
3462306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_NFS_SYNC,
3562306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_ORPHAN_SCAN,
3662306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_REFCOUNT,
3762306a36Sopenharmony_ci	OCFS2_LOCK_TYPE_TRIM_FS,
3862306a36Sopenharmony_ci	OCFS2_NUM_LOCK_TYPES
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistatic inline char ocfs2_lock_type_char(enum ocfs2_lock_type type)
4262306a36Sopenharmony_ci{
4362306a36Sopenharmony_ci	char c;
4462306a36Sopenharmony_ci	switch (type) {
4562306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_META:
4662306a36Sopenharmony_ci			c = 'M';
4762306a36Sopenharmony_ci			break;
4862306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_DATA:
4962306a36Sopenharmony_ci			c = 'D';
5062306a36Sopenharmony_ci			break;
5162306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_SUPER:
5262306a36Sopenharmony_ci			c = 'S';
5362306a36Sopenharmony_ci			break;
5462306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_RENAME:
5562306a36Sopenharmony_ci			c = 'R';
5662306a36Sopenharmony_ci			break;
5762306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_RW:
5862306a36Sopenharmony_ci			c = 'W';
5962306a36Sopenharmony_ci			break;
6062306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_DENTRY:
6162306a36Sopenharmony_ci			c = 'N';
6262306a36Sopenharmony_ci			break;
6362306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_OPEN:
6462306a36Sopenharmony_ci			c = 'O';
6562306a36Sopenharmony_ci			break;
6662306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_FLOCK:
6762306a36Sopenharmony_ci			c = 'F';
6862306a36Sopenharmony_ci			break;
6962306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_QINFO:
7062306a36Sopenharmony_ci			c = 'Q';
7162306a36Sopenharmony_ci			break;
7262306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_NFS_SYNC:
7362306a36Sopenharmony_ci			c = 'Y';
7462306a36Sopenharmony_ci			break;
7562306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_ORPHAN_SCAN:
7662306a36Sopenharmony_ci			c = 'P';
7762306a36Sopenharmony_ci			break;
7862306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_REFCOUNT:
7962306a36Sopenharmony_ci			c = 'T';
8062306a36Sopenharmony_ci			break;
8162306a36Sopenharmony_ci		case OCFS2_LOCK_TYPE_TRIM_FS:
8262306a36Sopenharmony_ci			c = 'I';
8362306a36Sopenharmony_ci			break;
8462306a36Sopenharmony_ci		default:
8562306a36Sopenharmony_ci			c = '\0';
8662306a36Sopenharmony_ci	}
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	return c;
8962306a36Sopenharmony_ci}
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_cistatic char *ocfs2_lock_type_strings[] = {
9262306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_META] = "Meta",
9362306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_DATA] = "Data",
9462306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_SUPER] = "Super",
9562306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_RENAME] = "Rename",
9662306a36Sopenharmony_ci	/* Need to differntiate from [R]ename.. serializing writes is the
9762306a36Sopenharmony_ci	 * important job it does, anyway. */
9862306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_RW] = "Write/Read",
9962306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_DENTRY] = "Dentry",
10062306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_OPEN] = "Open",
10162306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_FLOCK] = "Flock",
10262306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_QINFO] = "Quota",
10362306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_NFS_SYNC] = "NFSSync",
10462306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_ORPHAN_SCAN] = "OrphanScan",
10562306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_REFCOUNT] = "Refcount",
10662306a36Sopenharmony_ci	[OCFS2_LOCK_TYPE_TRIM_FS] = "TrimFs",
10762306a36Sopenharmony_ci};
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_cistatic inline const char *ocfs2_lock_type_string(enum ocfs2_lock_type type)
11062306a36Sopenharmony_ci{
11162306a36Sopenharmony_ci#ifdef __KERNEL__
11262306a36Sopenharmony_ci	BUG_ON(type >= OCFS2_NUM_LOCK_TYPES);
11362306a36Sopenharmony_ci#endif
11462306a36Sopenharmony_ci	return ocfs2_lock_type_strings[type];
11562306a36Sopenharmony_ci}
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci#endif  /* OCFS2_LOCKID_H */
118