1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_JOURNAL_RECLAIM_H
3 #define _BCACHEFS_JOURNAL_RECLAIM_H
5 #define JOURNAL_PIN (32 * 1024)
7 static inline void journal_reclaim_kick(struct journal
*j
)
9 struct task_struct
*p
= READ_ONCE(j
->reclaim_thread
);
11 j
->reclaim_kicked
= true;
16 unsigned bch2_journal_dev_buckets_available(struct journal
*,
17 struct journal_device
*,
18 enum journal_space_from
);
19 void bch2_journal_set_watermark(struct journal
*);
20 void bch2_journal_space_available(struct journal
*);
22 static inline bool journal_pin_active(struct journal_entry_pin
*pin
)
27 static inline struct journal_entry_pin_list
*
28 journal_seq_pin(struct journal
*j
, u64 seq
)
30 EBUG_ON(seq
< j
->pin
.front
|| seq
>= j
->pin
.back
);
32 return &j
->pin
.data
[seq
& j
->pin
.mask
];
35 void bch2_journal_reclaim_fast(struct journal
*);
36 bool __bch2_journal_pin_put(struct journal
*, u64
);
37 void bch2_journal_pin_put(struct journal
*, u64
);
38 void bch2_journal_pin_drop(struct journal
*, struct journal_entry_pin
*);
40 void bch2_journal_pin_set(struct journal
*, u64
, struct journal_entry_pin
*,
41 journal_pin_flush_fn
);
43 static inline void bch2_journal_pin_add(struct journal
*j
, u64 seq
,
44 struct journal_entry_pin
*pin
,
45 journal_pin_flush_fn flush_fn
)
47 if (unlikely(!journal_pin_active(pin
) || pin
->seq
> seq
))
48 bch2_journal_pin_set(j
, seq
, pin
, flush_fn
);
51 void bch2_journal_pin_copy(struct journal
*,
52 struct journal_entry_pin
*,
53 struct journal_entry_pin
*,
54 journal_pin_flush_fn
);
56 static inline void bch2_journal_pin_update(struct journal
*j
, u64 seq
,
57 struct journal_entry_pin
*pin
,
58 journal_pin_flush_fn flush_fn
)
60 if (unlikely(!journal_pin_active(pin
) || pin
->seq
< seq
))
61 bch2_journal_pin_set(j
, seq
, pin
, flush_fn
);
64 void bch2_journal_pin_flush(struct journal
*, struct journal_entry_pin
*);
66 void bch2_journal_do_discards(struct journal
*);
67 int bch2_journal_reclaim(struct journal
*);
69 void bch2_journal_reclaim_stop(struct journal
*);
70 int bch2_journal_reclaim_start(struct journal
*);
72 bool bch2_journal_flush_pins(struct journal
*, u64
);
74 static inline bool bch2_journal_flush_all_pins(struct journal
*j
)
76 return bch2_journal_flush_pins(j
, U64_MAX
);
79 int bch2_journal_flush_device_pins(struct journal
*, int);
81 #endif /* _BCACHEFS_JOURNAL_RECLAIM_H */