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"
2023-07-07 04:16:10 +03:00
enum bkey_invalid_flags ;
2017-03-17 09:18:50 +03:00
extern const struct bch_hash_desc bch2_dirent_hash_desc ;
2023-10-25 03:44:36 +03:00
int bch2_dirent_invalid ( struct bch_fs * , struct bkey_s_c ,
2023-07-07 04:16:10 +03:00
enum bkey_invalid_flags , struct printbuf * ) ;
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
2022-10-22 22:59:53 +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 , \
2023-04-29 20:24:18 +03:00
. min_val_size = 16 , \
2022-10-22 22:59:53 +03:00
} )
2017-03-17 09:18:50 +03:00
struct qstr ;
struct file ;
struct dir_context ;
struct bch_fs ;
struct bch_hash_info ;
struct bch_inode_info ;
2023-08-13 00:26:29 +03:00
struct qstr bch2_dirent_get_name ( struct bkey_s_c_dirent d ) ;
2017-03-17 09:18:50 +03:00
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 ) ) ;
}
2021-11-14 03:49:14 +03:00
int bch2_dirent_read_target ( struct btree_trans * , subvol_inum ,
struct bkey_s_c_dirent , subvol_inum * ) ;
2024-02-10 00:04:50 +03:00
int bch2_dirent_create_snapshot ( struct btree_trans * , u32 , u64 , u32 ,
2023-12-15 22:13:48 +03:00
const struct bch_hash_info * , u8 ,
const struct qstr * , u64 , u64 * ,
bch_str_hash_flags_t ) ;
2021-03-16 07:28:17 +03:00
int bch2_dirent_create ( struct btree_trans * , subvol_inum ,
2019-10-03 01:35:36 +03:00
const struct bch_hash_info * , u8 ,
2023-11-12 00:31:50 +03:00
const struct qstr * , u64 , u64 * ,
bch_str_hash_flags_t ) ;
2019-10-03 01:35:36 +03:00
2021-03-16 07:46:26 +03:00
static inline unsigned vfs_d_type ( unsigned type )
{
return type = = DT_SUBVOL ? DT_DIR : type ;
}
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 * ,
2021-03-16 07:28:17 +03:00
subvol_inum , struct bch_hash_info * ,
subvol_inum , struct bch_hash_info * ,
const struct qstr * , subvol_inum * , u64 * ,
const struct qstr * , subvol_inum * , u64 * ,
2017-03-17 09:18:50 +03:00
enum bch_rename_mode ) ;
2024-01-25 20:35:06 +03:00
int bch2_dirent_lookup_trans ( struct btree_trans * , struct btree_iter * ,
2021-03-16 07:28:17 +03:00
subvol_inum , const struct bch_hash_info * ,
const struct qstr * , subvol_inum * , unsigned ) ;
u64 bch2_dirent_lookup ( struct bch_fs * , subvol_inum ,
const struct bch_hash_info * ,
const struct qstr * , subvol_inum * ) ;
2017-03-17 09:18:50 +03:00
2024-02-13 11:20:04 +03:00
int bch2_empty_dir_snapshot ( struct btree_trans * , u64 , u32 , u32 ) ;
2021-03-16 07:28:17 +03:00
int bch2_empty_dir_trans ( struct btree_trans * , subvol_inum ) ;
int bch2_readdir ( struct bch_fs * , subvol_inum , struct dir_context * ) ;
2017-03-17 09:18:50 +03:00
# endif /* _BCACHEFS_DIRENT_H */