Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.10-rc3 93 lines 3.0 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _BCACHEFS_REPLICAS_H 3#define _BCACHEFS_REPLICAS_H 4 5#include "bkey.h" 6#include "eytzinger.h" 7#include "replicas_types.h" 8 9void bch2_replicas_entry_sort(struct bch_replicas_entry_v1 *); 10void bch2_replicas_entry_to_text(struct printbuf *, 11 struct bch_replicas_entry_v1 *); 12int bch2_replicas_entry_validate(struct bch_replicas_entry_v1 *, 13 struct bch_sb *, struct printbuf *); 14void bch2_cpu_replicas_to_text(struct printbuf *, struct bch_replicas_cpu *); 15 16static inline struct bch_replicas_entry_v1 * 17cpu_replicas_entry(struct bch_replicas_cpu *r, unsigned i) 18{ 19 return (void *) r->entries + r->entry_size * i; 20} 21 22int bch2_replicas_entry_idx(struct bch_fs *, 23 struct bch_replicas_entry_v1 *); 24 25void bch2_devlist_to_replicas(struct bch_replicas_entry_v1 *, 26 enum bch_data_type, 27 struct bch_devs_list); 28bool bch2_replicas_marked(struct bch_fs *, struct bch_replicas_entry_v1 *); 29int bch2_mark_replicas(struct bch_fs *, 30 struct bch_replicas_entry_v1 *); 31 32static inline struct replicas_delta * 33replicas_delta_next(struct replicas_delta *d) 34{ 35 return (void *) d + replicas_entry_bytes(&d->r) + 8; 36} 37 38int bch2_replicas_delta_list_mark(struct bch_fs *, struct replicas_delta_list *); 39 40void bch2_bkey_to_replicas(struct bch_replicas_entry_v1 *, struct bkey_s_c); 41 42static inline void bch2_replicas_entry_cached(struct bch_replicas_entry_v1 *e, 43 unsigned dev) 44{ 45 e->data_type = BCH_DATA_cached; 46 e->nr_devs = 1; 47 e->nr_required = 1; 48 e->devs[0] = dev; 49} 50 51bool bch2_have_enough_devs(struct bch_fs *, struct bch_devs_mask, 52 unsigned, bool); 53 54unsigned bch2_sb_dev_has_data(struct bch_sb *, unsigned); 55unsigned bch2_dev_has_data(struct bch_fs *, struct bch_dev *); 56 57int bch2_replicas_gc_end(struct bch_fs *, int); 58int bch2_replicas_gc_start(struct bch_fs *, unsigned); 59int bch2_replicas_gc2(struct bch_fs *); 60 61int bch2_replicas_set_usage(struct bch_fs *, 62 struct bch_replicas_entry_v1 *, 63 u64); 64 65#define for_each_cpu_replicas_entry(_r, _i) \ 66 for (_i = (_r)->entries; \ 67 (void *) (_i) < (void *) (_r)->entries + (_r)->nr * (_r)->entry_size;\ 68 _i = (void *) (_i) + (_r)->entry_size) 69 70/* iterate over superblock replicas - used by userspace tools: */ 71 72#define replicas_entry_next(_i) \ 73 ((typeof(_i)) ((void *) (_i) + replicas_entry_bytes(_i))) 74 75#define for_each_replicas_entry(_r, _i) \ 76 for (_i = (_r)->entries; \ 77 (void *) (_i) < vstruct_end(&(_r)->field) && (_i)->data_type;\ 78 (_i) = replicas_entry_next(_i)) 79 80#define for_each_replicas_entry_v0(_r, _i) \ 81 for (_i = (_r)->entries; \ 82 (void *) (_i) < vstruct_end(&(_r)->field) && (_i)->data_type;\ 83 (_i) = replicas_entry_next(_i)) 84 85int bch2_sb_replicas_to_cpu_replicas(struct bch_fs *); 86 87extern const struct bch_sb_field_ops bch_sb_field_ops_replicas; 88extern const struct bch_sb_field_ops bch_sb_field_ops_replicas_v0; 89 90void bch2_fs_replicas_exit(struct bch_fs *); 91int bch2_fs_replicas_init(struct bch_fs *); 92 93#endif /* _BCACHEFS_REPLICAS_H */