28 Apr, 2008

1 commit


03 Feb, 2008

1 commit


20 Oct, 2007

4 commits

  • Implement support for file systems larger than 8 TiB.

    The reiserfs superblock contains a 16 bit value for counting the number of
    bitmap blocks. The rest of the disk format supports file systems up to 2^32
    blocks, but the bitmap block limitation artificially limits this to 8 TiB with
    a 4KiB block size.

    Rather than trust the superblock's 16-bit bitmap block count, we calculate it
    dynamically based on the number of blocks in the file system. When an
    incorrect value is observed in the superblock, it is zeroed out, ensuring that
    older kernels will not be able to mount the file system.

    Userspace support has already been implemented and shipped in reiserfsprogs
    3.6.20.

    Signed-off-by: Jeff Mahoney
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • The first_zero_hint metadata caching was never actually used, and it's of
    dubious optimization quality. This patch removes it.

    It doesn't actually shrink the size of the reiserfs_bitmap_info struct, since
    that doesn't work with block sizes larger than 8K. There was a big fixme in
    there, and with all the work lately in allowing block size > page size, I
    might as well kill the fixme as well.

    Signed-off-by: Jeff Mahoney
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • Do a quick signedness check for block numbers. There are a number of places
    where signed integers are used for block numbers, which limits the usable file
    system size to 8 TiB. The disk format, excepting a problem which will be
    fixed in the following patch, supports file systems up to 16 TiB in size.
    This patch cleans up those sites so that we can enable the full usable size.

    Signed-off-by: Jeff Mahoney
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • Build in is_reusable() unconditionally and use it to catch corruption before
    it reaches the block freeing paths.

    Signed-off-by: Jeff Mahoney
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     

17 Oct, 2007

1 commit

  • - remove the following no longer used functions:
    - bitmap.c: reiserfs_claim_blocks_to_be_allocated()
    - bitmap.c: reiserfs_release_claimed_blocks()
    - bitmap.c: reiserfs_can_fit_pages()

    - make the following functions static:
    - inode.c: restart_transaction()
    - journal.c: reiserfs_async_progress_wait()

    Signed-off-by: Adrian Bunk
    Acked-by: Vladimir V. Saveliev
    Cc: Nick Piggin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     

09 Dec, 2006

1 commit


08 Oct, 2006

1 commit


01 Oct, 2006

5 commits

  • When a file system becomes fragmented (using MythTV, for example), the
    bigalloc window searching ends up causing huge performance problems. In a
    file system presented by a user experiencing this bug, the file system was
    90% free, but no 32-block free windows existed on the entire file system.
    This causes the allocator to scan the entire file system for each 128k
    write before backing down to searching for individual blocks.

    In the end, finding a contiguous window for all the blocks in a write is an
    advantageous special case, but one that can be found naturally when such a
    window exists anyway.

    This patch removes the bigalloc window searching, and has been proven to
    fix the test case described above.

    Signed-off-by: Jeff Mahoney
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • This is the patch the three previous ones have been leading up to.

    It changes the behavior of ReiserFS from loading and caching all the bitmaps
    as special, to treating the bitmaps like any other bit of metadata and just
    letting the system-wide caches figure out what to hang on to.

    Buffer heads are allocated on the fly, so there is no need to retain pointers
    to all of them. The caching of the metadata occurs when the data is read and
    updated, and is considered invalid and uncached until then.

    I needed to remove the vs-4040 check for performing a duplicate operation on a
    particular bit. The reason is that while the other sites for working with
    bitmaps are allowed to schedule, is_reusable() is called from do_balance(),
    which will panic if a schedule occurs in certain places.

    The benefit of on-demand bitmaps clearly outweighs a sanity check that depends
    on a compile-time option that is discouraged.

    [akpm@osdl.org: warning fix]
    Signed-off-by: Jeff Mahoney
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • This patch moves the bitmap loading code from super.c to bitmap.c

    The code is also restructured somewhat. The only difference between new
    format bitmaps and old format bitmaps is where they are. That's a two liner
    before loading the block to use the correct one. There's no need for an
    entirely separate code path.

    The load path is generally the same, with the pattern being to throw out a
    bunch of requests and then wait for them, then cache the metadata from the
    contents.

    Again, like the previous patches, the purpose is to set up for later ones.

    Update: There was a bug in the previously posted version of this that resulted
    in corruption. The problem was that bitmap 0 on new format file systems must
    be treated specially, and wasn't. A stupid bug with an easy fix.

    This is hopefully the last fix for the disaster that is the reiserfs bitmap
    patch set.

    If a bitmap block was full, first_zero_hint would end up at zero since it
    would never be changed from it's zeroed out value. This just sets it
    beyond the end of the bitmap block. If any bits are freed, it will be
    reset to a valid bit. When info->free_count = 0, then we already know it's
    full.

    Signed-off-by: Jeff Mahoney
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • Similar to the SB_JOURNAL cleanup that was accepted a while ago, this patch
    uses a temporary variable for buffer head references from the bitmap info
    array.

    This makes the code much more readable in some areas.

    It also uses proper reference counting, doing a get_bh() after using the
    pointer from the array and brelse()'ing it later. This may seem silly, but a
    later patch will replace the simple temporary variables with an actual read,
    so the reference freeing will be used then.

    Signed-off-by: Jeff Mahoney
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     
  • There is a check in is_reusable to determine if a particular block is a bitmap
    block. It verifies this by going through the array of bitmap block buffer
    heads and comparing the block number to each one.

    Bitmap blocks are at defined locations on the disk in both old and current
    formats. Simply checking against the known good values is enough.

    This is a trivial optimization for a non-production codepath, but this is the
    first in a series of patches that will ultimately remove the buffer heads from
    that array.

    Signed-off-by: Jeff Mahoney
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jeff Mahoney
     

01 Jul, 2006

1 commit


13 Jul, 2005

1 commit

  • This was a pure indentation change, using:

    scripts/Lindent fs/reiserfs/*.c include/linux/reiserfs_*.h

    to make reiserfs match the regular Linux indentation style. As Jeff
    Mahoney writes:

    The ReiserFS code is a mix of a number of different coding styles, sometimes
    different even from line-to-line. Since the code has been relatively stable
    for quite some time and there are few outstanding patches to be applied, it
    is time to reformat the code to conform to the Linux style standard outlined
    in Documentation/CodingStyle.

    This patch contains the result of running scripts/Lindent against
    fs/reiserfs/*.c and include/linux/reiserfs_*.h. There are places where the
    code can be made to look better, but I'd rather keep those patches separate
    so that there isn't a subtle by-hand hand accident in the middle of a huge
    patch. To be clear: This patch is reformatting *only*.

    A number of patches may follow that continue to make the code more consistent
    with the Linux coding style.

    Hans wasn't particularly enthusiastic about these patches, but said he
    wouldn't really oppose them either.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

01 May, 2005

2 commits

  • little-endian objects annotated as such; again, obviously no changes of
    resulting code, we only replace __u16 with __le16, etc. in relevant places.

    Signed-off-by: Al Viro
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     
  • struct reiserfs_key cloned; (currently) identical struct in_core_key added.
    Places that expect host-endian data in reiserfs_key switched to in_core_key.
    Basically, we get annotation of reiserfs_key users and keep the resulting tree
    obviously equivalent to original.

    Signed-off-by: Al Viro
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Al Viro
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds