Lines Matching defs:ca

15 static inline size_t sector_to_bucket(const struct bch_dev *ca, sector_t s)
17 return div_u64(s, ca->mi.bucket_size);
20 static inline sector_t bucket_to_sector(const struct bch_dev *ca, size_t b)
22 return ((sector_t) b) * ca->mi.bucket_size;
25 static inline sector_t bucket_remainder(const struct bch_dev *ca, sector_t s)
29 div_u64_rem(s, ca->mi.bucket_size, &remainder);
33 static inline size_t sector_to_bucket_and_offset(const struct bch_dev *ca, sector_t s,
36 return div_u64_rem(s, ca->mi.bucket_size, offset);
84 static inline struct bucket_array *gc_bucket_array(struct bch_dev *ca)
86 return rcu_dereference_check(ca->buckets_gc,
87 !ca->fs ||
88 percpu_rwsem_is_held(&ca->fs->mark_lock) ||
89 lockdep_is_held(&ca->fs->gc_lock) ||
90 lockdep_is_held(&ca->bucket_lock));
93 static inline struct bucket *gc_bucket(struct bch_dev *ca, size_t b)
95 struct bucket_array *buckets = gc_bucket_array(ca);
101 static inline struct bucket_gens *bucket_gens(struct bch_dev *ca)
103 return rcu_dereference_check(ca->bucket_gens,
104 !ca->fs ||
105 percpu_rwsem_is_held(&ca->fs->mark_lock) ||
106 lockdep_is_held(&ca->fs->gc_lock) ||
107 lockdep_is_held(&ca->bucket_lock));
110 static inline u8 *bucket_gen(struct bch_dev *ca, size_t b)
112 struct bucket_gens *gens = bucket_gens(ca);
118 static inline size_t PTR_BUCKET_NR(const struct bch_dev *ca,
121 return sector_to_bucket(ca, ptr->offset);
127 struct bch_dev *ca = bch_dev_bkey_exists(c, ptr->dev);
129 return POS(ptr->dev, PTR_BUCKET_NR(ca, ptr));
136 struct bch_dev *ca = bch_dev_bkey_exists(c, ptr->dev);
138 return POS(ptr->dev, sector_to_bucket_and_offset(ca, ptr->offset, bucket_offset));
141 static inline struct bucket *PTR_GC_BUCKET(struct bch_dev *ca,
144 return gc_bucket(ca, PTR_BUCKET_NR(ca, ptr));
182 static inline u8 ptr_stale(struct bch_dev *ca,
188 ret = gen_after(*bucket_gen(ca, PTR_BUCKET_NR(ca, ptr)), ptr->gen);
197 static inline struct bch_dev_usage bch2_dev_usage_read(struct bch_dev *ca)
201 bch2_dev_usage_read_fast(ca, &ret);
208 static inline u64 bch2_dev_buckets_reserved(struct bch_dev *ca, enum bch_watermark watermark)
216 reserved += ca->mi.nbuckets >> 6;
219 reserved += ca->mi.nbuckets >> 6;
222 reserved += ca->nr_btree_reserve;
225 reserved += ca->nr_btree_reserve;
236 static inline u64 dev_buckets_free(struct bch_dev *ca,
242 ca->nr_open_buckets -
243 bch2_dev_buckets_reserved(ca, watermark));
246 static inline u64 __dev_buckets_available(struct bch_dev *ca,
255 - ca->nr_open_buckets
256 - bch2_dev_buckets_reserved(ca, watermark));
259 static inline u64 dev_buckets_available(struct bch_dev *ca,
262 return __dev_buckets_available(ca, bch2_dev_usage_read(ca), watermark);
370 static inline bool is_superblock_bucket(struct bch_dev *ca, u64 b)
372 struct bch_sb_layout *layout = &ca->disk_sb.sb->layout;
373 u64 b_offset = bucket_to_sector(ca, b);
374 u64 b_end = bucket_to_sector(ca, b + 1);