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