|
@@ -622,6 +622,13 @@ static int bch_mca_shrink(struct shrinker *shrink, struct shrink_control *sc)
|
|
|
else if (!mutex_trylock(&c->bucket_lock))
|
|
|
return -1;
|
|
|
|
|
|
+ /*
|
|
|
+ * It's _really_ critical that we don't free too many btree nodes - we
|
|
|
+ * have to always leave ourselves a reserve. The reserve is how we
|
|
|
+ * guarantee that allocating memory for a new btree node can always
|
|
|
+ * succeed, so that inserting keys into the btree can always succeed and
|
|
|
+ * IO can always make forward progress:
|
|
|
+ */
|
|
|
nr /= c->btree_pages;
|
|
|
nr = min_t(unsigned long, nr, mca_can_free(c));
|
|
|
|