20 Nov, 2009

2 commits

  • Previously, nilfs_bmap_add_blocks() and nilfs_bmap_sub_blocks() called
    mark_inode_dirty() after they changed the number of data blocks.

    This moves these calls outside bmap outermost functions like
    nilfs_bmap_insert() or nilfs_bmap_truncate().

    This will mitigate overhead for truncate or delete operation since
    they repeatedly remove set of blocks. Nearly 10 percent improvement
    was observed for removal of a large file:

    # dd if=/dev/zero of=/test/aaa bs=1M count=512
    # time rm /test/aaa

    real 2.968s -> 2.705s

    Further optimization may be possible by eliminating these
    mark_inode_dirty() uses though I avoid mixing separate changes here.

    Signed-off-by: Ryusuke Konishi

    Ryusuke Konishi
     
  • Since metadata file routines mark the inode dirty after they
    successfully changed bmap objects, nilfs_mdt_mark_dirty() calls in
    nilfs_bmap_add_blocks() and nilfs_bmap_sub_blocks() are redundant.

    This removes these overlapping calls from the bmap routines.

    Signed-off-by: Ryusuke Konishi

    Ryusuke Konishi
     

14 Sep, 2009

3 commits

  • The nilfs_bmap_lookup() is now a wrapper function of
    nilfs_bmap_lookup_at_level().

    This moves the nilfs_bmap_lookup() to a header file converting it to
    an inline function and gives an opportunity for optimization.

    Signed-off-by: Ryusuke Konishi

    Ryusuke Konishi
     
  • The current btree code is written so that btree functions call dat
    operations via wrapper functions in bmap.c when they allocate, free,
    or modify virtual block addresses.

    This abstraction requires additional function calls and causes
    frequent call of nilfs_bmap_get_dat() function since it is used in the
    every wrapper function.

    This removes the wrapper functions and makes them available from
    btree.c and direct.c, which will increase the opportunity of
    compiler optimization.

    Signed-off-by: Ryusuke Konishi

    Ryusuke Konishi
     
  • This is a preparation for the successive cleanup ("nilfs2: allow btree
    to directly call dat operations").

    This adds functions bundling a few operations to change an entry of
    virtual block address on the dat file.

    Signed-off-by: Ryusuke Konishi

    Ryusuke Konishi
     

05 Jul, 2009

1 commit

  • This will fix the following false positive of recursive locking which
    lockdep has detected:

    =============================================
    [ INFO: possible recursive locking detected ]
    2.6.30-nilfs #42
    ---------------------------------------------
    nilfs_cleanerd/10607 is trying to acquire lock:
    (&bmap->b_sem){++++-.}, at: [] nilfs_bmap_lookup_at_level+0x1a/0x74 [nilfs2]

    but task is already holding lock:
    (&bmap->b_sem){++++-.}, at: [] nilfs_bmap_truncate+0x19/0x6a [nilfs2]
    other info that might help us debug this:
    2 locks held by nilfs_cleanerd/10607:
    #0: (&nilfs->ns_segctor_sem){++++.+}, at: [] nilfs_transaction_begin+0xb6/0x10c [nilfs2]
    #1: (&bmap->b_sem){++++-.}, at: [] nilfs_bmap_truncate+0x19/0x6a [nilfs2]

    Signed-off-by: Ryusuke Konishi

    Ryusuke Konishi
     

10 Jun, 2009

7 commits


13 Apr, 2009

1 commit

  • The bmap semaphore of DAT file can be held while a bmap of other files
    is locked. This has caused the following false detection of lockdep
    check:

    mount.nilfs2/4667 is trying to acquire lock:
    (&bmap->b_sem){..--}, at: [] nilfs_bmap_lookup_at_level+0x1a/0x74 [nilfs2]

    but task is already holding lock:
    (&bmap->b_sem){..--}, at: [] nilfs_bmap_lookup_at_level+0x1a/0x74 [nilfs2]

    This will fix the false detection by distinguishing semaphores of the
    DAT and other files.

    Signed-off-by: Ryusuke Konishi

    Ryusuke Konishi
     

07 Apr, 2009

2 commits

  • This cleans up the strange indirect function calling convention used in
    nilfs to follow the normal kernel coding style.

    Signed-off-by: Pekka Enberg
    Acked-by: Ryusuke Konishi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pekka Enberg
     
  • This adds structures and operations for the block mapping (bmap for
    short). NILFS2 uses direct mappings for short files or B-tree based
    mappings for longer files.

    Every on-disk data block is held with inodes and managed through this
    block mapping. The nilfs_bmap structure and a set of functions here
    provide this capability to the NILFS2 inode.

    [penberg@cs.helsinki.fi: remove a bunch of bmap wrapper macros]
    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Koji Sato
    Signed-off-by: Ryusuke Konishi
    Signed-off-by: Pekka Enberg
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Koji Sato