#include "bcachefs.h"
#include "alloc_foreground.h"
#include "btree_gc.h"
#include "btree_io.h"
#include "btree_iter.h"
#include "btree_journal_iter.h"
#include "btree_key_cache.h"
#include "btree_update_interior.h"
#include "btree_write_buffer.h"
#include "buckets.h"
#include "disk_accounting.h"
#include "errcode.h"
#include "error.h"
#include "journal.h"
#include "journal_io.h"
#include "journal_reclaim.h"
#include "replicas.h"
#include "snapshot.h"
#include <linux/prefetch.h>
static const char * const trans_commit_flags_strs[] = …;
void bch2_trans_commit_flags_to_text(struct printbuf *out, enum bch_trans_commit_flags flags)
{ … }
static void verify_update_old_key(struct btree_trans *trans, struct btree_insert_entry *i)
{ … }
static inline struct btree_path_level *insert_l(struct btree_trans *trans, struct btree_insert_entry *i)
{ … }
static inline bool same_leaf_as_prev(struct btree_trans *trans,
struct btree_insert_entry *i)
{ … }
static inline bool same_leaf_as_next(struct btree_trans *trans,
struct btree_insert_entry *i)
{ … }
inline void bch2_btree_node_prep_for_write(struct btree_trans *trans,
struct btree_path *path,
struct btree *b)
{ … }
static noinline int trans_lock_write_fail(struct btree_trans *trans, struct btree_insert_entry *i)
{ … }
static inline int bch2_trans_lock_write(struct btree_trans *trans)
{ … }
static inline void bch2_trans_unlock_write(struct btree_trans *trans)
{ … }
bool bch2_btree_bset_insert_key(struct btree_trans *trans,
struct btree_path *path,
struct btree *b,
struct btree_node_iter *node_iter,
struct bkey_i *insert)
{ … }
static int __btree_node_flush(struct journal *j, struct journal_entry_pin *pin,
unsigned i, u64 seq)
{ … }
int bch2_btree_node_flush0(struct journal *j, struct journal_entry_pin *pin, u64 seq)
{ … }
int bch2_btree_node_flush1(struct journal *j, struct journal_entry_pin *pin, u64 seq)
{ … }
inline void bch2_btree_add_journal_pin(struct bch_fs *c,
struct btree *b, u64 seq)
{ … }
inline void bch2_btree_insert_key_leaf(struct btree_trans *trans,
struct btree_path *path,
struct bkey_i *insert,
u64 journal_seq)
{ … }
static inline void btree_insert_entry_checks(struct btree_trans *trans,
struct btree_insert_entry *i)
{ … }
static __always_inline int bch2_trans_journal_res_get(struct btree_trans *trans,
unsigned flags)
{ … }
#define JSET_ENTRY_LOG_U64s …
static noinline void journal_transaction_name(struct btree_trans *trans)
{ … }
static inline int btree_key_can_insert(struct btree_trans *trans,
struct btree *b, unsigned u64s)
{ … }
noinline static int
btree_key_can_insert_cached_slowpath(struct btree_trans *trans, unsigned flags,
struct btree_path *path, unsigned new_u64s)
{ … }
static int btree_key_can_insert_cached(struct btree_trans *trans, unsigned flags,
struct btree_path *path, unsigned u64s)
{ … }
static int run_one_mem_trigger(struct btree_trans *trans,
struct btree_insert_entry *i,
unsigned flags)
{ … }
static int run_one_trans_trigger(struct btree_trans *trans, struct btree_insert_entry *i,
bool overwrite)
{ … }
static int run_btree_triggers(struct btree_trans *trans, enum btree_id btree_id,
unsigned btree_id_start)
{ … }
static int bch2_trans_commit_run_triggers(struct btree_trans *trans)
{ … }
static noinline int bch2_trans_commit_run_gc_triggers(struct btree_trans *trans)
{ … }
static struct bversion journal_pos_to_bversion(struct journal_res *res, unsigned offset)
{ … }
static inline int
bch2_trans_commit_write_locked(struct btree_trans *trans, unsigned flags,
struct btree_insert_entry **stopped_at,
unsigned long trace_ip)
{ … }
static noinline void bch2_drop_overwrites_from_journal(struct btree_trans *trans)
{ … }
static noinline int bch2_trans_commit_bkey_invalid(struct btree_trans *trans,
enum bch_validate_flags flags,
struct btree_insert_entry *i,
struct printbuf *err)
{ … }
static noinline int bch2_trans_commit_journal_entry_invalid(struct btree_trans *trans,
struct jset_entry *i)
{ … }
static int bch2_trans_commit_journal_pin_flush(struct journal *j,
struct journal_entry_pin *_pin, u64 seq)
{ … }
static inline int do_bch2_trans_commit(struct btree_trans *trans, unsigned flags,
struct btree_insert_entry **stopped_at,
unsigned long trace_ip)
{ … }
static int journal_reclaim_wait_done(struct bch_fs *c)
{ … }
static noinline
int bch2_trans_commit_error(struct btree_trans *trans, unsigned flags,
struct btree_insert_entry *i,
int ret, unsigned long trace_ip)
{ … }
static noinline int
bch2_trans_commit_get_rw_cold(struct btree_trans *trans, unsigned flags)
{ … }
static noinline int
do_bch2_trans_commit_to_journal_replay(struct btree_trans *trans)
{ … }
int __bch2_trans_commit(struct btree_trans *trans, unsigned flags)
{ … }