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