Did you modify Claudio's patch or write a totally new one?
I wrote completely new patch. I tried multiple techniques like using a list instead of fixed size array which I thought was most suitable here, but leave that because of conflict with Parallel Vacuum.
In either case, why did you choose that approach?
This is the simplest technique. I just divided the maintenance_work_mem in chunks and allocate chunks as needed. This technique change minimum code and do what we want to achieve.
If you wrote a totally new one, have you compared your work with Claudio's, to see if he covered anything you might need to cover?
No, this part I missed, I will do that and will share my thoughts.
I checked the patch, and it does not do anything special which my patch is not doing except one thing. The patch is claiming to increase the limit of 1GB along with that, but I have not touched that. In my case, we are still under the limit of maintaines_work_mem but allocate memory in chunks. In that case, you have the leverage to set a big value of maintaness_work_mem (even if you don't need that) because it will not allocate all the memory at the start.
Secondly, the patch refactors the whole area of code which makes this patch larger than expected. The code changes in the patch are almost doubled from my patch. By the way, now I took the test cases from the patch and included that into my patch (Credit Claudio)