lkml.org 
[lkml]   [2006]   [Jun]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: bitmap loading related reiserfs changes in 2.6.17-mm1 are broken
    On Wed, 21 Jun 2006 23:27:33 -0400
    Nick Orlov <bugfixer@list.ru> wrote:

    > subj.
    >
    > I've got a lot of BUG's during the boot and eventually box locked up.
    > SYS-RQ worked. Unfortunately none of these errors did make it to log files,
    > so I cannot provide the backtraces.
    >
    > But reverting last 4 patches of reiserfs-changes series, namely
    >
    > reiserfs-reorganize-bitmap-loading-functions.patch
    > reiserfs-on-demand-bitmap-loading.patch
    > reiserfs-on-demand-bitmap-loading-fix.patch
    > reiserfs-use-generic_file_open-for-open-checks.patch
    >
    > fixed the problem for me.
    >

    Yeah, sorry. I've uploaded the below to the hot-fixes directory - it
    should repair things.


    Jeff, given its track record, I have to say that my confidence in this work
    is nanoscopic. Given that, and given the importance of reiserfs and given
    the low rate of reiser3 development and given my ignorance of how reiserfs
    works, I'm inclined to move very slowly on these patches.

    It would really help if Chris or one of the namesys developers could take
    the time to review and test these patches closely, please.



    diff -puN fs/reiserfs/bitmap.c~reiserfs-reorganize-bitmap-loading-functions-fix fs/reiserfs/bitmap.c
    --- a/fs/reiserfs/bitmap.c~reiserfs-reorganize-bitmap-loading-functions-fix
    +++ a/fs/reiserfs/bitmap.c
    @@ -1292,25 +1292,25 @@ void reiserfs_cache_bitmap_metadata(stru
    struct buffer_head *bh,
    struct reiserfs_bitmap_info *info)
    {
    - unsigned long *cur = (unsigned long *)bh->b_data;
    - int i;
    + unsigned long *cur = (unsigned long *)(bh->b_data + bh->b_size);
    +
    + while (--cur >= (unsigned long *)bh->b_data) {
    + int base = ((char *)cur - bh->b_data) << 3;

    - for (i = sb->s_blocksize / sizeof (*cur); i > 0; i--, cur++) {
    /* 0 and ~0 are special, we can optimize for them */
    if (*cur == 0) {
    - info->first_zero_hint = i << 3;
    - info->free_count += sizeof (*cur) << 3;
    + info->first_zero_hint = base;
    + info->free_count += BITS_PER_LONG;
    } else if (*cur != ~0L) { /* A mix, investigate */
    int b;
    - for (b = sizeof (*cur) << 3; b >= 0; b--) {
    + for (b = BITS_PER_LONG - 1; b >= 0; b--) {
    if (!reiserfs_test_le_bit(b, cur)) {
    - info->first_zero_hint = (i << 3) + b;
    + info->first_zero_hint = base + b;
    info->free_count++;
    }
    }
    }
    }
    -
    /* The first bit must ALWAYS be 1 */
    BUG_ON(info->first_zero_hint == 0);
    }
    _
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-06-22 05:45    [W:0.028 / U:0.148 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site