master
  1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2/******************************************************************************
  3*******************************************************************************
  4**
  5**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
  6**  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
  7**
  8**  This copyrighted material is made available to anyone wishing to use,
  9**  modify, copy, or redistribute it subject to the terms and conditions
 10**  of the GNU General Public License v.2.
 11**
 12*******************************************************************************
 13******************************************************************************/
 14
 15#ifndef _LINUX_DLM_DEVICE_H
 16#define _LINUX_DLM_DEVICE_H
 17
 18/* This is the device interface for dlm, most users will use a library
 19 * interface.
 20 */
 21
 22#include <linux/dlm.h>
 23#include <linux/types.h>
 24
 25#define DLM_USER_LVB_LEN	32
 26
 27/* Version of the device interface */
 28#define DLM_DEVICE_VERSION_MAJOR 6
 29#define DLM_DEVICE_VERSION_MINOR 0
 30#define DLM_DEVICE_VERSION_PATCH 2
 31
 32/* struct passed to the lock write */
 33struct dlm_lock_params {
 34	__u8 mode;
 35	__u8 namelen;
 36	__u16 unused;
 37	__u32 flags;
 38	__u32 lkid;
 39	__u32 parent;
 40	__u64 xid;
 41	__u64 timeout;
 42	void *castparam;
 43	void *castaddr;
 44	void *bastparam;
 45	void *bastaddr;
 46	struct dlm_lksb *lksb;
 47	char lvb[DLM_USER_LVB_LEN];
 48	char name[];
 49};
 50
 51struct dlm_lspace_params {
 52	__u32 flags;
 53	__u32 minor;
 54	char name[];
 55};
 56
 57struct dlm_purge_params {
 58	__u32 nodeid;
 59	__u32 pid;
 60};
 61
 62struct dlm_write_request {
 63	__u32 version[3];
 64	__u8 cmd;
 65	__u8 is64bit;
 66	__u8 unused[2];
 67
 68	union  {
 69		struct dlm_lock_params   lock;
 70		struct dlm_lspace_params lspace;
 71		struct dlm_purge_params  purge;
 72	} i;
 73};
 74
 75struct dlm_device_version {
 76	__u32 version[3];
 77};
 78
 79/* struct read from the "device" fd,
 80   consists mainly of userspace pointers for the library to use */
 81
 82struct dlm_lock_result {
 83	__u32 version[3];
 84	__u32 length;
 85	void * user_astaddr;
 86	void * user_astparam;
 87	struct dlm_lksb * user_lksb;
 88	struct dlm_lksb lksb;
 89	__u8 bast_mode;
 90	__u8 unused[3];
 91	/* Offsets may be zero if no data is present */
 92	__u32 lvb_offset;
 93};
 94
 95/* Commands passed to the device */
 96#define DLM_USER_LOCK         1
 97#define DLM_USER_UNLOCK       2
 98#define DLM_USER_QUERY        3
 99#define DLM_USER_CREATE_LOCKSPACE  4
100#define DLM_USER_REMOVE_LOCKSPACE  5
101#define DLM_USER_PURGE        6
102#define DLM_USER_DEADLOCK     7
103
104/* Lockspace flags */
105#define DLM_USER_LSFLG_AUTOFREE   1
106#define DLM_USER_LSFLG_FORCEFREE  2
107
108#endif