2017-03-17 09:18:50 +03: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 09:24:07 +03:00
void bch2_dirent_to_text ( struct printbuf * , struct bch_fs * , struct bkey_s_c ) ;
2017-03-17 09:18:50 +03:00
2018-11-01 22:10:01 +03:00
# define bch2_bkey_ops_dirent (struct bkey_ops) { \
2017-03-17 09:18:50 +03: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-22 02:42:00 +03:00
static inline unsigned dirent_val_u64s ( unsigned len )
{
return DIV_ROUND_UP ( offsetof ( struct bch_dirent , d_name ) + len ,
sizeof ( u64 ) ) ;
}
2019-10-03 01:35:36 +03:00
int bch2_dirent_create ( struct btree_trans * , u64 ,
const struct bch_hash_info * , u8 ,
2021-03-03 02:35:30 +03:00
const struct qstr * , u64 , u64 * , int ) ;
2019-10-03 01:35:36 +03:00
int bch2_dirent_delete_at ( struct btree_trans * ,
const struct bch_hash_info * ,
struct btree_iter * ) ;
2017-03-17 09:18:50 +03:00
enum bch_rename_mode {
BCH_RENAME ,
BCH_RENAME_OVERWRITE ,
BCH_RENAME_EXCHANGE ,
} ;
int bch2_dirent_rename ( struct btree_trans * ,
2019-10-03 01:35:36 +03:00
u64 , struct bch_hash_info * ,
u64 , struct bch_hash_info * ,
2021-03-03 02:35:30 +03:00
const struct qstr * , u64 * , u64 * ,
const struct qstr * , u64 * , u64 * ,
2017-03-17 09:18:50 +03:00
enum bch_rename_mode ) ;
2021-08-30 22:18:31 +03:00
int __bch2_dirent_lookup_trans ( struct btree_trans * , struct btree_iter * , u64 ,
2019-10-03 01:35:36 +03:00
const struct bch_hash_info * ,
2019-10-05 03:40:47 +03:00
const struct qstr * , unsigned ) ;
2017-03-17 09:18:50 +03:00
u64 bch2_dirent_lookup ( struct bch_fs * , u64 , const struct bch_hash_info * ,
const struct qstr * ) ;
2019-04-01 00:37:30 +03:00
int bch2_empty_dir_trans ( struct btree_trans * , u64 ) ;
2019-10-03 01:35:36 +03:00
int bch2_readdir ( struct bch_fs * , u64 , struct dir_context * ) ;
2017-03-17 09:18:50 +03:00
# endif /* _BCACHEFS_DIRENT_H */