linux/fs/ocfs2/dlm/userdlm.h
<<
>>
Prefs
   1/* -*- mode: c; c-basic-offset: 8; -*-
   2 * vim: noexpandtab sw=8 ts=8 sts=0:
   3 *
   4 * userdlm.h
   5 *
   6 * Userspace dlm defines
   7 *
   8 * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
   9 *
  10 * This program is free software; you can redistribute it and/or
  11 * modify it under the terms of the GNU General Public
  12 * License as published by the Free Software Foundation; either
  13 * version 2 of the License, or (at your option) any later version.
  14 *
  15 * This program is distributed in the hope that it will be useful,
  16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18 * General Public License for more details.
  19 *
  20 * You should have received a copy of the GNU General Public
  21 * License along with this program; if not, write to the
  22 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  23 * Boston, MA 021110-1307, USA.
  24 */
  25
  26
  27#ifndef USERDLM_H
  28#define USERDLM_H
  29
  30#include <linux/module.h>
  31#include <linux/fs.h>
  32#include <linux/types.h>
  33#include <linux/workqueue.h>
  34
  35/* user_lock_res->l_flags flags. */
  36#define USER_LOCK_ATTACHED      (0x00000001) /* have we initialized
  37                                               * the lvb */
  38#define USER_LOCK_BUSY          (0x00000002) /* we are currently in
  39                                               * dlm_lock */
  40#define USER_LOCK_BLOCKED       (0x00000004) /* blocked waiting to
  41                                              * downconvert*/
  42#define USER_LOCK_IN_TEARDOWN   (0x00000008) /* we're currently
  43                                              * destroying this
  44                                              * lock. */
  45#define USER_LOCK_QUEUED        (0x00000010) /* lock is on the
  46                                              * workqueue */
  47#define USER_LOCK_IN_CANCEL     (0x00000020)
  48
  49struct user_lock_res {
  50        spinlock_t               l_lock;
  51
  52        int                      l_flags;
  53
  54#define USER_DLM_LOCK_ID_MAX_LEN  32
  55        char                     l_name[USER_DLM_LOCK_ID_MAX_LEN];
  56        int                      l_namelen;
  57        int                      l_level;
  58        unsigned int             l_ro_holders;
  59        unsigned int             l_ex_holders;
  60        struct dlm_lockstatus    l_lksb;
  61
  62        int                      l_requested;
  63        int                      l_blocking;
  64
  65        wait_queue_head_t        l_event;
  66
  67        struct work_struct       l_work;
  68};
  69
  70extern struct workqueue_struct *user_dlm_worker;
  71
  72void user_dlm_lock_res_init(struct user_lock_res *lockres,
  73                            struct dentry *dentry);
  74int user_dlm_destroy_lock(struct user_lock_res *lockres);
  75int user_dlm_cluster_lock(struct user_lock_res *lockres,
  76                          int level,
  77                          int lkm_flags);
  78void user_dlm_cluster_unlock(struct user_lock_res *lockres,
  79                             int level);
  80void user_dlm_write_lvb(struct inode *inode,
  81                        const char *val,
  82                        unsigned int len);
  83void user_dlm_read_lvb(struct inode *inode,
  84                       char *val,
  85                       unsigned int len);
  86struct dlm_ctxt *user_dlm_register_context(struct qstr *name);
  87void user_dlm_unregister_context(struct dlm_ctxt *dlm);
  88
  89struct dlmfs_inode_private {
  90        struct dlm_ctxt             *ip_dlm;
  91
  92        struct user_lock_res ip_lockres; /* unused for directories. */
  93        struct inode         *ip_parent;
  94
  95        struct inode         ip_vfs_inode;
  96};
  97
  98static inline struct dlmfs_inode_private *
  99DLMFS_I(struct inode *inode)
 100{
 101        return container_of(inode,
 102                            struct dlmfs_inode_private,
 103                            ip_vfs_inode);
 104}
 105
 106struct dlmfs_filp_private {
 107        int                  fp_lock_level;
 108};
 109
 110#define DLMFS_MAGIC     0x76a9f425
 111
 112#endif /* USERDLM_H */
 113