Since commit c84bf6dd2b83 ("mm: introduce new .mmap_prepare() file callback"), The f_op->mmap hook has been deprecated in favour of f_op->mmap_prepare. This was introduced in order to make it possible for us to eventually eliminate the f_op->mmap hook which is highly problematic as it allows drivers and filesystems raw access to a VMA which is not yet correctly initialised. This hook also introduces complexity for the memory mapping operation, as we must correctly unwind what we do should an error arises. Overall this interface being so open has caused significant problems for us, including security issues, it is important for us to simply eliminate this as a source of problems. Therefore this series continues what was established by extending the functionality further to permit more drivers and filesystems to use mmap_prepare. After updating some areas that can simply use mmap_prepare as-is, and performing some housekeeping, we then introduce two new hooks: f_op->mmap_complete - this is invoked at the point of the VMA having been correctly inserted, though with the VMA write lock still held. mmap_prepare must also be specified. This expands the use of mmap_prepare to those callers which need to prepopulate mappings, as well as any which does genuinely require access to the VMA. It's simple - we will let the caller access the VMA, but only once it's established. At this point unwinding issues is simple - we just unmap the VMA. The VMA is also then correctly initialised at this stage so there can be no issues arising from a not-fully initialised VMA at this point. The other newly added hook is: f_op->mmap_abort - this is only valid in conjunction with mmap_prepare and mmap_complete. This is called should an error arise between mmap_prepare and mmap_complete (not as a result of mmap_prepare but rather some other part of the mapping logic). This is required in case mmap_prepare wishes to establish state or locks which need to be cleaned up on completion. If we did not provide this, then this could not be permitted as this cleanup would otherwise not occur should the mapping fail between the two calls. We then add split remap_pfn_range*() functions which allow for PFN remap (a typical mapping prepopulation operation) split between a prepare/complete step, as well as io_mremap_pfn_range_prepare, complete for a similar purpose.