Lines Matching full:wp

764 			 struct write_point *wp,  in bucket_alloc_from_stripe()  argument
790 struct dev_alloc_list devs_sorted = bch2_dev_alloc_list(c, &wp->stripe, devs_may_alloc); in bucket_alloc_from_stripe()
816 struct write_point *wp, in want_bucket() argument
826 if (ob->data_type != wp->data_type) in want_bucket()
830 (wp->data_type == BCH_DATA_btree || ec || *have_cache)) in want_bucket()
841 struct write_point *wp, in bucket_alloc_set_writepoint() argument
853 open_bucket_for_each(c, &wp->ptrs, ob, i) { in bucket_alloc_set_writepoint()
854 if (!ret && want_bucket(c, wp, devs_may_alloc, in bucket_alloc_set_writepoint()
862 wp->ptrs = ptrs_skip; in bucket_alloc_set_writepoint()
869 struct write_point *wp, in bucket_alloc_set_partial() argument
889 if (want_bucket(c, wp, devs_may_alloc, have_cache, ec, ob)) { in bucket_alloc_set_partial()
922 struct write_point *wp, in __open_bucket_add_buckets() argument
940 devs = target_rw_devs(c, wp->data_type, target); in __open_bucket_add_buckets()
949 ret = bucket_alloc_set_writepoint(c, ptrs, wp, &devs, in __open_bucket_add_buckets()
955 ret = bucket_alloc_set_partial(c, ptrs, wp, &devs, in __open_bucket_add_buckets()
962 ret = bucket_alloc_from_stripe(trans, ptrs, wp, &devs, in __open_bucket_add_buckets()
973 ret = bch2_bucket_alloc_set_trans(trans, ptrs, &wp->stripe, &devs, in __open_bucket_add_buckets()
975 flags, wp->data_type, watermark, cl); in __open_bucket_add_buckets()
990 struct write_point *wp, in open_bucket_add_buckets() argument
1004 ret = __open_bucket_add_buckets(trans, ptrs, wp, in open_bucket_add_buckets()
1017 ret = __open_bucket_add_buckets(trans, ptrs, wp, in open_bucket_add_buckets()
1070 bool ec, struct write_point *wp) in bch2_writepoint_stop() argument
1076 mutex_lock(&wp->lock); in bch2_writepoint_stop()
1077 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_writepoint_stop()
1082 wp->ptrs = ptrs; in bch2_writepoint_stop()
1083 mutex_unlock(&wp->lock); in bch2_writepoint_stop()
1149 struct write_point *wp; in __writepoint_find() local
1152 hlist_for_each_entry_rcu(wp, head, node) in __writepoint_find()
1153 if (wp->write_point == write_point) in __writepoint_find()
1155 wp = NULL; in __writepoint_find()
1158 return wp; in __writepoint_find()
1171 struct write_point *wp; in try_increase_writepoints() local
1177 wp = c->write_points + c->write_points_nr++; in try_increase_writepoints()
1178 hlist_add_head_rcu(&wp->node, writepoint_hash(c, wp->write_point)); in try_increase_writepoints()
1185 struct write_point *wp; in try_decrease_writepoints() local
1201 wp = c->write_points + --c->write_points_nr; in try_decrease_writepoints()
1203 hlist_del_rcu(&wp->node); in try_decrease_writepoints()
1206 bch2_trans_mutex_lock_norelock(trans, &wp->lock); in try_decrease_writepoints()
1207 open_bucket_for_each(c, &wp->ptrs, ob, i) in try_decrease_writepoints()
1209 wp->ptrs.nr = 0; in try_decrease_writepoints()
1210 mutex_unlock(&wp->lock); in try_decrease_writepoints()
1218 struct write_point *wp, *oldest; in writepoint_find() local
1222 wp = (struct write_point *) write_point; in writepoint_find()
1223 bch2_trans_mutex_lock_norelock(trans, &wp->lock); in writepoint_find()
1224 return wp; in writepoint_find()
1229 wp = __writepoint_find(head, write_point); in writepoint_find()
1230 if (wp) { in writepoint_find()
1232 bch2_trans_mutex_lock_norelock(trans, &wp->lock); in writepoint_find()
1233 if (wp->write_point == write_point) in writepoint_find()
1235 mutex_unlock(&wp->lock); in writepoint_find()
1240 for (wp = c->write_points; in writepoint_find()
1241 wp < c->write_points + c->write_points_nr; wp++) in writepoint_find()
1242 if (!oldest || time_before64(wp->last_used, oldest->last_used)) in writepoint_find()
1243 oldest = wp; in writepoint_find()
1254 wp = __writepoint_find(head, write_point); in writepoint_find()
1255 if (wp && wp != oldest) { in writepoint_find()
1261 wp = oldest; in writepoint_find()
1262 hlist_del_rcu(&wp->node); in writepoint_find()
1263 wp->write_point = write_point; in writepoint_find()
1264 hlist_add_head_rcu(&wp->node, head); in writepoint_find()
1267 wp->last_used = local_clock(); in writepoint_find()
1268 return wp; in writepoint_find()
1311 struct write_point *wp; in bch2_alloc_sectors_start_trans() local
1329 *wp_ret = wp = writepoint_find(trans, write_point.v); in bch2_alloc_sectors_start_trans()
1336 if (wp->data_type != BCH_DATA_user) in bch2_alloc_sectors_start_trans()
1340 ret = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1351 int ret2 = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1370 ret = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1376 ret = open_bucket_add_buckets(trans, &ptrs, wp, devs_have, in bch2_alloc_sectors_start_trans()
1396 deallocate_extra_replicas(c, &ptrs, &wp->ptrs, nr_effective - nr_replicas); in bch2_alloc_sectors_start_trans()
1399 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_alloc_sectors_start_trans()
1402 wp->ptrs = ptrs; in bch2_alloc_sectors_start_trans()
1404 wp->sectors_free = UINT_MAX; in bch2_alloc_sectors_start_trans()
1406 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_alloc_sectors_start_trans()
1407 wp->sectors_free = min(wp->sectors_free, ob->sectors_free); in bch2_alloc_sectors_start_trans()
1409 BUG_ON(!wp->sectors_free || wp->sectors_free == UINT_MAX); in bch2_alloc_sectors_start_trans()
1413 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_alloc_sectors_start_trans()
1418 wp->ptrs = ptrs; in bch2_alloc_sectors_start_trans()
1420 mutex_unlock(&wp->lock); in bch2_alloc_sectors_start_trans()
1450 void bch2_alloc_sectors_append_ptrs(struct bch_fs *c, struct write_point *wp, in bch2_alloc_sectors_append_ptrs() argument
1454 bch2_alloc_sectors_append_ptrs_inlined(c, wp, k, sectors, cached); in bch2_alloc_sectors_append_ptrs()
1461 void bch2_alloc_sectors_done(struct bch_fs *c, struct write_point *wp) in bch2_alloc_sectors_done() argument
1463 bch2_alloc_sectors_done_inlined(c, wp); in bch2_alloc_sectors_done()
1466 static inline void writepoint_init(struct write_point *wp, in writepoint_init() argument
1469 mutex_init(&wp->lock); in writepoint_init()
1470 wp->data_type = type; in writepoint_init()
1472 INIT_WORK(&wp->index_update_work, bch2_write_point_do_index_updates); in writepoint_init()
1473 INIT_LIST_HEAD(&wp->writes); in writepoint_init()
1474 spin_lock_init(&wp->writes_lock); in writepoint_init()
1480 struct write_point *wp; in bch2_fs_allocator_foreground_init() local
1501 for (wp = c->write_points; in bch2_fs_allocator_foreground_init()
1502 wp < c->write_points + c->write_points_nr; wp++) { in bch2_fs_allocator_foreground_init()
1503 writepoint_init(wp, BCH_DATA_user); in bch2_fs_allocator_foreground_init()
1505 wp->last_used = local_clock(); in bch2_fs_allocator_foreground_init()
1506 wp->write_point = (unsigned long) wp; in bch2_fs_allocator_foreground_init()
1507 hlist_add_head_rcu(&wp->node, in bch2_fs_allocator_foreground_init()
1508 writepoint_hash(c, wp->write_point)); in bch2_fs_allocator_foreground_init()
1574 struct write_point *wp) in bch2_write_point_to_text() argument
1579 prt_printf(out, "%lu: ", wp->write_point); in bch2_write_point_to_text()
1580 prt_human_readable_u64(out, wp->sectors_allocated); in bch2_write_point_to_text()
1583 bch2_pr_time_units(out, sched_clock() - wp->last_used); in bch2_write_point_to_text()
1587 bch2_pr_time_units(out, wp->time[i]); in bch2_write_point_to_text()
1593 open_bucket_for_each(c, &wp->ptrs, ob, i) in bch2_write_point_to_text()
1600 struct write_point *wp; in bch2_write_points_to_text() local
1603 for (wp = c->write_points; in bch2_write_points_to_text()
1604 wp < c->write_points + ARRAY_SIZE(c->write_points); in bch2_write_points_to_text()
1605 wp++) in bch2_write_points_to_text()
1606 bch2_write_point_to_text(out, c, wp); in bch2_write_points_to_text()