1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* -*- mode: c; c-basic-offset: 8; -*- 3 * vim: noexpandtab sw=8 ts=8 sts=0: 4 * 5 * userdlm.h 6 * 7 * Userspace dlm defines 8 * 9 * Copyright (C) 2002, 2004 Oracle. All rights reserved. 10 */ 11 12 13#ifndef USERDLM_H 14#define USERDLM_H 15 16#include <linux/module.h> 17#include <linux/fs.h> 18#include <linux/types.h> 19#include <linux/workqueue.h> 20 21/* user_lock_res->l_flags flags. */ 22#define USER_LOCK_ATTACHED (0x00000001) /* we have initialized 23 * the lvb */ 24#define USER_LOCK_BUSY (0x00000002) /* we are currently in 25 * dlm_lock */ 26#define USER_LOCK_BLOCKED (0x00000004) /* blocked waiting to 27 * downconvert*/ 28#define USER_LOCK_IN_TEARDOWN (0x00000008) /* we're currently 29 * destroying this 30 * lock. */ 31#define USER_LOCK_QUEUED (0x00000010) /* lock is on the 32 * workqueue */ 33#define USER_LOCK_IN_CANCEL (0x00000020) 34 35struct user_lock_res { 36 spinlock_t l_lock; 37 38 int l_flags; 39 40#define USER_DLM_LOCK_ID_MAX_LEN 32 41 char l_name[USER_DLM_LOCK_ID_MAX_LEN]; 42 int l_namelen; 43 int l_level; 44 unsigned int l_ro_holders; 45 unsigned int l_ex_holders; 46 struct ocfs2_dlm_lksb l_lksb; 47 48 int l_requested; 49 int l_blocking; 50 51 wait_queue_head_t l_event; 52 53 struct work_struct l_work; 54}; 55 56extern struct workqueue_struct *user_dlm_worker; 57 58void user_dlm_lock_res_init(struct user_lock_res *lockres, 59 struct dentry *dentry); 60int user_dlm_destroy_lock(struct user_lock_res *lockres); 61int user_dlm_cluster_lock(struct user_lock_res *lockres, 62 int level, 63 int lkm_flags); 64void user_dlm_cluster_unlock(struct user_lock_res *lockres, 65 int level); 66void user_dlm_write_lvb(struct inode *inode, 67 const char *val, 68 unsigned int len); 69bool user_dlm_read_lvb(struct inode *inode, char *val); 70struct ocfs2_cluster_connection *user_dlm_register(const struct qstr *name); 71void user_dlm_unregister(struct ocfs2_cluster_connection *conn); 72void user_dlm_set_locking_protocol(void); 73 74struct dlmfs_inode_private { 75 struct ocfs2_cluster_connection *ip_conn; 76 77 struct user_lock_res ip_lockres; /* unused for directories. */ 78 struct inode *ip_parent; 79 80 struct inode ip_vfs_inode; 81}; 82 83static inline struct dlmfs_inode_private * 84DLMFS_I(struct inode *inode) 85{ 86 return container_of(inode, 87 struct dlmfs_inode_private, 88 ip_vfs_inode); 89} 90 91struct dlmfs_filp_private { 92 int fp_lock_level; 93}; 94 95#define DLMFS_MAGIC 0x76a9f425 96 97#endif /* USERDLM_H */ 98