We weren't checking for errors when trying to delet stripes, which meant
ec_stripe_delete_work() would spin trying to delete the same stripe over
and over.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
bch2_stripes_heap_insert(c, m, idx);
}
- if (stripe_idx_to_delete(c) >= 0)
+ if (stripe_idx_to_delete(c) >= 0 &&
+ !percpu_ref_is_dying(&c->writes))
schedule_work(&c->ec_stripe_delete_work);
}
if (idx < 0)
break;
- ec_stripe_delete(c, idx);
+ if (ec_stripe_delete(c, idx))
+ break;
}
mutex_unlock(&c->ec_stripe_create_lock);
schedule_delayed_work(&c->pd_controllers_update, 5 * HZ);
+ schedule_work(&c->ec_stripe_delete_work);
+
return 0;
}