Lines Matching refs:wp
783 struct write_point *wp, in bucket_alloc_from_stripe() argument
809 struct dev_alloc_list devs_sorted = bch2_dev_alloc_list(c, &wp->stripe, devs_may_alloc); in bucket_alloc_from_stripe()
835 struct write_point *wp, in want_bucket() argument
845 if (ob->data_type != wp->data_type) in want_bucket()
849 (wp->data_type == BCH_DATA_btree || ec || *have_cache)) in want_bucket()
860 struct write_point *wp, in bucket_alloc_set_writepoint() argument
872 open_bucket_for_each(c, &wp->ptrs, ob, i) { in bucket_alloc_set_writepoint()
873 if (!ret && want_bucket(c, wp, devs_may_alloc, in bucket_alloc_set_writepoint()
881 wp->ptrs = ptrs_skip; in bucket_alloc_set_writepoint()
888 struct write_point *wp, in bucket_alloc_set_partial() argument
908 if (want_bucket(c, wp, devs_may_alloc, have_cache, ec, ob)) { in bucket_alloc_set_partial()
941 struct write_point *wp, in __open_bucket_add_buckets() argument
959 devs = target_rw_devs(c, wp->data_type, target); in __open_bucket_add_buckets()
968 ret = bucket_alloc_set_writepoint(c, ptrs, wp, &devs, in __open_bucket_add_buckets()
974 ret = bucket_alloc_set_partial(c, ptrs, wp, &devs, in __open_bucket_add_buckets()
981 ret = bucket_alloc_from_stripe(trans, ptrs, wp, &devs, in __open_bucket_add_buckets()
992 ret = bch2_bucket_alloc_set_trans(trans, ptrs, &wp->stripe, &devs, in __open_bucket_add_buckets()
994 flags, wp->data_type, watermark, cl); in __open_bucket_add_buckets()
1009 struct write_point *wp, in open_bucket_add_buckets() argument
1023 ret = __open_bucket_add_buckets(trans, ptrs, wp, in open_bucket_add_buckets()
1036 ret = __open_bucket_add_buckets(trans, ptrs, wp, in open_bucket_add_buckets()
1089 bool ec, struct write_point *wp) in bch2_writepoint_stop() argument
1095 mutex_lock(&wp->lock); in bch2_writepoint_stop()
1096 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_writepoint_stop()
1101 wp->ptrs = ptrs; in bch2_writepoint_stop()
1102 mutex_unlock(&wp->lock); in bch2_writepoint_stop()
1168 struct write_point *wp; in __writepoint_find() local
1171 hlist_for_each_entry_rcu(wp, head, node) in __writepoint_find()
1172 if (wp->write_point == write_point) in __writepoint_find()
1174 wp = NULL; in __writepoint_find()
1177 return wp; in __writepoint_find()
1190 struct write_point *wp; in try_increase_writepoints() local
1196 wp = c->write_points + c->write_points_nr++; in try_increase_writepoints()
1197 hlist_add_head_rcu(&wp->node, writepoint_hash(c, wp->write_point)); in try_increase_writepoints()
1204 struct write_point *wp; in try_decrease_writepoints() local
1220 wp = c->write_points + --c->write_points_nr; in try_decrease_writepoints()
1222 hlist_del_rcu(&wp->node); in try_decrease_writepoints()
1225 bch2_trans_mutex_lock_norelock(trans, &wp->lock); in try_decrease_writepoints()
1226 open_bucket_for_each(c, &wp->ptrs, ob, i) in try_decrease_writepoints()
1228 wp->ptrs.nr = 0; in try_decrease_writepoints()
1229 mutex_unlock(&wp->lock); in try_decrease_writepoints()
1237 struct write_point *wp, *oldest; in writepoint_find() local
1241 wp = (struct write_point *) write_point; in writepoint_find()
1242 bch2_trans_mutex_lock_norelock(trans, &wp->lock); in writepoint_find()
1243 return wp; in writepoint_find()
1248 wp = __writepoint_find(head, write_point); in writepoint_find()
1249 if (wp) { in writepoint_find()
1251 bch2_trans_mutex_lock_norelock(trans, &wp->lock); in writepoint_find()
1252 if (wp->write_point == write_point) in writepoint_find()
1254 mutex_unlock(&wp->lock); in writepoint_find()
1259 for (wp = c->write_points; in writepoint_find()
1260 wp < c->write_points + c->write_points_nr; wp++) in writepoint_find()
1261 if (!oldest || time_before64(wp->last_used, oldest->last_used)) in writepoint_find()
1262 oldest = wp; in writepoint_find()
1273 wp = __writepoint_find(head, write_point); in writepoint_find()
1274 if (wp && wp != oldest) { in writepoint_find()
1280 wp = oldest; in writepoint_find()
1281 hlist_del_rcu(&wp->node); in writepoint_find()
1282 wp->write_point = write_point; in writepoint_find()
1283 hlist_add_head_rcu(&wp->node, head); in writepoint_find()
1286 wp->last_used = local_clock(); in writepoint_find()
1287 return wp; in writepoint_find()
1330 struct write_point *wp; in bch2_alloc_sectors_start_trans() local
1348 *wp_ret = wp = writepoint_find(trans, write_point.v); in bch2_alloc_sectors_start_trans()
1355 if (wp->data_type != BCH_DATA_user) in bch2_alloc_sectors_start_trans()
1359 ret = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1370 int ret2 = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1389 ret = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1395 ret = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1415 deallocate_extra_replicas(c, &ptrs, &wp->ptrs, nr_effective - nr_replicas); in bch2_alloc_sectors_start_trans()
1418 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_alloc_sectors_start_trans()
1421 wp->ptrs = ptrs; in bch2_alloc_sectors_start_trans()
1423 wp->sectors_free = UINT_MAX; in bch2_alloc_sectors_start_trans()
1425 open_bucket_for_each(c, &wp->ptrs, ob, i) { in bch2_alloc_sectors_start_trans()
1439 wp->sectors_free = min(wp->sectors_free, ob->sectors_free); in bch2_alloc_sectors_start_trans()
1442 wp->sectors_free = rounddown(wp->sectors_free, block_sectors(c)); in bch2_alloc_sectors_start_trans()
1445 if (unlikely(!wp->sectors_free)) { in bch2_alloc_sectors_start_trans()
1446 bch2_alloc_sectors_done(c, wp); in bch2_alloc_sectors_start_trans()
1450 BUG_ON(!wp->sectors_free || wp->sectors_free == UINT_MAX); in bch2_alloc_sectors_start_trans()
1454 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_alloc_sectors_start_trans()
1459 wp->ptrs = ptrs; in bch2_alloc_sectors_start_trans()
1461 mutex_unlock(&wp->lock); in bch2_alloc_sectors_start_trans()
1491 void bch2_alloc_sectors_append_ptrs(struct bch_fs *c, struct write_point *wp, in bch2_alloc_sectors_append_ptrs() argument
1495 bch2_alloc_sectors_append_ptrs_inlined(c, wp, k, sectors, cached); in bch2_alloc_sectors_append_ptrs()
1502 void bch2_alloc_sectors_done(struct bch_fs *c, struct write_point *wp) in bch2_alloc_sectors_done() argument
1504 bch2_alloc_sectors_done_inlined(c, wp); in bch2_alloc_sectors_done()
1507 static inline void writepoint_init(struct write_point *wp, in writepoint_init() argument
1510 mutex_init(&wp->lock); in writepoint_init()
1511 wp->data_type = type; in writepoint_init()
1513 INIT_WORK(&wp->index_update_work, bch2_write_point_do_index_updates); in writepoint_init()
1514 INIT_LIST_HEAD(&wp->writes); in writepoint_init()
1515 spin_lock_init(&wp->writes_lock); in writepoint_init()
1521 struct write_point *wp; in bch2_fs_allocator_foreground_init() local
1542 for (wp = c->write_points; in bch2_fs_allocator_foreground_init()
1543 wp < c->write_points + c->write_points_nr; wp++) { in bch2_fs_allocator_foreground_init()
1544 writepoint_init(wp, BCH_DATA_user); in bch2_fs_allocator_foreground_init()
1546 wp->last_used = local_clock(); in bch2_fs_allocator_foreground_init()
1547 wp->write_point = (unsigned long) wp; in bch2_fs_allocator_foreground_init()
1548 hlist_add_head_rcu(&wp->node, in bch2_fs_allocator_foreground_init()
1549 writepoint_hash(c, wp->write_point)); in bch2_fs_allocator_foreground_init()
1615 struct write_point *wp) in bch2_write_point_to_text() argument
1620 prt_printf(out, "%lu: ", wp->write_point); in bch2_write_point_to_text()
1621 prt_human_readable_u64(out, wp->sectors_allocated << 9); in bch2_write_point_to_text()
1624 bch2_pr_time_units(out, sched_clock() - wp->last_used); in bch2_write_point_to_text()
1628 bch2_pr_time_units(out, wp->time[i]); in bch2_write_point_to_text()
1634 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_write_point_to_text()
1641 struct write_point *wp; in bch2_write_points_to_text() local
1644 for (wp = c->write_points; in bch2_write_points_to_text()
1645 wp < c->write_points + ARRAY_SIZE(c->write_points); in bch2_write_points_to_text()
1646 wp++) in bch2_write_points_to_text()
1647 bch2_write_point_to_text(out, c, wp); in bch2_write_points_to_text()