53a4da13f5
In theory this is pretty much the same as lfsr_mkdir, but backwards. The main work was making the interactions between removing mids/rids and the grm correct. This ends up meaning we just need to update the grm on any mid/rid update the same way we update the list of opened mdirs. On the plus side, it turned out to be possible to deduplicate the mdir uninlining route a bit, by adding range argument to lfsr_mdir_commit_ and changing the write of the newly uninlined mtree/mdir to marking mtree as dirty and then joining the common path. This lets us move the pre-commit round of grm updates into a single location in lfsr_mdir_commit, removing and extra function definition and the related state marshalling while also simplifying the control-flow. This also raises the question, can more lfsr_mdir_commit be deduplicated more? Uninlining is a infrequent operation we don't really need to optimize for. --- Testing lfsr_remove also found a bug related to incorrect propagation of when the mroot becomes "unerased" (when rbyd overflows). This raises the concern that we're not propagating unerased-states very rigorously, and unexpected errors may not allow the filesystem to resume. This has never been in a very good place for littlefs, but would be worth improving in the future.