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 /* This is the device interface for dlm, most users will use a library 15 * interface. 16 */ 17 18 #define DLM_USER_LVB_LEN 32 19 20 /* Version of the device interface */ 21 #define DLM_DEVICE_VERSION_MAJOR 6 22 #define DLM_DEVICE_VERSION_MINOR 0 23 #define DLM_DEVICE_VERSION_PATCH 0 24 25 /* struct passed to the lock write */ 26 struct dlm_lock_params { 27 __u8 mode; 28 __u8 namelen; 29 __u16 unused; 30 __u32 flags; 31 __u32 lkid; 32 __u32 parent; 33 __u64 xid; 34 __u64 timeout; 35 void *castparam; 36 void *castaddr; 37 void *bastparam; 38 void *bastaddr; 39 struct dlm_lksb *lksb; 40 char lvb[DLM_USER_LVB_LEN]; 41 char name[0]; 42 }; 43 44 struct dlm_lspace_params { 45 __u32 flags; 46 __u32 minor; 47 char name[0]; 48 }; 49 50 struct dlm_purge_params { 51 __u32 nodeid; 52 __u32 pid; 53 }; 54 55 struct dlm_write_request { 56 __u32 version[3]; 57 __u8 cmd; 58 __u8 is64bit; 59 __u8 unused[2]; 60 61 union { 62 struct dlm_lock_params lock; 63 struct dlm_lspace_params lspace; 64 struct dlm_purge_params purge; 65 } i; 66 }; 67 68 struct dlm_device_version { 69 __u32 version[3]; 70 }; 71 72 /* struct read from the "device" fd, 73 consists mainly of userspace pointers for the library to use */ 74 75 struct dlm_lock_result { 76 __u32 version[3]; 77 __u32 length; 78 void * user_astaddr; 79 void * user_astparam; 80 struct dlm_lksb * user_lksb; 81 struct dlm_lksb lksb; 82 __u8 bast_mode; 83 __u8 unused[3]; 84 /* Offsets may be zero if no data is present */ 85 __u32 lvb_offset; 86 }; 87 88 /* Commands passed to the device */ 89 #define DLM_USER_LOCK 1 90 #define DLM_USER_UNLOCK 2 91 #define DLM_USER_QUERY 3 92 #define DLM_USER_CREATE_LOCKSPACE 4 93 #define DLM_USER_REMOVE_LOCKSPACE 5 94 #define DLM_USER_PURGE 6 95 #define DLM_USER_DEADLOCK 7 96 97 /* Arbitrary length restriction */ 98 #define MAX_LS_NAME_LEN 64 99 100 /* Lockspace flags */ 101 #define DLM_USER_LSFLG_AUTOFREE 1 102 #define DLM_USER_LSFLG_FORCEFREE 2 103 104