fs: introduce f_op->mmap_capabilities for nommu mmap support
Since "BDI: Provide backing device capability information [try #3]" the backing_dev_info structure also provides flags for the kind of mmap operation available in a nommu environment, which is entirely unrelated to it's original purpose. Introduce a new nommu-only file operation to provide this information to the nommu mmap code instead. Splitting this from the backing_dev_info structure allows to remove lots of backing_dev_info instance that aren't otherwise needed, and entirely gets rid of the concept of providing a backing_dev_info for a character device. It also removes the need for the mtd_inodefs filesystem. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Tejun Heo <tj@kernel.org> Acked-by: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:

committed by
Jens Axboe

parent
97b713ba3e
commit
b4caecd480
@@ -726,16 +726,15 @@ static inline unsigned long mmap_prot(struct file *file, unsigned long prot)
|
||||
return prot | PROT_EXEC;
|
||||
/*
|
||||
* ditto if it's not on noexec mount, except that on !MMU we need
|
||||
* BDI_CAP_EXEC_MMAP (== VM_MAYEXEC) in this case
|
||||
* NOMMU_MAP_EXEC (== VM_MAYEXEC) in this case
|
||||
*/
|
||||
if (!(file->f_path.mnt->mnt_flags & MNT_NOEXEC)) {
|
||||
#ifndef CONFIG_MMU
|
||||
unsigned long caps = 0;
|
||||
struct address_space *mapping = file->f_mapping;
|
||||
if (mapping && mapping->backing_dev_info)
|
||||
caps = mapping->backing_dev_info->capabilities;
|
||||
if (!(caps & BDI_CAP_EXEC_MAP))
|
||||
return prot;
|
||||
if (file->f_op->mmap_capabilities) {
|
||||
unsigned caps = file->f_op->mmap_capabilities(file);
|
||||
if (!(caps & NOMMU_MAP_EXEC))
|
||||
return prot;
|
||||
}
|
||||
#endif
|
||||
return prot | PROT_EXEC;
|
||||
}
|
||||
|
Reference in New Issue
Block a user