28 Aug, 2006

1 commit

  • 1) When we allocated last fragment in ufs_truncate, we read page, check
    if block mapped to address, and if not trying to allocate it. This is
    wrong behaviour, fragment may be NOT allocated, but mapped, this
    happened because of "block map" function not checked allocated fragment
    or not, it just take address of the first fragment in the block, add
    offset of fragment and return result, this is correct behaviour in
    almost all situation except call from ufs_truncate.

    2) Almost all implementation of UFS, which I can investigate have such
    "defect": if you have full disk, and try truncate file, for example 3GB
    to 2MB, and have hole in this region, truncate return -ENOSPC. I tried
    evade from this problem, but "block allocation" algorithm is tied to
    right value of i_lastfrag, and fix of this corner case may slow down of
    ordinaries scenarios, so this patch makes behavior of "truncate"
    operations similar to what other UFS implementations do.

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     

02 Jul, 2006

1 commit

  • This patch fixes buggy behaviour of UFS
    in such kind of scenario:
    open(, O_TRUNC...)
    ftruncate(, 1024)
    ftruncate(, 0)

    Such a scenario causes ufs_panic and remount read-only. This happen
    because of according to specification UFS should always allocate block for
    last byte, and many parts of our implementation rely on this, but
    `ufs_truncate' doesn't care about this.

    To make possible return error code and to know about old size, this patch
    removes `truncate' from ufs inode_operations and uses `setattr' method to
    call ufs_truncate.

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     

26 Jun, 2006

4 commits

  • In ufs code there is function: ubh_ll_rw_block, it has parameter how many
    ufs_buffer_head it should handle, but it always called with "1" on the place
    of this parameter. This patch removes unused parameter of "ubh_ll_wr_block".

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     
  • At now UFS code uses DQUOT_* mechanism, but it also update inode->i_blocks
    manually, this cause wrong i_blocks value.

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     
  • Currently to turn on debug mode "user" has to edit ~10 files, to turn off he
    has to do it again.

    This patch introduce such changes:
    1)turn on(off) debug messages via ".config"
    2)remove unnecessary duplication of code
    3)make "UFSD" macros more similar to function
    4)fix some compiler warnings

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     
  • Currently, ufs write support have two sets of problems: work with files and
    work with directories.

    This series of patches should solve the first problem.

    This patch is similar to http://lkml.org/lkml/2006/1/17/61 this patch
    complements it.

    The situation the same: in ufs_trunc_(not direct), we read block, check if
    count of links to it is equal to one, if so we finish cycle, if not
    continue. Because of "count of links" always >=2 this operation cause
    infinite cycle and hang up the kernel.

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     

04 Feb, 2006

1 commit

  • This fixes the code like this:

    bh = sb_find_get_block (sb, tmp + j);
    if ((bh && DATA_BUFFER_USED(bh)) || tmp != fs32_to_cpu(sb, *p)) {
    retry = 1;
    brelse (bh);
    goto next1;
    }
    bforget (bh);

    sb_find_get_block() ordinarily returns a buffer_head with b_count>=2, and
    this code assume that in case if "b_count>1" buffer is used, so this caused
    infinite loop.

    (akpm: that is-the-buffer-busy code is incomprehensible. Good riddance. Use
    of block_truncate_page() seems sane).

    Signed-off-by: Evgeniy Dushistov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeniy Dushistov
     

08 Sep, 2005

1 commit


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