linux/fs/ocfs2/dlmfs/userdlm.h
<<
>>
Prefs
   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);
  69ssize_t user_dlm_read_lvb(struct inode *inode,
  70                          char *val,
  71                          unsigned int len);
  72struct ocfs2_cluster_connection *user_dlm_register(const struct qstr *name);
  73void user_dlm_unregister(struct ocfs2_cluster_connection *conn);
  74void user_dlm_set_locking_protocol(void);
  75
  76struct dlmfs_inode_private {
  77        struct ocfs2_cluster_connection *ip_conn;
  78
  79        struct user_lock_res ip_lockres; /* unused for directories. */
  80        struct inode         *ip_parent;
  81
  82        struct inode         ip_vfs_inode;
  83};
  84
  85static inline struct dlmfs_inode_private *
  86DLMFS_I(struct inode *inode)
  87{
  88        return container_of(inode,
  89                            struct dlmfs_inode_private,
  90                            ip_vfs_inode);
  91}
  92
  93struct dlmfs_filp_private {
  94        int                  fp_lock_level;
  95};
  96
  97#define DLMFS_MAGIC     0x76a9f425
  98
  99#endif /* USERDLM_H */
 100