2005-12-16 01:31:24 +03:00
/* -*- mode: c; c-basic-offset: 8; -*-
* vim : noexpandtab sw = 8 ts = 8 sts = 0 :
*
* dlmglue . h
*
* description here
*
* Copyright ( C ) 2002 , 2004 Oracle . All rights reserved .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation ; either
* version 2 of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public
* License along with this program ; if not , write to the
* Free Software Foundation , Inc . , 59 Temple Place - Suite 330 ,
* Boston , MA 021110 - 1307 , USA .
*/
# ifndef DLMGLUE_H
# define DLMGLUE_H
2006-09-09 01:14:34 +04:00
# include "dcache.h"
2007-09-08 00:58:15 +04:00
# define OCFS2_LVB_VERSION 5
2005-12-16 01:31:24 +03:00
struct ocfs2_meta_lvb {
2006-09-13 02:22:18 +04:00
__u8 lvb_version ;
2006-09-23 04:28:19 +04:00
__u8 lvb_reserved0 ;
2007-09-08 00:58:15 +04:00
__be16 lvb_idynfeatures ;
2005-12-16 01:31:24 +03:00
__be32 lvb_iclusters ;
__be32 lvb_iuid ;
__be32 lvb_igid ;
__be64 lvb_iatime_packed ;
__be64 lvb_ictime_packed ;
__be64 lvb_imtime_packed ;
__be64 lvb_isize ;
__be16 lvb_imode ;
__be16 lvb_inlink ;
2006-07-04 04:27:12 +04:00
__be32 lvb_iattr ;
2006-09-13 02:35:49 +04:00
__be32 lvb_igeneration ;
__be32 lvb_reserved2 ;
2005-12-16 01:31:24 +03:00
} ;
2008-08-25 21:56:50 +04:00
# define OCFS2_QINFO_LVB_VERSION 1
struct ocfs2_qinfo_lvb {
__u8 lvb_version ;
__u8 lvb_reserved [ 3 ] ;
__be32 lvb_bgrace ;
__be32 lvb_igrace ;
__be32 lvb_syncms ;
__be32 lvb_blocks ;
__be32 lvb_free_blk ;
__be32 lvb_free_entry ;
} ;
2009-06-04 04:02:55 +04:00
# define OCFS2_ORPHAN_LVB_VERSION 1
struct ocfs2_orphan_scan_lvb {
__u8 lvb_version ;
__u8 lvb_reserved [ 3 ] ;
__be32 lvb_os_seqno ;
} ;
2007-10-19 02:30:42 +04:00
/* ocfs2_inode_lock_full() 'arg_flags' flags */
2005-12-16 01:31:24 +03:00
/* don't wait on recovery. */
# define OCFS2_META_LOCK_RECOVERY (0x01)
/* Instruct the dlm not to queue ourselves on the other node. */
# define OCFS2_META_LOCK_NOQUEUE (0x02)
2007-09-25 02:56:19 +04:00
/* don't block waiting for the downconvert thread, instead return -EAGAIN */
2005-12-16 01:31:24 +03:00
# define OCFS2_LOCK_NONBLOCK (0x04)
2009-06-04 17:26:50 +04:00
/* Locking subclasses of inode cluster lock */
enum {
OI_LS_NORMAL = 0 ,
OI_LS_PARENT ,
OI_LS_RENAME1 ,
OI_LS_RENAME2 ,
2010-09-07 09:30:06 +04:00
OI_LS_REFLINK_TARGET ,
2009-06-04 17:26:50 +04:00
} ;
2005-12-16 01:31:24 +03:00
int ocfs2_dlm_init ( struct ocfs2_super * osb ) ;
2008-02-02 02:03:57 +03:00
void ocfs2_dlm_shutdown ( struct ocfs2_super * osb , int hangup_pending ) ;
2005-12-16 01:31:24 +03:00
void ocfs2_lock_res_init_once ( struct ocfs2_lock_res * res ) ;
void ocfs2_inode_lock_res_init ( struct ocfs2_lock_res * res ,
enum ocfs2_lock_type type ,
2006-09-23 04:28:19 +04:00
unsigned int generation ,
2005-12-16 01:31:24 +03:00
struct inode * inode ) ;
2006-09-09 01:14:34 +04:00
void ocfs2_dentry_lock_res_init ( struct ocfs2_dentry_lock * dl ,
u64 parent , struct inode * inode ) ;
2007-12-21 03:43:10 +03:00
struct ocfs2_file_private ;
void ocfs2_file_lock_res_init ( struct ocfs2_lock_res * lockres ,
struct ocfs2_file_private * fp ) ;
2008-08-25 21:56:50 +04:00
struct ocfs2_mem_dqinfo ;
void ocfs2_qinfo_lock_res_init ( struct ocfs2_lock_res * lockres ,
struct ocfs2_mem_dqinfo * info ) ;
2009-08-18 07:19:58 +04:00
void ocfs2_refcount_lock_res_init ( struct ocfs2_lock_res * lockres ,
struct ocfs2_super * osb , u64 ref_blkno ,
unsigned int generation ) ;
2005-12-16 01:31:24 +03:00
void ocfs2_lock_res_free ( struct ocfs2_lock_res * res ) ;
int ocfs2_create_new_inode_locks ( struct inode * inode ) ;
int ocfs2_drop_inode_locks ( struct inode * inode ) ;
int ocfs2_rw_lock ( struct inode * inode , int write ) ;
void ocfs2_rw_unlock ( struct inode * inode , int write ) ;
2007-03-21 02:01:38 +03:00
int ocfs2_open_lock ( struct inode * inode ) ;
int ocfs2_try_open_lock ( struct inode * inode , int write ) ;
void ocfs2_open_unlock ( struct inode * inode ) ;
2007-10-19 02:30:42 +04:00
int ocfs2_inode_lock_atime ( struct inode * inode ,
2006-11-15 10:48:42 +03:00
struct vfsmount * vfsmnt ,
int * level ) ;
2009-06-04 17:26:50 +04:00
int ocfs2_inode_lock_full_nested ( struct inode * inode ,
2005-12-16 01:31:24 +03:00
struct buffer_head * * ret_bh ,
int ex ,
2009-06-04 17:26:50 +04:00
int arg_flags ,
int subclass ) ;
2007-10-19 02:30:42 +04:00
int ocfs2_inode_lock_with_page ( struct inode * inode ,
2005-12-16 01:31:24 +03:00
struct buffer_head * * ret_bh ,
int ex ,
struct page * page ) ;
2009-06-04 17:26:50 +04:00
/* Variants without special locking class or flags */
# define ocfs2_inode_lock_full(i, r, e, f)\
ocfs2_inode_lock_full_nested ( i , r , e , f , OI_LS_NORMAL )
# define ocfs2_inode_lock_nested(i, b, e, s)\
ocfs2_inode_lock_full_nested ( i , b , e , 0 , s )
2005-12-16 01:31:24 +03:00
/* 99% of the time we don't want to supply any additional flags --
* those are for very specific cases only . */
2009-06-04 17:26:50 +04:00
# define ocfs2_inode_lock(i, b, e) ocfs2_inode_lock_full_nested(i, b, e, 0, OI_LS_NORMAL)
2007-10-19 02:30:42 +04:00
void ocfs2_inode_unlock ( struct inode * inode ,
2005-12-16 01:31:24 +03:00
int ex ) ;
int ocfs2_super_lock ( struct ocfs2_super * osb ,
int ex ) ;
void ocfs2_super_unlock ( struct ocfs2_super * osb ,
int ex ) ;
2009-06-22 22:40:07 +04:00
int ocfs2_orphan_scan_lock ( struct ocfs2_super * osb , u32 * seqno ) ;
void ocfs2_orphan_scan_unlock ( struct ocfs2_super * osb , u32 seqno ) ;
2009-06-04 04:02:55 +04:00
2005-12-16 01:31:24 +03:00
int ocfs2_rename_lock ( struct ocfs2_super * osb ) ;
void ocfs2_rename_unlock ( struct ocfs2_super * osb ) ;
2009-03-06 16:29:10 +03:00
int ocfs2_nfs_sync_lock ( struct ocfs2_super * osb , int ex ) ;
void ocfs2_nfs_sync_unlock ( struct ocfs2_super * osb , int ex ) ;
2006-09-09 01:14:34 +04:00
int ocfs2_dentry_lock ( struct dentry * dentry , int ex ) ;
void ocfs2_dentry_unlock ( struct dentry * dentry , int ex ) ;
2007-12-21 03:43:10 +03:00
int ocfs2_file_lock ( struct file * file , int ex , int trylock ) ;
void ocfs2_file_unlock ( struct file * file ) ;
2008-08-25 21:56:50 +04:00
int ocfs2_qinfo_lock ( struct ocfs2_mem_dqinfo * oinfo , int ex ) ;
void ocfs2_qinfo_unlock ( struct ocfs2_mem_dqinfo * oinfo , int ex ) ;
2009-08-18 07:19:58 +04:00
struct ocfs2_refcount_tree ;
int ocfs2_refcount_lock ( struct ocfs2_refcount_tree * ref_tree , int ex ) ;
void ocfs2_refcount_unlock ( struct ocfs2_refcount_tree * ref_tree , int ex ) ;
2008-08-25 21:56:50 +04:00
2006-09-09 01:14:34 +04:00
2014-04-04 01:46:57 +04:00
void ocfs2_mark_lockres_freeing ( struct ocfs2_super * osb ,
struct ocfs2_lock_res * lockres ) ;
2006-09-09 01:14:34 +04:00
void ocfs2_simple_drop_lockres ( struct ocfs2_super * osb ,
struct ocfs2_lock_res * lockres ) ;
2005-12-16 01:31:24 +03:00
2007-09-25 02:56:19 +04:00
/* for the downconvert thread */
void ocfs2_wake_downconvert_thread ( struct ocfs2_super * osb ) ;
2005-12-16 01:31:24 +03:00
struct ocfs2_dlm_debug * ocfs2_new_dlm_debug ( void ) ;
void ocfs2_put_dlm_debug ( struct ocfs2_dlm_debug * dlm_debug ) ;
2008-01-31 03:58:36 +03:00
/* To set the locking protocol on module initialization */
void ocfs2_set_locking_protocol ( void ) ;
2005-12-16 01:31:24 +03:00
# endif /* DLMGLUE_H */