mtd: do not use mtd->read_oob directly
Artem Bityutskiy [Wed, 28 Dec 2011 15:50:34 +0000 (17:50 +0200)]
Instead of checking whether 'mtd->read_oob' is defined, just call
'mtd_read_oob()' and handle the '-EOPNOTSUPP' error which will be returned
if the function is undefined.

Additionally, make 'mtd_write_oob()' return '-EOPNOTSUPP' if the function
is undefined.

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

drivers/mtd/mtdchar.c
include/linux/mtd/mtd.h

index 55f0961..287ff0d 100644 (file)
@@ -452,13 +452,8 @@ static int mtdchar_readoob(struct file *file, struct mtd_info *mtd,
        if (length > 4096)
                return -EINVAL;
 
-       if (!mtd->read_oob)
-               ret = -EOPNOTSUPP;
-       else
-               ret = access_ok(VERIFY_WRITE, ptr,
-                               length) ? 0 : -EFAULT;
-       if (ret)
-               return ret;
+       if (!access_ok(VERIFY_WRITE, ptr, length))
+               return -EFAULT;
 
        ops.ooblen = length;
        ops.ooboffs = start & (mtd->writesize - 1);
index b729640..721a63f 100644 (file)
@@ -320,6 +320,8 @@ static inline int mtd_read_oob(struct mtd_info *mtd, loff_t from,
                               struct mtd_oob_ops *ops)
 {
        ops->retlen = ops->oobretlen = 0;
+       if (!mtd->read_oob)
+               return -EOPNOTSUPP;
        return mtd->read_oob(mtd, from, ops);
 }
 
@@ -327,6 +329,8 @@ static inline int mtd_write_oob(struct mtd_info *mtd, loff_t to,
                                struct mtd_oob_ops *ops)
 {
        ops->retlen = ops->oobretlen = 0;
+       if (!mtd->write_oob)
+               return -EOPNOTSUPP;
        return mtd->write_oob(mtd, to, ops);
 }