24 Sep, 2007

1 commit

  • Fix a couple of instances in JFFS2 where the unpoint() routine is
    being called with the wrong length in cases where the point() routine
    truncated a request.

    Signed-off-by: Andy Lowe
    Signed-off-by: Nicolas Pitre
    Signed-off-by: David Woodhouse

    Andy Lowe
     

10 Jul, 2007

1 commit


05 Jul, 2007

1 commit


04 Jul, 2007

1 commit


29 Jun, 2007

1 commit


02 Jun, 2007

1 commit


01 Jun, 2007

1 commit


08 May, 2007

1 commit


07 May, 2007

1 commit

  • We attempted to insert new nodes into the tree by just using
    rb_replace_node to let them replace an earlier node which they
    completely overlapped. However, that could place the new node into the
    wrong place in the tree, since its start could be node only before the
    start of the victim, but before the node _before_ the victim in the tree
    (if that previous node actually ends _after_ the new node, thus isn't
    entirely overlapped and wasn't itself chosen to be the victim).

    Signed-off-by: David Woodhouse

    David Woodhouse
     

06 May, 2007

1 commit

  • The original code would remember, during the first pass over the tree,
    a suitable place to start the insertion from when we eventually come
    to add a new node.

    The optimisation was broken, and we sometimes ended up inserting a new
    node in the wrong place because we started the insertion from the wrong
    point.

    Just ditch the optimisation and start the insertion from the root of the
    tree, for now. I'll try it again when I'm feeling cleverer.

    Signed-off-by: David Woodhouse

    David Woodhouse
     

05 May, 2007

1 commit


26 Apr, 2007

1 commit


25 Apr, 2007

3 commits

  • In particular, remove the bit in the LICENCE file about contacting
    Red Hat for alternative arrangements. Their errant IS department broke
    that arrangement a long time ago -- the policy of collecting copyright
    assignments from contributors came to an end when the plug was pulled on
    the servers hosting the project, without notice or reason.

    We do still dual-license it for use with eCos, with the GPL+exception
    licence approved by the FSF as being GPL-compatible. It's just that nobody
    has the right to license it differently.

    Signed-off-by: David Woodhouse

    David Woodhouse
     
  • No need to check for all-zero header since the header cannot
    be zero due to other checks.

    Replace the all-zero header check in readinode.c with a
    check for the magic word.

    Signed-off-by: Joakim Tjernlund
    Signed-off-by: David Woodhouse

    Joakim Tjernlund
     
  • We originally used to read every node and allocate a jffs2_tmp_dnode_info
    structure for each, before processing them in (reverse) version order
    and discarding the ones which are obsoleted by later nodes.

    With huge logfiles, this behaviour caused memory problems. For example, a
    file involved in OLPC trac #1292 has 1822391 nodes, and would cause the XO
    machine to run out of memory during the first stage of read_inode().

    Instead of just inserting nodes into a tree in version order as we find
    them, we now put them into a tree in order of their offset within the
    file, which allows us to immediately discard nodes which are completely
    obsoleted.

    We don't use a full tree with 'fragments' pointing to the real data
    structure, as we do in the normal fragtree. We sort only on the start
    address, and add an 'overlapped' flag to the tmp_dnode_info to indicate
    that the node in question is (partially) overlapped by another.

    When the scan is complete, we start at the end of the file, adding each
    node to a real fragtree as before. Where the node is non-overlapped, we
    just add it (it doesn't matter that it's not the latest version; there is
    no overlap). When the node at the end of the tree _is_ overlapped, we sort
    it and all its overlapping nodes into version order and then add them to
    the fragtree in that order.

    This 'early discard' reduces the peak allocation of tmp_dnode_info
    structures from 1.8M to a mere 62872 (3.5%) in the degenerate case
    referenced above.

    This version of the patch also correctly rememembers the highest node
    version# seen for an inode when it's scanned.

    Signed-off-by: David Woodhouse

    David Woodhouse
     

18 Apr, 2007

1 commit

  • In read inode we have an optimization which prevents one
    min. I/O unit (e.g. NAND page) to be read more then once.

    Namely, at the beginning we do not know which node type we read,
    so we read so we assume we read the directory entry, because it
    has the smallest node header. When we read it, we read up to the
    next min. I/O unit, just because if later we'll need to read more,
    we already have this data.

    If it turns out to be that the node is not directory entry, and
    we need more data, and we did not read it because it sits in the
    next min. I/O unit, we read the whole next (or several next)
    min. I/O unit(s). And if it happens to be that we read a data node,
    and we've read part of its data, we calculate partial CRC.
    So if later we need to check data CRC, we'll only read the rest
    of the data from further min. I/O units and continue CRC checking.

    This code was a bit messy and buggy. The bug was that it assumed
    relatively large min. I/O unit, so that the largest node header
    could overlap only one min. I/O unit boundary.

    This parch clean-ups the code a bit and fixes this bug.
    The patch was not tested on flash with small min. I/O unit, like
    NOR-ECC, nut it was tested on NAND with 512 bytes NAND page, so
    it at least does not break NAND. It was also tested with mtdram
    so it should not break NOR.

    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Artem Bityutskiy
     

09 Mar, 2007

1 commit


10 Dec, 2006

1 commit


02 Jul, 2006

1 commit

  • jffs2_clear_acl() which releases acl caches allocated by kmalloc()
    was defined but it was never called. Thus, we faced to the risk
    of memory leaking.

    This patch plugs jffs2_clear_acl() into jffs2_do_clear_inode().
    It ensures to release acl cache when inode is cleared.

    Signed-off-by: KaiGai Kohei
    Signed-off-by: David Woodhouse

    KaiGai Kohei
     

27 Jun, 2006

1 commit

  • If xattr_ref is associated with an orphan inode_cache
    on filesystem mounting, those xattr_refs are not
    released even if this inode_cache is released.

    This patch enables to call jffs2_xattr_delete_inode()
    for such a irregular inode_cachde too.

    Signed-off-by: KaiGai Kohei
    Signed-off-by: David Woodhouse

    KaiGai Kohei
     

21 Jun, 2006

1 commit

  • * git://git.infradead.org/~dwmw2/rbtree-2.6:
    [RBTREE] Switch rb_colour() et al to en_US spelling of 'color' for consistency
    Update UML kernel/physmem.c to use rb_parent() accessor macro
    [RBTREE] Update hrtimers to use rb_parent() accessor macro.
    [RBTREE] Add explicit alignment to sizeof(long) for struct rb_node.
    [RBTREE] Merge colour and parent fields of struct rb_node.
    [RBTREE] Remove dead code in rb_erase()
    [RBTREE] Update JFFS2 to use rb_parent() accessor macro.
    [RBTREE] Update eventpoll.c to use rb_parent() accessor macro.
    [RBTREE] Update key.c to use rb_parent() accessor macro.
    [RBTREE] Update ext3 to use rb_parent() accessor macro.
    [RBTREE] Change rbtree off-tree marking in I/O schedulers.
    [RBTREE] Add accessor macros for colour and parent fields of rb_node

    Linus Torvalds
     

19 Jun, 2006

1 commit


18 Jun, 2006

1 commit


21 Apr, 2006

1 commit


12 Apr, 2006

1 commit


10 Mar, 2006

1 commit

  • Fix some bugs in mtd/jffs2 on 64bit platform.

    The MEMGETBADBLOCK/MEMSETBADBLOCK ioctl are not listed in compat_ioctl.h.

    And some variables in jffs2 are declared as uint32_t but used to hold
    size_t values.

    Signed-off-by: Atsushi Nemoto
    Cc: Thomas Gleixner
    Acked-by: David Woodhouse
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Atsushi Nemoto
     

07 Nov, 2005

14 commits