2019-05-24 12:04:05 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2021-05-06 18:06:44 -07:00
/*
2005-12-15 14:31:23 -08:00
* userdlm . h
*
* Userspace dlm defines
*
* Copyright ( C ) 2002 , 2004 Oracle . All rights reserved .
*/
# ifndef USERDLM_H
# define USERDLM_H
# include <linux/module.h>
# include <linux/fs.h>
# include <linux/types.h>
# include <linux/workqueue.h>
/* user_lock_res->l_flags flags. */
2008-11-05 15:16:24 +08:00
# define USER_LOCK_ATTACHED (0x00000001) / * we have initialized
2005-12-15 14:31:23 -08:00
* the lvb */
# define USER_LOCK_BUSY (0x00000002) / * we are currently in
* dlm_lock */
# define USER_LOCK_BLOCKED (0x00000004) / * blocked waiting to
* downconvert */
# define USER_LOCK_IN_TEARDOWN (0x00000008) / * we're currently
* destroying this
* lock . */
# define USER_LOCK_QUEUED (0x00000010) / * lock is on the
* workqueue */
# define USER_LOCK_IN_CANCEL (0x00000020)
struct user_lock_res {
spinlock_t l_lock ;
int l_flags ;
# define USER_DLM_LOCK_ID_MAX_LEN 32
char l_name [ USER_DLM_LOCK_ID_MAX_LEN ] ;
2006-09-08 11:39:27 -07:00
int l_namelen ;
2005-12-15 14:31:23 -08:00
int l_level ;
unsigned int l_ro_holders ;
unsigned int l_ex_holders ;
2010-01-30 04:33:50 -08:00
struct ocfs2_dlm_lksb l_lksb ;
2005-12-15 14:31:23 -08:00
int l_requested ;
int l_blocking ;
wait_queue_head_t l_event ;
struct work_struct l_work ;
} ;
extern struct workqueue_struct * user_dlm_worker ;
void user_dlm_lock_res_init ( struct user_lock_res * lockres ,
struct dentry * dentry ) ;
int user_dlm_destroy_lock ( struct user_lock_res * lockres ) ;
int user_dlm_cluster_lock ( struct user_lock_res * lockres ,
int level ,
int lkm_flags ) ;
void user_dlm_cluster_unlock ( struct user_lock_res * lockres ,
int level ) ;
void user_dlm_write_lvb ( struct inode * inode ,
const char * val ,
unsigned int len ) ;
2020-06-14 19:04:42 -04:00
bool user_dlm_read_lvb ( struct inode * inode , char * val ) ;
2016-07-20 16:27:42 -04:00
struct ocfs2_cluster_connection * user_dlm_register ( const struct qstr * name ) ;
2010-01-30 04:33:50 -08:00
void user_dlm_unregister ( struct ocfs2_cluster_connection * conn ) ;
void user_dlm_set_locking_protocol ( void ) ;
2005-12-15 14:31:23 -08:00
struct dlmfs_inode_private {
2010-01-30 04:33:50 -08:00
struct ocfs2_cluster_connection * ip_conn ;
2005-12-15 14:31:23 -08:00
struct user_lock_res ip_lockres ; /* unused for directories. */
struct inode * ip_parent ;
struct inode ip_vfs_inode ;
} ;
static inline struct dlmfs_inode_private *
DLMFS_I ( struct inode * inode )
{
return container_of ( inode ,
struct dlmfs_inode_private ,
ip_vfs_inode ) ;
}
struct dlmfs_filp_private {
int fp_lock_level ;
} ;
# define DLMFS_MAGIC 0x76a9f425
# endif /* USERDLM_H */