|
@@ -1192,6 +1192,28 @@ void unmap_mapping_range(struct address_space *mapping,
|
|
|
}
|
|
|
EXPORT_SYMBOL(unmap_mapping_range);
|
|
|
|
|
|
+/*
|
|
|
+ * ask for an unmapped area at which to create a mapping on a file
|
|
|
+ */
|
|
|
+unsigned long get_unmapped_area(struct file *file, unsigned long addr,
|
|
|
+ unsigned long len, unsigned long pgoff,
|
|
|
+ unsigned long flags)
|
|
|
+{
|
|
|
+ unsigned long (*get_area)(struct file *, unsigned long, unsigned long,
|
|
|
+ unsigned long, unsigned long);
|
|
|
+
|
|
|
+ get_area = current->mm->get_unmapped_area;
|
|
|
+ if (file && file->f_op && file->f_op->get_unmapped_area)
|
|
|
+ get_area = file->f_op->get_unmapped_area;
|
|
|
+
|
|
|
+ if (!get_area)
|
|
|
+ return -ENOSYS;
|
|
|
+
|
|
|
+ return get_area(file, addr, len, pgoff, flags);
|
|
|
+}
|
|
|
+
|
|
|
+EXPORT_SYMBOL(get_unmapped_area);
|
|
|
+
|
|
|
/*
|
|
|
* Check that a process has enough memory to allocate a new virtual
|
|
|
* mapping. 0 means there is enough memory for the allocation to
|