On Tue, Sep 16, 2025 at 03:08:54PM -0300, Jason Gunthorpe wrote: > On Tue, Sep 16, 2025 at 06:57:56PM +0100, Lorenzo Stoakes wrote: > > > > + /* > > > > + * If an error occurs, unmap the VMA altogether and return an > > > > error. We > > > > + * only clear the newly allocated VMA, since this function is > > > > only > > > > + * invoked if we do NOT merge, so we only clean up the VMA we > > > > created. > > > > + */ > > > > + if (err) { > > > > + const size_t len = vma_pages(vma) << PAGE_SHIFT; > > > > + > > > > + do_munmap(current->mm, vma->vm_start, len, NULL); > > > > + > > > > + if (action->error_hook) { > > > > + /* We may want to filter the error. */ > > > > + err = action->error_hook(err); > > > > + > > > > + /* The caller should not clear the error. */ > > > > + VM_WARN_ON_ONCE(!err); > > > > + } > > > > + return err; > > > > + } > > > Also seems like this cleanup wants to be in a function that is not > > > protected by #ifdef nommu since the code is identical on both branches. > > > > Not sure which cleanup you mean, this is new code :) > > I mean the code I quoted right abouve that cleans up the VMA on > error.. It is always the same finishing sequence, there is no nommu > dependency in it.
Ah right yeah. I wonder if it's useful if err != 0 for nommu anyway. > > Just put it all in some "finish mmap complete" function and call it in > both mmu and nommu versions. Ack! > > Jason > Cheers, Lorenzo