lkml.org 
[lkml]   [2012]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 131/133] JFFS2: dont fail on bitflips in OOB
    Date
    3.5-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Brian Norris <computersforpeace@gmail.com>

    commit 74d83beaa229aac7d126ac1ed9414658ff1a89d2 upstream.

    JFFS2 was designed without thought for OOB bitflips, it seems, but they
    can occur and will be reported to JFFS2 via mtd_read_oob()[1]. We don't
    want to fail on these transactions, since the data was corrected.

    [1] Few drivers report bitflips for OOB-only transactions. With such
    drivers, this patch should have no effect.

    Signed-off-by: Brian Norris <computersforpeace@gmail.com>
    Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
    Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/jffs2/wbuf.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/fs/jffs2/wbuf.c
    +++ b/fs/jffs2/wbuf.c
    @@ -1044,10 +1044,10 @@ int jffs2_check_oob_empty(struct jffs2_s
    ops.datbuf = NULL;

    ret = mtd_read_oob(c->mtd, jeb->offset, &ops);
    - if (ret || ops.oobretlen != ops.ooblen) {
    + if ((ret && !mtd_is_bitflip(ret)) || ops.oobretlen != ops.ooblen) {
    pr_err("cannot read OOB for EB at %08x, requested %zd bytes, read %zd bytes, error %d\n",
    jeb->offset, ops.ooblen, ops.oobretlen, ret);
    - if (!ret)
    + if (!ret || mtd_is_bitflip(ret))
    ret = -EIO;
    return ret;
    }
    @@ -1086,10 +1086,10 @@ int jffs2_check_nand_cleanmarker(struct
    ops.datbuf = NULL;

    ret = mtd_read_oob(c->mtd, jeb->offset, &ops);
    - if (ret || ops.oobretlen != ops.ooblen) {
    + if ((ret && !mtd_is_bitflip(ret)) || ops.oobretlen != ops.ooblen) {
    pr_err("cannot read OOB for EB at %08x, requested %zd bytes, read %zd bytes, error %d\n",
    jeb->offset, ops.ooblen, ops.oobretlen, ret);
    - if (!ret)
    + if (!ret || mtd_is_bitflip(ret))
    ret = -EIO;
    return ret;
    }



    \
     
     \ /
      Last update: 2012-10-11 03:21    [W:4.225 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site