27 Jul, 2011

1 commit


13 Jul, 2011

2 commits

  • xfs_da_grow_inode and xfs_dir2_grow_inode are mostly duplicate code. Factor
    the meat of those two functions into a new common helper.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Alex Elder
    Reviewed-by: Dave Chinner

    Christoph Hellwig
     
  • Replace the current mess of dir2 headers with just three that have a clear
    purpose:

    - xfs_dir2_format.h for all format definitions, including the inline helpers
    to access our variable size structures
    - xfs_dir2_priv.h for all prototypes that are internal to the dir2 code
    and not needed by anything outside of the directory code. For this
    purpose xfs_da_btree.c, and phase6.c in xfs_repair are considered part
    of the directory code.
    - xfs_dir2.h for the public interface to the directory code

    In addition to the reshuffle I have also update the comments to not only
    match the new file structure, but also to describe the directory format
    better.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Alex Elder
    Reviewed-by: Dave Chinner

    Christoph Hellwig
     

08 Jul, 2011

1 commit

  • The list field of it is never cactually used, so all uses can simply be
    replaced with the xfs_dir2_sf_hdr_t type that it has as first member.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Alex Elder
    Reviewed-by: Dave Chinner

    Christoph Hellwig
     

07 Mar, 2011

1 commit


27 Jul, 2010

4 commits

  • Replace the xfs_itrace_entry catchall with specific trace points. For
    most simple callers we now use the simple inode class, which used to
    be the iget class, but add more details tracing for namespace events,
    which now includes the name of the directory entries manipulated.

    Remove the xfs_inactive trace point, which is a duplicate of the clear_inode
    one, and the xfs_change_file_space trace point, which is immediately
    followed by the more specific alloc/free space trace points.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner

    Christoph Hellwig
     
  • This code was introduced four years ago in commit
    3e57ecf640428c01ba1ed8c8fc538447ada1715b without any review and has
    been unused since. Remove it just as the rest of the code introduced
    in that commit to reduce that stack usage and complexity in this central
    piece of code.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner

    Christoph Hellwig
     
  • Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner

    Christoph Hellwig
     
  • Dmapi support was never merged upstream, but we still have a lot of hooks
    bloating XFS for it, all over the fast pathes of the filesystem.

    This patch drops over 700 lines of dmapi overhead. If we'll ever get HSM
    support in mainline at least the namespace events can be done much saner
    in the VFS instead of the individual filesystem, so it's not like this
    is much help for future work.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner

    Christoph Hellwig
     

20 Jan, 2010

3 commits


15 Dec, 2009

1 commit

  • Convert the old xfs tracing support that could only be used with the
    out of tree kdb and xfsidbg patches to use the generic event tracer.

    To use it make sure CONFIG_EVENT_TRACING is enabled and then enable
    all xfs trace channels by:

    echo 1 > /sys/kernel/debug/tracing/events/xfs/enable

    or alternatively enable single events by just doing the same in one
    event subdirectory, e.g.

    echo 1 > /sys/kernel/debug/tracing/events/xfs/xfs_ihold/enable

    or set more complex filters, etc. In Documentation/trace/events.txt
    all this is desctribed in more detail. To reads the events do a

    cat /sys/kernel/debug/tracing/trace

    Compared to the last posting this patch converts the tracing mostly to
    the one tracepoint per callsite model that other users of the new
    tracing facility also employ. This allows a very fine-grained control
    of the tracing, a cleaner output of the traces and also enables the
    perf tool to use each tracepoint as a virtual performance counter,
    allowing us to e.g. count how often certain workloads git various
    spots in XFS. Take a look at

    http://lwn.net/Articles/346470/

    for some examples.

    Also the btree tracing isn't included at all yet, as it will require
    additional core tracing features not in mainline yet, I plan to
    deliver it later.

    And the really nice thing about this patch is that it actually removes
    many lines of code while adding this nice functionality:

    fs/xfs/Makefile | 8
    fs/xfs/linux-2.6/xfs_acl.c | 1
    fs/xfs/linux-2.6/xfs_aops.c | 52 -
    fs/xfs/linux-2.6/xfs_aops.h | 2
    fs/xfs/linux-2.6/xfs_buf.c | 117 +--
    fs/xfs/linux-2.6/xfs_buf.h | 33
    fs/xfs/linux-2.6/xfs_fs_subr.c | 3
    fs/xfs/linux-2.6/xfs_ioctl.c | 1
    fs/xfs/linux-2.6/xfs_ioctl32.c | 1
    fs/xfs/linux-2.6/xfs_iops.c | 1
    fs/xfs/linux-2.6/xfs_linux.h | 1
    fs/xfs/linux-2.6/xfs_lrw.c | 87 --
    fs/xfs/linux-2.6/xfs_lrw.h | 45 -
    fs/xfs/linux-2.6/xfs_super.c | 104 ---
    fs/xfs/linux-2.6/xfs_super.h | 7
    fs/xfs/linux-2.6/xfs_sync.c | 1
    fs/xfs/linux-2.6/xfs_trace.c | 75 ++
    fs/xfs/linux-2.6/xfs_trace.h | 1369 +++++++++++++++++++++++++++++++++++++++++
    fs/xfs/linux-2.6/xfs_vnode.h | 4
    fs/xfs/quota/xfs_dquot.c | 110 ---
    fs/xfs/quota/xfs_dquot.h | 21
    fs/xfs/quota/xfs_qm.c | 40 -
    fs/xfs/quota/xfs_qm_syscalls.c | 4
    fs/xfs/support/ktrace.c | 323 ---------
    fs/xfs/support/ktrace.h | 85 --
    fs/xfs/xfs.h | 16
    fs/xfs/xfs_ag.h | 14
    fs/xfs/xfs_alloc.c | 230 +-----
    fs/xfs/xfs_alloc.h | 27
    fs/xfs/xfs_alloc_btree.c | 1
    fs/xfs/xfs_attr.c | 107 ---
    fs/xfs/xfs_attr.h | 10
    fs/xfs/xfs_attr_leaf.c | 14
    fs/xfs/xfs_attr_sf.h | 40 -
    fs/xfs/xfs_bmap.c | 507 +++------------
    fs/xfs/xfs_bmap.h | 49 -
    fs/xfs/xfs_bmap_btree.c | 6
    fs/xfs/xfs_btree.c | 5
    fs/xfs/xfs_btree_trace.h | 17
    fs/xfs/xfs_buf_item.c | 87 --
    fs/xfs/xfs_buf_item.h | 20
    fs/xfs/xfs_da_btree.c | 3
    fs/xfs/xfs_da_btree.h | 7
    fs/xfs/xfs_dfrag.c | 2
    fs/xfs/xfs_dir2.c | 8
    fs/xfs/xfs_dir2_block.c | 20
    fs/xfs/xfs_dir2_leaf.c | 21
    fs/xfs/xfs_dir2_node.c | 27
    fs/xfs/xfs_dir2_sf.c | 26
    fs/xfs/xfs_dir2_trace.c | 216 ------
    fs/xfs/xfs_dir2_trace.h | 72 --
    fs/xfs/xfs_filestream.c | 8
    fs/xfs/xfs_fsops.c | 2
    fs/xfs/xfs_iget.c | 111 ---
    fs/xfs/xfs_inode.c | 67 --
    fs/xfs/xfs_inode.h | 76 --
    fs/xfs/xfs_inode_item.c | 5
    fs/xfs/xfs_iomap.c | 85 --
    fs/xfs/xfs_iomap.h | 8
    fs/xfs/xfs_log.c | 181 +----
    fs/xfs/xfs_log_priv.h | 20
    fs/xfs/xfs_log_recover.c | 1
    fs/xfs/xfs_mount.c | 2
    fs/xfs/xfs_quota.h | 8
    fs/xfs/xfs_rename.c | 1
    fs/xfs/xfs_rtalloc.c | 1
    fs/xfs/xfs_rw.c | 3
    fs/xfs/xfs_trans.h | 47 +
    fs/xfs/xfs_trans_buf.c | 62 -
    fs/xfs/xfs_vnodeops.c | 8
    70 files changed, 2151 insertions(+), 2592 deletions(-)

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     

12 Aug, 2009

1 commit


07 Mar, 2009

1 commit


30 Oct, 2008

1 commit

  • When we create a directory, we reserve a number of blocks for the maximum
    possible expansion of of the directory due to various btree splits,
    freespace allocation, etc. Unfortunately, each allocation is not reflected
    in the total number of blocks still available to the transaction, so the
    maximal reservation is used over and over again.

    This leads to problems where an allocation group has only enough blocks
    for *some* of the allocations required for the directory modification.
    After the first N allocations, the remaining blocks in the allocation
    group drops below the total reservation, and subsequent allocations fail
    because the allocator will not allow the allocation to proceed if the AG
    does not have the enough blocks available for the entire allocation total.

    This results in an ENOSPC occurring after an allocation has already
    occurred. This results in aborting the directory operation (leaving the
    directory in an inconsistent state) and cancelling a dirty transaction,
    which results in a filesystem shutdown.

    Avoid the problem by reflecting the number of blocks allocated in any
    directory expansion in the total number of blocks available to the
    modification in progress. This prevents a directory modification from
    being aborted part way through with an ENOSPC.

    SGI-PV: 988144

    SGI-Modid: xfs-linux-melb:xfs-kern:32340a

    Signed-off-by: David Chinner
    Signed-off-by: Lachlan McIlroy

    David Chinner
     

28 Jul, 2008

6 commits

  • Fixes a problem in the xfs_dir2_remove and xfs_dir2_replace paths which
    intenally call directory format specific lookup funtions that assume
    args->cmpresult is zeroed.

    SGI-PV: 982606
    SGI-Modid: xfs-linux-melb:xfs-kern:31268a

    Signed-off-by: Barry Naujok
    Signed-off-by: Christoph Hellwig

    Barry Naujok
     
  • Implement ASCII case-insensitive support. It's primary purpose is for
    supporting existing filesystems that already use this case-insensitive
    mode migrated from IRIX. But, if you only need ASCII-only case-insensitive
    support (ie. English only) and will never use another language, then this
    mode is perfectly adequate.

    ASCII-CI is implemented by generating hashes based on lower-case letters
    and doing lower-case compares. It implements a new xfs_nameops vector for
    doing the hashes and comparisons for all filename operations.

    To create a filesystem with this CI mode, use: # mkfs.xfs -n version=ci

    SGI-PV: 981516
    SGI-Modid: xfs-linux-melb:xfs-kern:31209a

    Signed-off-by: Barry Naujok
    Signed-off-by: Christoph Hellwig

    Barry Naujok
     
  • This implements the code to store the actual filename found during a
    lookup in the dentry cache and to avoid multiple entries in the dcache
    pointing to the same inode.

    To avoid polluting the dcache, we implement a new directory inode
    operations for lookup. xfs_vn_ci_lookup() stores the correct case name in
    the dcache.

    The "actual name" is only allocated and returned for a case- insensitive
    match and not an actual match.

    Another unusual interaction with the dcache is not storing negative
    dentries like other filesystems doing a d_add(dentry, NULL) when an ENOENT
    is returned. During the VFS lookup, if a dentry returned has no inode,
    dput is called and ENOENT is returned. By not doing a d_add, this actually
    removes it completely from the dcache to be reused. create/rename have to
    be modified to support unhashed dentries being passed in.

    SGI-PV: 981521
    SGI-Modid: xfs-linux-melb:xfs-kern:31208a

    Signed-off-by: Barry Naujok
    Signed-off-by: Christoph Hellwig

    Barry Naujok
     
  • The end of the xfs_da_args structure has 4 unsigned char fields for
    true/false information on directory and attr operations using the
    xfs_da_args structure.

    The following converts these 4 into a op_flags field that uses the first 4
    bits for these fields and allows expansion for future operation
    information (eg. case-insensitive lookup request).

    SGI-PV: 981520
    SGI-Modid: xfs-linux-melb:xfs-kern:31206a

    Signed-off-by: Barry Naujok
    Signed-off-by: Christoph Hellwig

    Barry Naujok
     
  • Adds two pieces of functionality for the basis of case-insensitive support
    in XFS:

    1. A comparison result enumerated type: xfs_dacmp. It represents an

    exact match, case-insensitive match or no match at all. This patch

    only implements different and exact results.

    2. xfs_nameops vector for specifying how to perform the hash generation

    of filenames and comparision methods. In this patch the hash vector

    points to the existing xfs_da_hashname function and the comparison

    method does a length compare, and if the same, does a memcmp and

    return the xfs_dacmp result.

    All filename functions that use the hash (create, lookup remove, rename,
    etc) now use the xfs_nameops.hashname function and all directory lookup
    functions also use the xfs_nameops.compname function.

    The lookup functions also handle case-insensitive results even though the
    default comparison function cannot return that. And important aspect of
    the lookup functions is that an exact match always has precedence over a
    case-insensitive. So while a case-insensitive match is found, we have to
    keep looking just in case there is an exact match. In the meantime, the
    info for the first case-insensitive match is retained if no exact match is
    found.

    SGI-PV: 981519
    SGI-Modid: xfs-linux-melb:xfs-kern:31205a

    Signed-off-by: Barry Naujok
    Signed-off-by: Christoph Hellwig

    Barry Naujok
     
  • kmem_free() function takes (ptr, size) arguments but doesn't actually use
    second one.

    This patch removes size argument from all callsites.

    SGI-PV: 981498
    SGI-Modid: xfs-linux-melb:xfs-kern:31050a

    Signed-off-by: Denys Vlasenko
    Signed-off-by: David Chinner
    Signed-off-by: Lachlan McIlroy

    Denys Vlasenko
     

18 Apr, 2008

1 commit


10 Apr, 2008

1 commit


07 Feb, 2008

2 commits

  • These are mostly locking annotations, marking things static, casts where
    needed and declaring stuff in header files.

    SGI-PV: 971186
    SGI-Modid: xfs-linux-melb:xfs-kern:30002a

    Signed-off-by: David Chinner
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Lachlan McIlroy

    David Chinner
     
  • Simplify vnode tracing calls by embedding function name & return addr in
    the calling macro.

    Also do a lot of vnode->inode renaming for consistency, while we're at it.

    SGI-PV: 970335
    SGI-Modid: xfs-linux-melb:xfs-kern:29650a

    Signed-off-by: Eric Sandeen
    Signed-off-by: Lachlan McIlroy
    Signed-off-by: Tim Shimmin

    Lachlan McIlroy
     

16 Oct, 2007

1 commit

  • struct bhv_vnode is on it's way out, so move the trace buffer to the XFS
    inode. Note that this makes the tracing macros rather misnamed, but this
    kind of fallout will be fixed up incrementally later on.

    SGI-PV: 969608
    SGI-Modid: xfs-linux-melb:xfs-kern:29498a

    Signed-off-by: Christoph Hellwig
    Signed-off-by: David Chinner
    Signed-off-by: Tim Shimmin

    Christoph Hellwig
     

15 Oct, 2007

2 commits

  • All vnode ops now take struct xfs_inode pointers and the behaviour related
    glue is split out into methods of it's own. This required fixing
    xfs_create/mkdir/symlink to not mess with the inode pointer but rather use
    a separate boolean for error handling. Thanks to Dave Chinner for that
    fix.

    SGI-PV: 969608
    SGI-Modid: xfs-linux-melb:xfs-kern:29492a

    Signed-off-by: Christoph Hellwig
    Signed-off-by: David Chinner
    Signed-off-by: Tim Shimmin

    Christoph Hellwig
     
  • Currently xfs has a rather complicated internal scheme to allow for
    different directory formats in IRIX. This patch rips all code related to
    this out and pushes useage of the Linux filldir callback into the lowlevel
    directory code. This does not make the code any less portable because
    filldir can be used to create dirents of all possible variations
    (including the IRIX ones as proved by the IRIX binary emulation code under
    arch/mips/).

    This patch get rid of an unessecary copy in the readdir path, about 400
    lines of code and one of the last two users of the uio structure.

    This version is updated to deal with dmapi aswell which greatly simplifies
    the get_dirattrs code. The dmapi part has been tested using the
    get_dirattrs tools from the xfstest dmapi suite1 with various small and
    large directories.

    SGI-PV: 968563
    SGI-Modid: xfs-linux-melb:xfs-kern:29478a

    Signed-off-by: Christoph Hellwig
    Signed-off-by: David Chinner
    Signed-off-by: Tim Shimmin

    Christoph Hellwig
     

14 Jul, 2007

1 commit


11 Nov, 2006

1 commit


20 Jun, 2006

1 commit


09 Jun, 2006

1 commit

  • the range spanned by modifications to the in-core extent map. Add
    XFS_BUNMAPI() and XFS_SWAP_EXTENTS() macros that call xfs_bunmapi() and
    xfs_swap_extents() via the ioops vector. Change all calls that may modify
    the in-core extent map for the data fork to go through the ioops vector.
    This allows a cache of extent map data to be kept in sync.

    SGI-PV: 947615
    SGI-Modid: xfs-linux-melb:xfs-kern:209226a

    Signed-off-by: Olaf Weber
    Signed-off-by: Nathan Scott

    Olaf Weber
     

02 Nov, 2005

2 commits


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