30 Aug, 2013

1 commit


22 Aug, 2013

1 commit

  • Add support for the file type field in directory entries so that
    readdir can return the type of the inode the dirent points to to
    userspace without first having to read the inode off disk.

    The encoding of the type field is a single byte that is added to the
    end of the directory entry name length. For all intents and
    purposes, it appends a "hidden" byte to the name field which
    contains the type information. As the directory entry is already of
    dynamic size, helpers are already required to access and decode the
    direct entry structures.

    Hence the relevent extraction and iteration helpers are updated to
    understand the hidden byte. Helpers for reading and writing the
    filetype field from the directory entries are also added. Only the
    read helpers are used by this patch. It also adds all the code
    necessary to read the type information out of the dirents on disk.

    Further we add the superblock feature bit and helpers to indicate
    that we understand the on-disk format change. This is not a
    compatible change - existing kernels cannot read the new format
    successfully - so an incompatible feature flag is added. We don't
    yet allow filesystems to mount with this flag yet - that will be
    added once write support is added.

    Finally, the code to take the type from the VFS, convert it to an
    XFS on-disk type and put it into the xfs_name structures passed
    around is added, but the directory code does not use this field yet.
    That will be in the next patch.

    Signed-off-by: Dave Chinner
    Reviewed-by: Mark Tinguely
    Signed-off-by: Ben Myers

    Dave Chinner
     

28 Apr, 2013

4 commits

  • Add buffer types to the buffer log items so that log recovery can
    validate the buffers and calculate CRCs correctly after the buffers
    are recovered.

    Signed-off-by: Dave Chinner
    Reviewed-by: Ben Myers
    Signed-off-by: Ben Myers

    Dave Chinner
     
  • Signed-off-by: Dave Chinner
    Reviewed-by: Ben Myers
    Signed-off-by: Ben Myers

    Dave Chinner
     
  • Signed-off-by: Dave Chinner
    Reviewed-by: Ben Myers
    Signed-off-by: Ben Myers

    Dave Chinner
     
  • This addition follows the same pattern as the dir2 block CRCs.
    Seeing as both LEAF1 and LEAFN types need to changed at the same
    time, this is a pretty large amount of change. leaf block headers
    need to be abstracted away from the on-disk structures (struct
    xfs_dir3_icleaf_hdr), as do the base leaf entry locations.

    This header abstract allows the in-core header and leaf entry
    location to be passed around instead of the leaf block itself. This
    saves a lot of converting individual variables from on-disk format
    to host format where they are used, so there's a good chance that
    the compiler will be able to produce much more optimal code as it's
    not having to byteswap variables all over the place.

    Signed-off-by: Dave Chinner
    Reviewed-by: Ben Myers
    Signed-off-by: Ben Myers

    Dave Chinner
     

16 Nov, 2012

4 commits

  • To separate the verifiers from iodone functions and associate read
    and write verifiers at the same time, introduce a buffer verifier
    operations structure to the xfs_buf.

    This avoids the need for assigning the write verifier, clearing the
    iodone function and re-running ioend processing in the read
    verifier, and gets rid of the nasty "b_pre_io" name for the write
    verifier function pointer. If we ever need to, it will also be
    easier to add further content specific callbacks to a buffer with an
    ops structure in place.

    We also avoid needing to export verifier functions, instead we
    can simply export the ops structures for those that are needed
    outside the function they are defined in.

    This patch also fixes a directory block readahead verifier issue
    it exposed.

    This patch also adds ops callbacks to the inode/alloc btree blocks
    initialised by growfs. These will need more work before they will
    work with CRCs.

    Signed-off-by: Dave Chinner
    Reviewed-by: Phil White
    Signed-off-by: Ben Myers

    Dave Chinner
     
  • Signed-off-by: Dave Chinner
    Reviewed-by: Phil White
    Signed-off-by: Ben Myers

    Dave Chinner
     
  • Signed-off-by: Dave Chinner
    Reviewed-by: Phil White
    Signed-off-by: Ben Myers

    Dave Chinner
     
  • Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Phil White
    Signed-off-by: Ben Myers

    Dave Chinner
     

22 Jul, 2012

1 commit


02 Jul, 2012

2 commits


13 Jul, 2011

2 commits


20 Jan, 2010

1 commit


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
     

29 Mar, 2009

1 commit


07 Mar, 2009

1 commit


09 Feb, 2009

1 commit


30 Oct, 2008

2 commits


28 Jul, 2008

3 commits

  • 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
     

07 Feb, 2008

1 commit

  • 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
     

10 Feb, 2007

1 commit


20 Jun, 2006

1 commit


17 Mar, 2006

3 commits


02 Nov, 2005

3 commits


21 Jun, 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