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