On Fri, Jan 27, 2023 at 03:43:12PM +0100, Jan Kara wrote: > > Well, I think cond_resched() + goto retry would be OK here. We could also > cycle the corresponding group lock which would wait for > ext4_mb_discard_group_preallocations() to finish but that is going to burn > the CPU even more than the cond_resched() + retry as we'll be just spinning > on the spinlock. Sleeping is IMHO not warranted as the whole > ext4_mb_discard_group_preallocations() is running under a spinlock anyway > so it should better be a very short sleep. > > Or actually I have one more possible solution: What the adjusting function > is doing that it looks up PA before and after ac->ac_o_ex.fe_logical and > trims start & end to not overlap these PAs. So we could just lookup these > two PAs (ignoring the deleted state) and then just iterate from these with > rb_prev() & rb_next() until we find not-deleted ones. What do you think? Hey Jan, Just thought I'd update you, I'm trying this solution out, and it looks good but I'm hitting a few bugs in the implementation. Will update here once I have it working correctly. Regards, Ojaswin