#include "bcachefs.h"
#include "bkey_buf.h"
#include "bkey_methods.h"
#include "btree_update.h"
#include "extents.h"
#include "dirent.h"
#include "fs.h"
#include "keylist.h"
#include "str_hash.h"
#include "subvolume.h"
#include <linux/dcache.h>
static unsigned bch2_dirent_name_bytes(struct bkey_s_c_dirent d)
{ … }
struct qstr bch2_dirent_get_name(struct bkey_s_c_dirent d)
{ … }
static u64 bch2_dirent_hash(const struct bch_hash_info *info,
const struct qstr *name)
{ … }
static u64 dirent_hash_key(const struct bch_hash_info *info, const void *key)
{ … }
static u64 dirent_hash_bkey(const struct bch_hash_info *info, struct bkey_s_c k)
{ … }
static bool dirent_cmp_key(struct bkey_s_c _l, const void *_r)
{ … }
static bool dirent_cmp_bkey(struct bkey_s_c _l, struct bkey_s_c _r)
{ … }
static bool dirent_is_visible(subvol_inum inum, struct bkey_s_c k)
{ … }
const struct bch_hash_desc bch2_dirent_hash_desc = …;
int bch2_dirent_invalid(struct bch_fs *c, struct bkey_s_c k,
enum bch_validate_flags flags,
struct printbuf *err)
{ … }
void bch2_dirent_to_text(struct printbuf *out, struct bch_fs *c, struct bkey_s_c k)
{ … }
static struct bkey_i_dirent *dirent_create_key(struct btree_trans *trans,
subvol_inum dir, u8 type,
const struct qstr *name, u64 dst)
{ … }
int bch2_dirent_create_snapshot(struct btree_trans *trans,
u32 dir_subvol, u64 dir, u32 snapshot,
const struct bch_hash_info *hash_info,
u8 type, const struct qstr *name, u64 dst_inum,
u64 *dir_offset,
enum btree_iter_update_trigger_flags flags)
{ … }
int bch2_dirent_create(struct btree_trans *trans, subvol_inum dir,
const struct bch_hash_info *hash_info,
u8 type, const struct qstr *name, u64 dst_inum,
u64 *dir_offset,
enum btree_iter_update_trigger_flags flags)
{ … }
static void dirent_copy_target(struct bkey_i_dirent *dst,
struct bkey_s_c_dirent src)
{ … }
int bch2_dirent_read_target(struct btree_trans *trans, subvol_inum dir,
struct bkey_s_c_dirent d, subvol_inum *target)
{ … }
int bch2_dirent_rename(struct btree_trans *trans,
subvol_inum src_dir, struct bch_hash_info *src_hash,
subvol_inum dst_dir, struct bch_hash_info *dst_hash,
const struct qstr *src_name, subvol_inum *src_inum, u64 *src_offset,
const struct qstr *dst_name, subvol_inum *dst_inum, u64 *dst_offset,
enum bch_rename_mode mode)
{ … }
int bch2_dirent_lookup_trans(struct btree_trans *trans,
struct btree_iter *iter,
subvol_inum dir,
const struct bch_hash_info *hash_info,
const struct qstr *name, subvol_inum *inum,
unsigned flags)
{ … }
u64 bch2_dirent_lookup(struct bch_fs *c, subvol_inum dir,
const struct bch_hash_info *hash_info,
const struct qstr *name, subvol_inum *inum)
{ … }
int bch2_empty_dir_snapshot(struct btree_trans *trans, u64 dir, u32 subvol, u32 snapshot)
{ … }
int bch2_empty_dir_trans(struct btree_trans *trans, subvol_inum dir)
{ … }
static int bch2_dir_emit(struct dir_context *ctx, struct bkey_s_c_dirent d, subvol_inum target)
{ … }
int bch2_readdir(struct bch_fs *c, subvol_inum inum, struct dir_context *ctx)
{ … }