Home | History | Annotate | Download | only in linux
      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