1ccd979bdSMark Fasheh /* -*- mode: c; c-basic-offset: 8; -*- 2ccd979bdSMark Fasheh * vim: noexpandtab sw=8 ts=8 sts=0: 3ccd979bdSMark Fasheh * 4ccd979bdSMark Fasheh * dlmglue.h 5ccd979bdSMark Fasheh * 6ccd979bdSMark Fasheh * description here 7ccd979bdSMark Fasheh * 8ccd979bdSMark Fasheh * Copyright (C) 2002, 2004 Oracle. All rights reserved. 9ccd979bdSMark Fasheh * 10ccd979bdSMark Fasheh * This program is free software; you can redistribute it and/or 11ccd979bdSMark Fasheh * modify it under the terms of the GNU General Public 12ccd979bdSMark Fasheh * License as published by the Free Software Foundation; either 13ccd979bdSMark Fasheh * version 2 of the License, or (at your option) any later version. 14ccd979bdSMark Fasheh * 15ccd979bdSMark Fasheh * This program is distributed in the hope that it will be useful, 16ccd979bdSMark Fasheh * but WITHOUT ANY WARRANTY; without even the implied warranty of 17ccd979bdSMark Fasheh * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18ccd979bdSMark Fasheh * General Public License for more details. 19ccd979bdSMark Fasheh * 20ccd979bdSMark Fasheh * You should have received a copy of the GNU General Public 21ccd979bdSMark Fasheh * License along with this program; if not, write to the 22ccd979bdSMark Fasheh * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 23ccd979bdSMark Fasheh * Boston, MA 021110-1307, USA. 24ccd979bdSMark Fasheh */ 25ccd979bdSMark Fasheh 26ccd979bdSMark Fasheh 27ccd979bdSMark Fasheh #ifndef DLMGLUE_H 28ccd979bdSMark Fasheh #define DLMGLUE_H 29ccd979bdSMark Fasheh 30d680efe9SMark Fasheh #include "dcache.h" 31d680efe9SMark Fasheh 32ca4d147eSHerbert Poetzl #define OCFS2_LVB_VERSION 3 33ccd979bdSMark Fasheh 34ccd979bdSMark Fasheh struct ocfs2_meta_lvb { 354d3b83f7SMark Fasheh __be16 lvb_reserved0; 364d3b83f7SMark Fasheh __u8 lvb_reserved1; 374d3b83f7SMark Fasheh __u8 lvb_version; 38ccd979bdSMark Fasheh __be32 lvb_iclusters; 39ccd979bdSMark Fasheh __be32 lvb_iuid; 40ccd979bdSMark Fasheh __be32 lvb_igid; 41ccd979bdSMark Fasheh __be64 lvb_iatime_packed; 42ccd979bdSMark Fasheh __be64 lvb_ictime_packed; 43ccd979bdSMark Fasheh __be64 lvb_imtime_packed; 44ccd979bdSMark Fasheh __be64 lvb_isize; 45ccd979bdSMark Fasheh __be16 lvb_imode; 46ccd979bdSMark Fasheh __be16 lvb_inlink; 47ca4d147eSHerbert Poetzl __be32 lvb_iattr; 48ca4d147eSHerbert Poetzl __be32 lvb_reserved[2]; 49ccd979bdSMark Fasheh }; 50ccd979bdSMark Fasheh 51ccd979bdSMark Fasheh /* ocfs2_meta_lock_full() and ocfs2_data_lock_full() 'arg_flags' flags */ 52ccd979bdSMark Fasheh /* don't wait on recovery. */ 53ccd979bdSMark Fasheh #define OCFS2_META_LOCK_RECOVERY (0x01) 54ccd979bdSMark Fasheh /* Instruct the dlm not to queue ourselves on the other node. */ 55ccd979bdSMark Fasheh #define OCFS2_META_LOCK_NOQUEUE (0x02) 56ccd979bdSMark Fasheh /* don't block waiting for the vote thread, instead return -EAGAIN */ 57ccd979bdSMark Fasheh #define OCFS2_LOCK_NONBLOCK (0x04) 58ccd979bdSMark Fasheh 59ccd979bdSMark Fasheh int ocfs2_dlm_init(struct ocfs2_super *osb); 60ccd979bdSMark Fasheh void ocfs2_dlm_shutdown(struct ocfs2_super *osb); 61ccd979bdSMark Fasheh void ocfs2_lock_res_init_once(struct ocfs2_lock_res *res); 62ccd979bdSMark Fasheh void ocfs2_inode_lock_res_init(struct ocfs2_lock_res *res, 63ccd979bdSMark Fasheh enum ocfs2_lock_type type, 64ccd979bdSMark Fasheh struct inode *inode); 65d680efe9SMark Fasheh void ocfs2_dentry_lock_res_init(struct ocfs2_dentry_lock *dl, 66d680efe9SMark Fasheh u64 parent, struct inode *inode); 67ccd979bdSMark Fasheh void ocfs2_lock_res_free(struct ocfs2_lock_res *res); 68ccd979bdSMark Fasheh int ocfs2_create_new_inode_locks(struct inode *inode); 69d680efe9SMark Fasheh int ocfs2_create_new_lock(struct ocfs2_super *osb, 70d680efe9SMark Fasheh struct ocfs2_lock_res *lockres, int ex); 71ccd979bdSMark Fasheh int ocfs2_drop_inode_locks(struct inode *inode); 72ccd979bdSMark Fasheh int ocfs2_data_lock_full(struct inode *inode, 73ccd979bdSMark Fasheh int write, 74ccd979bdSMark Fasheh int arg_flags); 75ccd979bdSMark Fasheh #define ocfs2_data_lock(inode, write) ocfs2_data_lock_full(inode, write, 0) 76ccd979bdSMark Fasheh int ocfs2_data_lock_with_page(struct inode *inode, 77ccd979bdSMark Fasheh int write, 78ccd979bdSMark Fasheh struct page *page); 79ccd979bdSMark Fasheh void ocfs2_data_unlock(struct inode *inode, 80ccd979bdSMark Fasheh int write); 81ccd979bdSMark Fasheh int ocfs2_rw_lock(struct inode *inode, int write); 82ccd979bdSMark Fasheh void ocfs2_rw_unlock(struct inode *inode, int write); 83ccd979bdSMark Fasheh int ocfs2_meta_lock_full(struct inode *inode, 84ccd979bdSMark Fasheh struct ocfs2_journal_handle *handle, 85ccd979bdSMark Fasheh struct buffer_head **ret_bh, 86ccd979bdSMark Fasheh int ex, 87ccd979bdSMark Fasheh int arg_flags); 88ccd979bdSMark Fasheh int ocfs2_meta_lock_with_page(struct inode *inode, 89ccd979bdSMark Fasheh struct ocfs2_journal_handle *handle, 90ccd979bdSMark Fasheh struct buffer_head **ret_bh, 91ccd979bdSMark Fasheh int ex, 92ccd979bdSMark Fasheh struct page *page); 93ccd979bdSMark Fasheh /* 99% of the time we don't want to supply any additional flags -- 94ccd979bdSMark Fasheh * those are for very specific cases only. */ 95ccd979bdSMark Fasheh #define ocfs2_meta_lock(i, h, b, e) ocfs2_meta_lock_full(i, h, b, e, 0) 96ccd979bdSMark Fasheh void ocfs2_meta_unlock(struct inode *inode, 97ccd979bdSMark Fasheh int ex); 98ccd979bdSMark Fasheh int ocfs2_super_lock(struct ocfs2_super *osb, 99ccd979bdSMark Fasheh int ex); 100ccd979bdSMark Fasheh void ocfs2_super_unlock(struct ocfs2_super *osb, 101ccd979bdSMark Fasheh int ex); 102ccd979bdSMark Fasheh int ocfs2_rename_lock(struct ocfs2_super *osb); 103ccd979bdSMark Fasheh void ocfs2_rename_unlock(struct ocfs2_super *osb); 104d680efe9SMark Fasheh int ocfs2_dentry_lock(struct dentry *dentry, int ex); 105d680efe9SMark Fasheh void ocfs2_dentry_unlock(struct dentry *dentry, int ex); 106d680efe9SMark Fasheh 107ccd979bdSMark Fasheh void ocfs2_mark_lockres_freeing(struct ocfs2_lock_res *lockres); 108d680efe9SMark Fasheh void ocfs2_simple_drop_lockres(struct ocfs2_super *osb, 109d680efe9SMark Fasheh struct ocfs2_lock_res *lockres); 110ccd979bdSMark Fasheh 111ccd979bdSMark Fasheh /* for the vote thread */ 112ccd979bdSMark Fasheh void ocfs2_process_blocked_lock(struct ocfs2_super *osb, 113ccd979bdSMark Fasheh struct ocfs2_lock_res *lockres); 114ccd979bdSMark Fasheh 115ccd979bdSMark Fasheh struct ocfs2_dlm_debug *ocfs2_new_dlm_debug(void); 116ccd979bdSMark Fasheh void ocfs2_put_dlm_debug(struct ocfs2_dlm_debug *dlm_debug); 117ccd979bdSMark Fasheh 118ccd979bdSMark Fasheh /* aids in debugging and tracking lvbs */ 119ccd979bdSMark Fasheh void ocfs2_dump_meta_lvb_info(u64 level, 120ccd979bdSMark Fasheh const char *function, 121ccd979bdSMark Fasheh unsigned int line, 122ccd979bdSMark Fasheh struct ocfs2_lock_res *lockres); 123ccd979bdSMark Fasheh #define mlog_meta_lvb(__level, __lockres) ocfs2_dump_meta_lvb_info(__level, __PRETTY_FUNCTION__, __LINE__, __lockres) 124ccd979bdSMark Fasheh 125ccd979bdSMark Fasheh #endif /* DLMGLUE_H */ 126