^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* -*- mode: c; c-basic-offset: 8; -*-
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * vim: noexpandtab sw=8 ts=8 sts=0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * dlmglue.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * description here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Copyright (C) 2002, 2004 Oracle. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #ifndef DLMGLUE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define DLMGLUE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include "dcache.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define OCFS2_LVB_VERSION 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) struct ocfs2_meta_lvb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) __u8 lvb_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) __u8 lvb_reserved0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) __be16 lvb_idynfeatures;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) __be32 lvb_iclusters;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) __be32 lvb_iuid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) __be32 lvb_igid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) __be64 lvb_iatime_packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) __be64 lvb_ictime_packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) __be64 lvb_imtime_packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __be64 lvb_isize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __be16 lvb_imode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) __be16 lvb_inlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) __be32 lvb_iattr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) __be32 lvb_igeneration;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) __be32 lvb_reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define OCFS2_QINFO_LVB_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct ocfs2_qinfo_lvb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) __u8 lvb_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __u8 lvb_reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) __be32 lvb_bgrace;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) __be32 lvb_igrace;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) __be32 lvb_syncms;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) __be32 lvb_blocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) __be32 lvb_free_blk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) __be32 lvb_free_entry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define OCFS2_ORPHAN_LVB_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) struct ocfs2_orphan_scan_lvb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) __u8 lvb_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) __u8 lvb_reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) __be32 lvb_os_seqno;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define OCFS2_TRIMFS_LVB_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) struct ocfs2_trim_fs_lvb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) __u8 lvb_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __u8 lvb_success;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __u8 lvb_reserved[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) __be32 lvb_nodenum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) __be64 lvb_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) __be64 lvb_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) __be64 lvb_minlen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) __be64 lvb_trimlen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) struct ocfs2_trim_fs_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) u8 tf_valid; /* lvb is valid, or not */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) u8 tf_success; /* trim is successful, or not */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) u32 tf_nodenum; /* osb node number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) u64 tf_start; /* trim start offset in clusters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) u64 tf_len; /* trim end offset in clusters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) u64 tf_minlen; /* trim minimum contiguous free clusters */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) u64 tf_trimlen; /* trimmed length in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) struct ocfs2_lock_holder {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) struct list_head oh_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) struct pid *oh_owner_pid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) int oh_ex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /* ocfs2_inode_lock_full() 'arg_flags' flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) /* don't wait on recovery. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define OCFS2_META_LOCK_RECOVERY (0x01)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) /* Instruct the dlm not to queue ourselves on the other node. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define OCFS2_META_LOCK_NOQUEUE (0x02)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) /* don't block waiting for the downconvert thread, instead return -EAGAIN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define OCFS2_LOCK_NONBLOCK (0x04)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) /* just get back disk inode bh if we've got cluster lock. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define OCFS2_META_LOCK_GETBH (0x08)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) /* Locking subclasses of inode cluster lock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) OI_LS_NORMAL = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) OI_LS_PARENT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) OI_LS_RENAME1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) OI_LS_RENAME2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) OI_LS_REFLINK_TARGET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) int ocfs2_dlm_init(struct ocfs2_super *osb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) void ocfs2_dlm_shutdown(struct ocfs2_super *osb, int hangup_pending);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) void ocfs2_lock_res_init_once(struct ocfs2_lock_res *res);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) void ocfs2_inode_lock_res_init(struct ocfs2_lock_res *res,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) enum ocfs2_lock_type type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) unsigned int generation,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) void ocfs2_dentry_lock_res_init(struct ocfs2_dentry_lock *dl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) u64 parent, struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) struct ocfs2_file_private;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) void ocfs2_file_lock_res_init(struct ocfs2_lock_res *lockres,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) struct ocfs2_file_private *fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) struct ocfs2_mem_dqinfo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) void ocfs2_qinfo_lock_res_init(struct ocfs2_lock_res *lockres,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) struct ocfs2_mem_dqinfo *info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) void ocfs2_refcount_lock_res_init(struct ocfs2_lock_res *lockres,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) struct ocfs2_super *osb, u64 ref_blkno,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) unsigned int generation);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) void ocfs2_lock_res_free(struct ocfs2_lock_res *res);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) int ocfs2_create_new_inode_locks(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) int ocfs2_drop_inode_locks(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) int ocfs2_rw_lock(struct inode *inode, int write);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) int ocfs2_try_rw_lock(struct inode *inode, int write);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) void ocfs2_rw_unlock(struct inode *inode, int write);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) int ocfs2_open_lock(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) int ocfs2_try_open_lock(struct inode *inode, int write);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) void ocfs2_open_unlock(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) int ocfs2_inode_lock_atime(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) struct vfsmount *vfsmnt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) int *level, int wait);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) int ocfs2_inode_lock_full_nested(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) struct buffer_head **ret_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) int ex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) int arg_flags,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) int subclass);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) int ocfs2_inode_lock_with_page(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) struct buffer_head **ret_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) int ex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) struct page *page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) /* Variants without special locking class or flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define ocfs2_inode_lock_full(i, r, e, f)\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) ocfs2_inode_lock_full_nested(i, r, e, f, OI_LS_NORMAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define ocfs2_inode_lock_nested(i, b, e, s)\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) ocfs2_inode_lock_full_nested(i, b, e, 0, s)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) /* 99% of the time we don't want to supply any additional flags --
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) * those are for very specific cases only. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define ocfs2_inode_lock(i, b, e) ocfs2_inode_lock_full_nested(i, b, e, 0, OI_LS_NORMAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define ocfs2_try_inode_lock(i, b, e)\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) ocfs2_inode_lock_full_nested(i, b, e, OCFS2_META_LOCK_NOQUEUE,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) OI_LS_NORMAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) void ocfs2_inode_unlock(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) int ocfs2_super_lock(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) void ocfs2_super_unlock(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) int ocfs2_orphan_scan_lock(struct ocfs2_super *osb, u32 *seqno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) void ocfs2_orphan_scan_unlock(struct ocfs2_super *osb, u32 seqno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) int ocfs2_rename_lock(struct ocfs2_super *osb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) void ocfs2_rename_unlock(struct ocfs2_super *osb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) int ocfs2_nfs_sync_lock(struct ocfs2_super *osb, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) void ocfs2_nfs_sync_unlock(struct ocfs2_super *osb, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) void ocfs2_trim_fs_lock_res_init(struct ocfs2_super *osb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) void ocfs2_trim_fs_lock_res_uninit(struct ocfs2_super *osb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) int ocfs2_trim_fs_lock(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) struct ocfs2_trim_fs_info *info, int trylock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) void ocfs2_trim_fs_unlock(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) struct ocfs2_trim_fs_info *info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) int ocfs2_dentry_lock(struct dentry *dentry, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) void ocfs2_dentry_unlock(struct dentry *dentry, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) int ocfs2_file_lock(struct file *file, int ex, int trylock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) void ocfs2_file_unlock(struct file *file);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) int ocfs2_qinfo_lock(struct ocfs2_mem_dqinfo *oinfo, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) void ocfs2_qinfo_unlock(struct ocfs2_mem_dqinfo *oinfo, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) struct ocfs2_refcount_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) int ocfs2_refcount_lock(struct ocfs2_refcount_tree *ref_tree, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) void ocfs2_refcount_unlock(struct ocfs2_refcount_tree *ref_tree, int ex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) void ocfs2_mark_lockres_freeing(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) struct ocfs2_lock_res *lockres);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) void ocfs2_simple_drop_lockres(struct ocfs2_super *osb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) struct ocfs2_lock_res *lockres);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) /* for the downconvert thread */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) void ocfs2_wake_downconvert_thread(struct ocfs2_super *osb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) struct ocfs2_dlm_debug *ocfs2_new_dlm_debug(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) void ocfs2_put_dlm_debug(struct ocfs2_dlm_debug *dlm_debug);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) /* To set the locking protocol on module initialization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) void ocfs2_set_locking_protocol(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) /* The _tracker pair is used to avoid cluster recursive locking */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) int ocfs2_inode_lock_tracker(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) struct buffer_head **ret_bh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) int ex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) struct ocfs2_lock_holder *oh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) void ocfs2_inode_unlock_tracker(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) int ex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) struct ocfs2_lock_holder *oh,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) int had_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #endif /* DLMGLUE_H */