summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2022-10-11 06:40:24 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2022-10-11 06:40:30 -0400
commite66011cd2c8aa1c1e78085704a9a2514c6b7ccd1 (patch)
tree648c7c31a9051580a86d82208498992617cf59ac
parent0398adf20f4240f87ea33b975336ac3150b08707 (diff)
Update bcachefs sources to 6dc2a699c6 bcachefs: bch2_path_put_nokeep()
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/backpointers.c6
-rw-r--r--libbcachefs/btree_iter.c30
-rw-r--r--libbcachefs/btree_update_leaf.c5
-rw-r--r--libbcachefs/buckets.c2
-rw-r--r--linux/shrinker.c1
6 files changed, 33 insertions, 13 deletions
diff --git a/.bcachefs_revision b/.bcachefs_revision
index 794a3014..9c88209f 100644
--- a/.bcachefs_revision
+++ b/.bcachefs_revision
@@ -1 +1 @@
-55f0b5944bb7f02baa6b7b854fd4d294d974bfb6
+6dc2a699c6d2e04027bdc670141e6f313c751ff0
diff --git a/libbcachefs/backpointers.c b/libbcachefs/backpointers.c
index c9abb5ee..9e0430a7 100644
--- a/libbcachefs/backpointers.c
+++ b/libbcachefs/backpointers.c
@@ -816,9 +816,11 @@ static inline struct bbpos bp_to_bbpos(struct bch_backpointer bp)
static size_t btree_nodes_fit_in_ram(struct bch_fs *c)
{
struct sysinfo i;
+ u64 mem_bytes;
si_meminfo(&i);
- return (i.totalram >> 1) / btree_bytes(c);
+ mem_bytes = i.totalram * i.mem_unit;
+ return (mem_bytes >> 1) / btree_bytes(c);
}
int bch2_get_btree_in_memory_pos(struct btree_trans *trans,
@@ -1005,7 +1007,7 @@ int bch2_check_backpointers_to_extents(struct bch_fs *c)
bbpos_cmp(end, BBPOS_MAX)) {
struct printbuf buf = PRINTBUF;
- prt_str(&buf, "check_backointers_to_extents(): ");
+ prt_str(&buf, "check_backpointers_to_extents(): ");
bch2_bbpos_to_text(&buf, start);
prt_str(&buf, "-");
bch2_bbpos_to_text(&buf, end);
diff --git a/libbcachefs/btree_iter.c b/libbcachefs/btree_iter.c
index dffb0170..cd903fdc 100644
--- a/libbcachefs/btree_iter.c
+++ b/libbcachefs/btree_iter.c
@@ -1320,6 +1320,20 @@ void bch2_path_put(struct btree_trans *trans, struct btree_path *path, bool inte
__bch2_path_free(trans, path);
}
+static void bch2_path_put_nokeep(struct btree_trans *trans, struct btree_path *path,
+ bool intent)
+{
+ struct btree_path *dup;
+
+ EBUG_ON(trans->paths + path->idx != path);
+ EBUG_ON(!path->ref);
+
+ if (!__btree_path_put(path, intent))
+ return;
+
+ __bch2_path_free(trans, path);
+}
+
void bch2_trans_updates_to_text(struct printbuf *buf, struct btree_trans *trans)
{
struct btree_insert_entry *i;
@@ -1952,8 +1966,8 @@ struct bkey_s_c bch2_btree_iter_peek_upto(struct btree_iter *iter, struct bpos e
EBUG_ON(iter->flags & BTREE_ITER_ALL_LEVELS);
if (iter->update_path) {
- bch2_path_put(trans, iter->update_path,
- iter->flags & BTREE_ITER_INTENT);
+ bch2_path_put_nokeep(trans, iter->update_path,
+ iter->flags & BTREE_ITER_INTENT);
iter->update_path = NULL;
}
@@ -1984,8 +1998,8 @@ struct bkey_s_c bch2_btree_iter_peek_upto(struct btree_iter *iter, struct bpos e
if (iter->update_path &&
bkey_cmp(iter->update_path->pos, k.k->p)) {
- bch2_path_put(trans, iter->update_path,
- iter->flags & BTREE_ITER_INTENT);
+ bch2_path_put_nokeep(trans, iter->update_path,
+ iter->flags & BTREE_ITER_INTENT);
iter->update_path = NULL;
}
@@ -2233,7 +2247,7 @@ struct bkey_s_c bch2_btree_iter_peek_prev(struct btree_iter *iter)
* that candidate
*/
if (saved_path && bkey_cmp(k.k->p, saved_k.p)) {
- bch2_path_put(trans, iter->path,
+ bch2_path_put_nokeep(trans, iter->path,
iter->flags & BTREE_ITER_INTENT);
iter->path = saved_path;
saved_path = NULL;
@@ -2246,7 +2260,7 @@ struct bkey_s_c bch2_btree_iter_peek_prev(struct btree_iter *iter)
iter->snapshot,
k.k->p.snapshot)) {
if (saved_path)
- bch2_path_put(trans, saved_path,
+ bch2_path_put_nokeep(trans, saved_path,
iter->flags & BTREE_ITER_INTENT);
saved_path = btree_path_clone(trans, iter->path,
iter->flags & BTREE_ITER_INTENT);
@@ -2290,7 +2304,7 @@ got_key:
btree_path_set_should_be_locked(iter->path);
out_no_locked:
if (saved_path)
- bch2_path_put(trans, saved_path, iter->flags & BTREE_ITER_INTENT);
+ bch2_path_put_nokeep(trans, saved_path, iter->flags & BTREE_ITER_INTENT);
bch2_btree_iter_verify_entry_exit(iter);
bch2_btree_iter_verify(iter);
@@ -2578,7 +2592,7 @@ void bch2_trans_iter_exit(struct btree_trans *trans, struct btree_iter *iter)
bch2_path_put(trans, iter->path,
iter->flags & BTREE_ITER_INTENT);
if (iter->update_path)
- bch2_path_put(trans, iter->update_path,
+ bch2_path_put_nokeep(trans, iter->update_path,
iter->flags & BTREE_ITER_INTENT);
if (iter->key_cache_path)
bch2_path_put(trans, iter->key_cache_path,
diff --git a/libbcachefs/btree_update_leaf.c b/libbcachefs/btree_update_leaf.c
index af3fbfcc..b166ab4b 100644
--- a/libbcachefs/btree_update_leaf.c
+++ b/libbcachefs/btree_update_leaf.c
@@ -1623,7 +1623,7 @@ int bch2_btree_delete_range_trans(struct btree_trans *trans, enum btree_id id,
int ret = 0;
bch2_trans_iter_init(trans, &iter, id, start, BTREE_ITER_INTENT);
- while ((k = bch2_btree_iter_peek_upto(&iter, bpos_predecessor(end))).k) {
+ while ((k = bch2_btree_iter_peek(&iter)).k) {
struct disk_reservation disk_res =
bch2_disk_reservation_init(trans->c, 0);
struct bkey_i delete;
@@ -1632,6 +1632,9 @@ int bch2_btree_delete_range_trans(struct btree_trans *trans, enum btree_id id,
if (ret)
goto err;
+ if (bkey_cmp(iter.pos, end) >= 0)
+ break;
+
bkey_init(&delete.k);
/*
diff --git a/libbcachefs/buckets.c b/libbcachefs/buckets.c
index de57e625..c611931f 100644
--- a/libbcachefs/buckets.c
+++ b/libbcachefs/buckets.c
@@ -575,7 +575,7 @@ int bch2_mark_alloc(struct btree_trans *trans,
if ((flags & BTREE_TRIGGER_BUCKET_INVALIDATE) &&
old_a.cached_sectors) {
ret = update_cached_sectors(c, new, ca->dev_idx,
- -old_a.cached_sectors,
+ -((s64) old_a.cached_sectors),
journal_seq, gc);
if (ret) {
bch2_fs_fatal_error(c, "bch2_mark_alloc(): no replicas entry while updating cached sectors");
diff --git a/linux/shrinker.c b/linux/shrinker.c
index 0f73620b..23e288d8 100644
--- a/linux/shrinker.c
+++ b/linux/shrinker.c
@@ -48,6 +48,7 @@ void si_meminfo(struct sysinfo *val)
FILE *f;
memset(val, 0, sizeof(*val));
+ val->mem_unit = 1;
f = fopen("/proc/meminfo", "r");
if (!f)