/* Schedule all required I/O operations. Do not wait for completion.  */
static long madvise_willneed(struct vm_area_struct *vma, struct vm_area_struct **prev, unsigned long start, unsigned long end)
/* Schedule all required I/O operations. Do not wait for completion.  */
static long madvise_willneed(struct vm_area_struct *vma, struct vm_area_struct **prev, unsigned long start, unsigned long end)
{
	struct file *file = vma->vm_file;
	if (!file)
		return -EBADF;
	if (file->f_mapping->a_ops->get_xip_mem) {
		return 0;
	}
	*prev = vma;
	start = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
	if (end > vma->vm_end)
		end = vma->vm_end;
	end = ((end - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
	force_page_cache_readahead(file->f_mapping, file, start, end - start);
	return 0;
}