2017-03-16 22:18:50 -08:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifndef _BCACHEFS_DIRENT_H
# define _BCACHEFS_DIRENT_H
# include "str_hash.h"
extern const struct bch_hash_desc bch2_dirent_hash_desc ;
const char * bch2_dirent_invalid ( const struct bch_fs * , struct bkey_s_c ) ;
2018-11-09 01:24:07 -05:00
void bch2_dirent_to_text ( struct printbuf * , struct bch_fs * , struct bkey_s_c ) ;
2017-03-16 22:18:50 -08:00
2018-11-01 15:10:01 -04:00
# define bch2_bkey_ops_dirent (struct bkey_ops) { \
2017-03-16 22:18:50 -08:00
. key_invalid = bch2_dirent_invalid , \
. val_to_text = bch2_dirent_to_text , \
}
struct qstr ;
struct file ;
struct dir_context ;
struct bch_fs ;
struct bch_hash_info ;
struct bch_inode_info ;
unsigned bch2_dirent_name_bytes ( struct bkey_s_c_dirent ) ;
2018-08-21 19:42:00 -04:00
static inline unsigned dirent_val_u64s ( unsigned len )
{
return DIV_ROUND_UP ( offsetof ( struct bch_dirent , d_name ) + len ,
sizeof ( u64 ) ) ;
}
2019-10-02 18:35:36 -04:00
int bch2_dirent_create ( struct btree_trans * , u64 ,
const struct bch_hash_info * , u8 ,
2021-03-02 18:35:30 -05:00
const struct qstr * , u64 , u64 * , int ) ;
2019-10-02 18:35:36 -04:00
int bch2_dirent_delete_at ( struct btree_trans * ,
const struct bch_hash_info * ,
struct btree_iter * ) ;
2017-03-16 22:18:50 -08:00
enum bch_rename_mode {
BCH_RENAME ,
BCH_RENAME_OVERWRITE ,
BCH_RENAME_EXCHANGE ,
} ;
int bch2_dirent_rename ( struct btree_trans * ,
2019-10-02 18:35:36 -04:00
u64 , struct bch_hash_info * ,
u64 , struct bch_hash_info * ,
2021-03-02 18:35:30 -05:00
const struct qstr * , u64 * , u64 * ,
const struct qstr * , u64 * , u64 * ,
2017-03-16 22:18:50 -08:00
enum bch_rename_mode ) ;
2021-08-30 15:18:31 -04:00
int __bch2_dirent_lookup_trans ( struct btree_trans * , struct btree_iter * , u64 ,
2019-10-02 18:35:36 -04:00
const struct bch_hash_info * ,
2019-10-04 20:40:47 -04:00
const struct qstr * , unsigned ) ;
2017-03-16 22:18:50 -08:00
u64 bch2_dirent_lookup ( struct bch_fs * , u64 , const struct bch_hash_info * ,
const struct qstr * ) ;
2019-03-31 17:37:30 -04:00
int bch2_empty_dir_trans ( struct btree_trans * , u64 ) ;
2019-10-02 18:35:36 -04:00
int bch2_readdir ( struct bch_fs * , u64 , struct dir_context * ) ;
2017-03-16 22:18:50 -08:00
# endif /* _BCACHEFS_DIRENT_H */