2019-05-24 13:04:05 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-12-16 01:31:24 +03:00
/* -*- mode: c; c-basic-offset: 8; -*-
* vim : noexpandtab sw = 8 ts = 8 sts = 0 :
*
* dir . h
*
* Function prototypes
*
* Copyright ( C ) 2002 , 2004 Oracle . All rights reserved .
*/
# ifndef OCFS2_DIR_H
# define OCFS2_DIR_H
2008-11-13 03:27:44 +03:00
struct ocfs2_dx_hinfo {
u32 major_hash ;
u32 minor_hash ;
} ;
2008-11-13 02:43:34 +03:00
struct ocfs2_dir_lookup_result {
2008-11-13 03:27:44 +03:00
struct buffer_head * dl_leaf_bh ; /* Unindexed leaf
* block */
struct ocfs2_dir_entry * dl_entry ; /* Target dirent in
* unindexed leaf */
2008-11-25 04:02:08 +03:00
struct buffer_head * dl_dx_root_bh ; /* Root of indexed
* tree */
2009-01-30 05:17:46 +03:00
2008-11-13 03:27:44 +03:00
struct buffer_head * dl_dx_leaf_bh ; /* Indexed leaf block */
struct ocfs2_dx_entry * dl_dx_entry ; /* Target dx_entry in
* indexed leaf */
struct ocfs2_dx_hinfo dl_hinfo ; /* Name hash results */
2009-01-30 05:17:46 +03:00
struct buffer_head * dl_prev_leaf_bh ; /* Previous entry in
* dir free space
* list . NULL if
* previous entry is
* dx root block . */
2008-11-13 02:43:34 +03:00
} ;
2009-01-30 05:17:46 +03:00
2008-11-13 02:43:34 +03:00
void ocfs2_free_dir_lookup_result ( struct ocfs2_dir_lookup_result * res ) ;
int ocfs2_find_entry ( const char * name , int namelen ,
struct inode * dir ,
struct ocfs2_dir_lookup_result * lookup ) ;
2007-09-08 05:21:26 +04:00
int ocfs2_delete_entry ( handle_t * handle ,
struct inode * dir ,
2008-11-13 02:43:34 +03:00
struct ocfs2_dir_lookup_result * res ) ;
2007-09-08 05:21:26 +04:00
int __ocfs2_add_entry ( handle_t * handle ,
struct inode * dir ,
const char * name , int namelen ,
struct inode * inode , u64 blkno ,
struct buffer_head * parent_fe_bh ,
2008-11-13 02:43:34 +03:00
struct ocfs2_dir_lookup_result * lookup ) ;
2007-09-08 05:21:26 +04:00
static inline int ocfs2_add_entry ( handle_t * handle ,
struct dentry * dentry ,
struct inode * inode , u64 blkno ,
struct buffer_head * parent_fe_bh ,
2008-11-13 02:43:34 +03:00
struct ocfs2_dir_lookup_result * lookup )
2007-09-08 05:21:26 +04:00
{
2015-03-18 01:25:59 +03:00
return __ocfs2_add_entry ( handle , d_inode ( dentry - > d_parent ) ,
2007-09-08 05:21:26 +04:00
dentry - > d_name . name , dentry - > d_name . len ,
2008-11-13 02:43:34 +03:00
inode , blkno , parent_fe_bh , lookup ) ;
2007-09-08 05:21:26 +04:00
}
2007-09-12 04:21:56 +04:00
int ocfs2_update_entry ( struct inode * dir , handle_t * handle ,
2008-11-13 02:43:34 +03:00
struct ocfs2_dir_lookup_result * res ,
2007-09-12 04:21:56 +04:00
struct inode * new_entry_inode ) ;
2007-09-08 05:21:26 +04:00
2005-12-16 01:31:24 +03:00
int ocfs2_check_dir_for_entry ( struct inode * dir ,
const char * name ,
int namelen ) ;
2007-09-12 22:19:00 +04:00
int ocfs2_empty_dir ( struct inode * inode ) ;
2008-11-13 02:43:34 +03:00
2005-12-16 01:31:24 +03:00
int ocfs2_find_files_on_disk ( const char * name ,
int namelen ,
u64 * blkno ,
struct inode * inode ,
2008-11-13 02:43:34 +03:00
struct ocfs2_dir_lookup_result * res ) ;
2007-09-12 02:22:06 +04:00
int ocfs2_lookup_ino_from_name ( struct inode * dir , const char * name ,
int namelen , u64 * blkno ) ;
2013-05-23 05:06:00 +04:00
int ocfs2_readdir ( struct file * file , struct dir_context * ctx ) ;
int ocfs2_dir_foreach ( struct inode * inode , struct dir_context * ctx ) ;
2005-12-16 01:31:24 +03:00
int ocfs2_prepare_dir_for_insert ( struct ocfs2_super * osb ,
struct inode * dir ,
struct buffer_head * parent_fe_bh ,
const char * name ,
int namelen ,
2008-11-13 02:43:34 +03:00
struct ocfs2_dir_lookup_result * lookup ) ;
2005-12-16 01:31:24 +03:00
struct ocfs2_alloc_context ;
2007-09-08 05:21:26 +04:00
int ocfs2_fill_new_dir ( struct ocfs2_super * osb ,
handle_t * handle ,
struct inode * parent ,
struct inode * inode ,
struct buffer_head * fe_bh ,
2008-11-13 03:27:44 +03:00
struct ocfs2_alloc_context * data_ac ,
struct ocfs2_alloc_context * meta_ac ) ;
int ocfs2_dx_dir_truncate ( struct inode * dir , struct buffer_head * di_bh ) ;
2007-09-08 05:21:26 +04:00
2008-12-11 04:58:22 +03:00
struct ocfs2_dir_block_trailer * ocfs2_dir_trailer_from_size ( int blocksize ,
void * data ) ;
2005-12-16 01:31:24 +03:00
# endif /* OCFS2_DIR_H */