romfs: do not use mtd->get_unmapped_area directly
Remove direct usage of mtd->get_unmapped_area. Instead, just call 'mtd_get_unmapped_area()' which will return -EOPNOTSUPP if the function is not implemented, and then test for this code. We also translate -EOPNOTSUPP to -ENOSYS because this return code is probably part of the kernel ABI which we do not want to break. Cc: linux-fsdevel@vger.kernel.org Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
cd621274b0
commit
4991e7251e
1 changed files with 13 additions and 15 deletions
|
@ -28,9 +28,10 @@ static unsigned long romfs_get_unmapped_area(struct file *file,
|
|||
struct inode *inode = file->f_mapping->host;
|
||||
struct mtd_info *mtd = inode->i_sb->s_mtd;
|
||||
unsigned long isize, offset, maxpages, lpages;
|
||||
int ret;
|
||||
|
||||
if (!mtd)
|
||||
goto cant_map_directly;
|
||||
return (unsigned long) -ENOSYS;
|
||||
|
||||
/* the mapping mustn't extend beyond the EOF */
|
||||
lpages = (len + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
|
@ -41,23 +42,20 @@ static unsigned long romfs_get_unmapped_area(struct file *file,
|
|||
if ((pgoff >= maxpages) || (maxpages - pgoff < lpages))
|
||||
return (unsigned long) -EINVAL;
|
||||
|
||||
/* we need to call down to the MTD layer to do the actual mapping */
|
||||
if (mtd->get_unmapped_area) {
|
||||
if (addr != 0)
|
||||
return (unsigned long) -EINVAL;
|
||||
if (addr != 0)
|
||||
return (unsigned long) -EINVAL;
|
||||
|
||||
if (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT))
|
||||
return (unsigned long) -EINVAL;
|
||||
if (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT))
|
||||
return (unsigned long) -EINVAL;
|
||||
|
||||
offset += ROMFS_I(inode)->i_dataoffset;
|
||||
if (offset > mtd->size - len)
|
||||
return (unsigned long) -EINVAL;
|
||||
offset += ROMFS_I(inode)->i_dataoffset;
|
||||
if (offset > mtd->size - len)
|
||||
return (unsigned long) -EINVAL;
|
||||
|
||||
return mtd_get_unmapped_area(mtd, len, offset, flags);
|
||||
}
|
||||
|
||||
cant_map_directly:
|
||||
return (unsigned long) -ENOSYS;
|
||||
ret = mtd_get_unmapped_area(mtd, len, offset, flags);
|
||||
if (ret == -EOPNOTSUPP)
|
||||
ret = -ENOSYS;
|
||||
return (unsigned long) ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue