11 Jan, 2012

1 commit


04 Jan, 2012

1 commit

  • Seeing that just about every destructor got that INIT_LIST_HEAD() copied into
    it, there is no point whatsoever keeping this INIT_LIST_HEAD in inode_init_once();
    the cost of taking it into inode_init_always() will be negligible for pipes
    and sockets and negative for everything else. Not to mention the removal of
    boilerplate code from ->destroy_inode() instances...

    Signed-off-by: Al Viro

    Al Viro
     

16 Sep, 2011

2 commits

  • generic_check_addressable can't deal with hfsplus's larger than page
    size allocation blocks, so simply opencode the checks that we actually
    need in hfsplus_fill_super.

    Signed-off-by: Christoph Hellwig
    Reported-by: Pavel Ivanov
    Tested-by: Pavel Ivanov
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • Commit 6596528e391a ("hfsplus: ensure bio requests are not smaller than
    the hardware sectors") changed the pointers used for volume header
    allocations but failed to free the correct pointers in the error path
    path of hfsplus_fill_super() and hfsplus_read_wrapper.

    The second hunk came from a separate patch by Pavel Ivanov.

    Reported-by: Pavel Ivanov
    Signed-off-by: Seth Forshee
    Signed-off-by: Christoph Hellwig
    Cc:
    Signed-off-by: Linus Torvalds

    Seth Forshee
     

22 Jul, 2011

1 commit


07 Jul, 2011

2 commits


30 Jun, 2011

2 commits


04 Feb, 2011

1 commit

  • Currently the error handling in hfsplus_fill_super is a mess, and can
    lead to accessing fields in the superblock that haven't been even set
    up yet. Fix this by making sure we do not set up sb->s_root until we
    have the mount fully set up, and before that do proper step by step
    unwinding instead of using hfsplus_put_super as a big hammer.

    Reported-by: Dan Williams
    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     

13 Jan, 2011

1 commit


08 Jan, 2011

1 commit

  • * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/hch/hfsplus:
    hfsplus: %L-to-%ll, macro correction, and remove unneeded braces
    hfsplus: spaces/indentation clean-up
    hfsplus: C99 comments clean-up
    hfsplus: over 80 character lines clean-up
    hfsplus: fix an artifact in ioctl flag checking
    hfsplus: flush disk caches in sync and fsync
    hfsplus: optimize fsync
    hfsplus: split up inode flags
    hfsplus: write up fsync for directories
    hfsplus: simplify fsync
    hfsplus: avoid useless work in hfsplus_sync_fs
    hfsplus: make sure sync writes out all metadata
    hfsplus: use raw bio access for partition tables
    hfsplus: use raw bio access for the volume headers
    hfsplus: always use hfsplus_sync_fs to write the volume header
    hfsplus: silence a few debug printks
    hfsplus: fix option parsing during remount

    Fix up conflicts due to VFS changes in fs/hfsplus/{hfsplus_fs.h,unicode.c}

    Linus Torvalds
     

07 Jan, 2011

2 commits

  • Reduce some branches and memory accesses in dcache lookup by adding dentry
    flags to indicate common d_ops are set, rather than having to check them.
    This saves a pointer memory access (dentry->d_op) in common path lookup
    situations, and saves another pointer load and branch in cases where we
    have d_op but not the particular operation.

    Patched with:

    git grep -E '[.>]([[:space:]])*d_op([[:space:]])*=' | xargs sed -e 's/\([^\t ]*\)->d_op = \(.*\);/d_set_d_op(\1, \2);/' -e 's/\([^\t ]*\)\.d_op = \(.*\);/d_set_d_op(\&\1, \2);/' -i

    Signed-off-by: Nick Piggin

    Nick Piggin
     
  • RCU free the struct inode. This will allow:

    - Subsequent store-free path walking patch. The inode must be consulted for
    permissions when walking, so an RCU inode reference is a must.
    - sb_inode_list_lock to be moved inside i_lock because sb list walkers who want
    to take i_lock no longer need to take sb_inode_list_lock to walk the list in
    the first place. This will simplify and optimize locking.
    - Could remove some nested trylock loops in dcache code
    - Could potentially simplify things a bit in VM land. Do not need to take the
    page lock to follow page->mapping.

    The downsides of this is the performance cost of using RCU. In a simple
    creat/unlink microbenchmark, performance drops by about 10% due to inability to
    reuse cache-hot slab objects. As iterations increase and RCU freeing starts
    kicking over, this increases to about 20%.

    In cases where inode lifetimes are longer (ie. many inodes may be allocated
    during the average life span of a single inode), a lot of this cache reuse is
    not applicable, so the regression caused by this patch is smaller.

    The cache-hot regression could largely be avoided by using SLAB_DESTROY_BY_RCU,
    however this adds some complexity to list walking and store-free path walking,
    so I prefer to implement this at a later date, if it is shown to be a win in
    real situations. I haven't found a regression in any non-micro benchmark so I
    doubt it will be a problem.

    Signed-off-by: Nick Piggin

    Nick Piggin
     

17 Dec, 2010

1 commit


23 Nov, 2010

8 commits

  • Flush the disk cache in fsync and sync to make sure data actually is
    on disk on completion of these system calls. There is a nobarrier
    mount option to disable this behaviour. It's slightly misnamed now
    that barrier actually are gone, but it matches the name used by all
    major filesystems.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • Avoid doing unessecary work in fsync. Do nothing unless the inode
    was marked dirty, and only write the various metadata inodes out if
    they contain any dirty state from this inode. This is archived by
    adding three new dirty bits to the hfsplus-specific inode which are
    set in the correct places.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • Split the flags field in the hfsplus inode into an extent_state
    flag that is locked by the extent_lock, and a new flags field
    that uses atomic bitops. The second will grow more flags in the
    next patch.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • There is no reason to write out the metadata inodes or volume headers
    during a non-blocking sync, as we are almost guaranteed to dirty them
    again during the inode writeouts.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • hfsplus stores all metadata except for the volume headers in special
    inodes. While these are marked hashed and periodically written out
    by the flusher threads, we can't rely on that for sync. For the case
    of a data integrity sync the VM has life-lock avoidance code that
    avoids writing inodes again that are redirtied during the sync,
    which is something that can happen easily for hfsplus. So make sure
    we explicitly write out the metadata inodes at the beginning of
    hfsplus_sync_fs.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • The hfsplus backup volume header is located two blocks from the end of
    the device. In case of device sizes that are not 4k aligned this means
    we can't access it using buffer_heads when using the default 4k block
    size.

    Switch to using raw bios to read/write all buffer headers. We were not
    relying on any caching behaviour of the buffer heads anyway. Additionally
    always read in the backup volume header during mount to verify that we
    can actually read it.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • Remove opencoded writing of the volume header in hfsplus_fill_super
    and hfsplus_put_super and offload it to hfsplus_sync_fs. In the
    put_super case this means we only write the superblock once instead
    of twice.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • Turn a few noisy debug printks that show up during xfstests into
    complied out debug print statements.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     

08 Nov, 2010

1 commit

  • hfsplus only actually uses the force option during remount, but it uses
    the full option parser with a fake superblock to do so. This means remount
    will fail if any nls option is set (which happens frequently with older
    mount tools), even if it is the same.

    Fix this by adding a simpler version of the parser that only parses the force
    option for remount.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     

29 Oct, 2010

1 commit


01 Oct, 2010

11 commits


10 Aug, 2010

2 commits


06 Mar, 2010

1 commit

  • This gives the filesystem more information about the writeback that
    is happening. Trond requested this for the NFS unstable write handling,
    and other filesystems might benefit from this too by beeing able to
    distinguish between the different callers in more detail.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Christoph Hellwig
     

24 Sep, 2009

1 commit

  • Most call sites of unload_nls() do:
    if (nls)
    unload_nls(nls);

    Check the pointer inside unload_nls() like we do in kfree() and
    simplify the call sites.

    Signed-off-by: Thomas Gleixner
    Cc: Steve French
    Cc: OGAWA Hirofumi
    Cc: Roman Zippel
    Cc: Dave Kleikamp
    Cc: Petr Vandrovec
    Cc: Anton Altaparmakov
    Signed-off-by: Al Viro

    Thomas Gleixner