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 */ 33 struct 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 __user *castparam; 43 void __user *castaddr; 44 void __user *bastparam; 45 void __user *bastaddr; 46 struct dlm_lksb __user *lksb; 47 char lvb[DLM_USER_LVB_LEN]; 48 char name[0]; 49 }; 50 51 struct dlm_lspace_params { 52 __u32 flags; 53 __u32 minor; 54 char name[0]; 55 }; 56 57 struct dlm_purge_params { 58 __u32 nodeid; 59 __u32 pid; 60 }; 61 62 struct 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 75 struct 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 82 struct dlm_lock_result { 83 __u32 version[3]; 84 __u32 length; 85 void __user * user_astaddr; 86 void __user * user_astparam; 87 struct dlm_lksb __user * 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 109 110