/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * 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. */ #define USER_LOCK_ATTACHED (0x00000001) /* we have initialized * 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]; int l_namelen; int l_level; unsigned int l_ro_holders; unsigned int l_ex_holders; struct ocfs2_dlm_lksb l_lksb; 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); bool user_dlm_read_lvb(struct inode *inode, char *val); struct ocfs2_cluster_connection *user_dlm_register(const struct qstr *name); void user_dlm_unregister(struct ocfs2_cluster_connection *conn); void user_dlm_set_locking_protocol(void); struct dlmfs_inode_private { struct ocfs2_cluster_connection *ip_conn; 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 */