romfs: do not use mtd->get_unmapped_area directly
Artem Bityutskiy [Wed, 28 Dec 2011 15:08:03 +0000 (17:08 +0200)]
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>

fs/romfs/mmap-nommu.c

index d5168e8..e1a7779 100644 (file)
@@ -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 (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT))
-                       return (unsigned long) -EINVAL;
+       if (addr != 0)
+               return (unsigned long) -EINVAL;
 
-               offset += ROMFS_I(inode)->i_dataoffset;
-               if (offset > mtd->size - len)
-                       return (unsigned long) -EINVAL;
+       if (len > mtd->size || pgoff >= (mtd->size >> PAGE_SHIFT))
+               return (unsigned long) -EINVAL;
 
-               return mtd_get_unmapped_area(mtd, len, offset, flags);
-       }
+       offset += ROMFS_I(inode)->i_dataoffset;
+       if (offset > mtd->size - len)
+               return (unsigned long) -EINVAL;
 
-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;
 }
 
 /*