lkml.org 
[lkml]   [2010]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[129/197] ocfs2: Change bg_chain check for ocfs2_validate_gd_parent.
    2.6.32-stable review patch.  If anyone has any objections, please let us know.

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

    From: Tao Ma <tao.ma@oracle.com>

    commit 78c37eb0d5e6a9727b12ea0f1821795ffaa66cfe upstream.

    In ocfs2_validate_gd_parent, we check bg_chain against the
    cl_next_free_rec of the dinode. Actually in resize, we have
    the chance of bg_chain == cl_next_free_rec. So add some
    additional condition check for it.

    I also rename paramter "clean_error" to "resize", since the
    old one is not clearly enough to indicate that we should only
    meet with this case in resize.

    btw, the correpsonding bug is
    http://oss.oracle.com/bugzilla/show_bug.cgi?id=1230.

    Signed-off-by: Tao Ma <tao.ma@oracle.com>
    Signed-off-by: Joel Becker <joel.becker@oracle.com>
    Cc: maximilian attems <max@stro.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/ocfs2/suballoc.c | 13 ++++++++-----
    1 file changed, 8 insertions(+), 5 deletions(-)

    --- a/fs/ocfs2/suballoc.c
    +++ b/fs/ocfs2/suballoc.c
    @@ -152,7 +152,7 @@ static u32 ocfs2_bits_per_group(struct o

    #define do_error(fmt, ...) \
    do{ \
    - if (clean_error) \
    + if (resize) \
    mlog(ML_ERROR, fmt "\n", ##__VA_ARGS__); \
    else \
    ocfs2_error(sb, fmt, ##__VA_ARGS__); \
    @@ -160,7 +160,7 @@ static u32 ocfs2_bits_per_group(struct o

    static int ocfs2_validate_gd_self(struct super_block *sb,
    struct buffer_head *bh,
    - int clean_error)
    + int resize)
    {
    struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data;

    @@ -211,7 +211,7 @@ static int ocfs2_validate_gd_self(struct
    static int ocfs2_validate_gd_parent(struct super_block *sb,
    struct ocfs2_dinode *di,
    struct buffer_head *bh,
    - int clean_error)
    + int resize)
    {
    unsigned int max_bits;
    struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *)bh->b_data;
    @@ -233,8 +233,11 @@ static int ocfs2_validate_gd_parent(stru
    return -EINVAL;
    }

    - if (le16_to_cpu(gd->bg_chain) >=
    - le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) {
    + /* In resize, we may meet the case bg_chain == cl_next_free_rec. */
    + if ((le16_to_cpu(gd->bg_chain) >
    + le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) ||
    + ((le16_to_cpu(gd->bg_chain) ==
    + le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) && !resize)) {
    do_error("Group descriptor #%llu has bad chain %u",
    (unsigned long long)bh->b_blocknr,
    le16_to_cpu(gd->bg_chain));



    \
     
     \ /
      Last update: 2010-04-22 21:51    [W:0.039 / U:3.632 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site