17 Dec, 2009

1 commit

  • Change all async metadata buffers to use [READ|WRITE]_META I/O types
    so that the I/O doesn't get issued immediately. This allows merging of
    adjacent metadata requests but still prioritises them over bulk data.
    This shows a 10-15% improvement in sequential create speed of small
    files.

    Don't include the log buffers in this classification - leave them as
    sync types so they are issued immediately.

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

    Dave Chinner
     

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 Dec, 2009

1 commit

  • Currently the low-level buffer cache interfaces are highly confusing
    as we have a _flags variant of each that does actually respect the
    flags, and one without _flags which has a flags argument that gets
    ignored and overriden with a default set. Given that very few places
    use the default arguments get rid of the duplication and convert all
    callers to pass the flags explicitly. Also remove the now confusing
    _flags postfix.

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

    Christoph Hellwig
     

07 Mar, 2009

1 commit


22 Dec, 2008

1 commit


11 Dec, 2008

1 commit

  • Replace the b_fspriv pointer and it's ugly accessors with a properly types
    xfs_mount pointer. Also switch log reocvery over to it instead of using
    b_fspriv for the mount pointer.

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

    Christoph Hellwig
     

04 Dec, 2008

1 commit

  • xfs_buf_iostart is a "shared" helper for xfs_buf_read_flags,
    xfs_bawrite, and xfs_bdwrite - except that there isn't much shared
    code but rather special cases for each caller.

    So remove this function and move the functionality to the caller.
    xfs_bawrite and xfs_bdwrite are now big enough to be moved out of
    line and the xfs_buf_read_flags is moved into a new helper called
    _xfs_buf_read.

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

    Christoph Hellwig
     

11 Oct, 2008

1 commit

  • Currently we disable barriers as soon as we get a buffer in xlog_iodone
    that has the XBF_ORDERED flag cleared. But this can be the case not only
    for buffers where the barrier failed, but also the first buffer of a
    split log write in case of a log wraparound. Due to the disabled
    barriers we can easily get directory corruption on unclean shutdowns.
    So instead of using this check add a new buffer flag for failed barrier
    writes.

    This is a regression vs 2.6.26 caused by patch to use the right macro
    to check for the ORDERED flag, as we previously got true returned for
    every buffer.

    Thanks to Toei Rei for reporting the bug.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Eric Sandeen
    Reviewed-by: David Chinner
    Signed-off-by: Tim Shimmin
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     

13 Aug, 2008

1 commit


28 Jul, 2008

1 commit

  • Currently closing the rt/log block device is done in the wrong spot, and
    far too early. So revampt it:

    - xfs_blkdev_put moved out of xfs_free_buftarg into the caller so that

    it is done after tearing down the buftarg completely.

    - call to xfs_unmountfs_close moved from xfs_mountfs into caller so

    that it's done after tearing down the filesystem completely.

    - xfs_unmountfs_close is renamed to xfs_close_devices and made static

    in xfs_super.c

    - opening of the block devices is split into a helper xfs_open_devices

    that is symetric in use to xfs_close_devices

    - xfs_unmountfs can now lose struct cred

    - error handling around device opening sanitized in xfs_fs_fill_super

    SGI-PV: 981951
    SGI-Modid: xfs-linux-melb:xfs-kern:31193a

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

    Christoph Hellwig
     

23 May, 2008

1 commit

  • When we have multiple buffers in a single page for a blocksize == pagesize
    filesystem we might overwrite the page contents if two callers hit it
    shortly after each other. To prevent that we need to keep the page locked
    until I/O is completed and the page marked uptodate.

    Thanks to Eric Sandeen for triaging this bug and finding a reproducible
    testcase and Dave Chinner for additional advice.

    This should fix kernel.org bz #10421.

    Tested-by: Eric Sandeen

    SGI-PV: 981813
    SGI-Modid: xfs-linux-melb:xfs-kern:31173a

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

    Christoph Hellwig
     

18 Apr, 2008

1 commit

  • xfs_bdwrite() cannot return an error; it only queues buffers to the
    delayed write list and as such never encounters anything that can fail.
    Mark it void.

    SGI-PV: 980084
    SGI-Modid: xfs-linux-melb:xfs-kern:30825a

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

    David Chinner
     

07 Feb, 2008

3 commits

  • There is no need to lock any page in xfs_buf.c because we operate on our
    own address_space and all locking is covered by the buffer semaphore. If
    we ever switch back to main blockdeive address_space as suggested e.g. for
    fsblock with a similar scheme the locking will have to be totally revised
    anyway because the current scheme is neither correct nor coherent with
    itself.

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

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

    Christoph Hellwig
     
  • SGI-PV: 971596
    SGI-Modid: xfs-linux-melb:xfs-kern:29902a

    Signed-off-by: Lachlan McIlroy

    Lachlan McIlroy
     
  • There is no need to lock any page in xfs_buf.c because we operate on our
    own address_space and all locking is covered by the buffer semaphore. If
    we ever switch back to main blockdeive address_space as suggested e.g. for
    fsblock with a similar scheme the locking will have to be totally revised
    anyway because the current scheme is neither correct nor coherent with
    itself.

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

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Lachlan McIlroy
    Signed-off-by: Tim Shimmin

    Christoph Hellwig
     

14 Jul, 2007

1 commit

  • Many block drivers (aoe, iscsi) really want refcountable pages in bios,
    which is what almost everyone send down. XFS unfortunately has a few
    places where it sends down buffers that may come from kmalloc, which
    breaks them.

    Fix the places that use kmalloc()d buffers.

    SGI-PV: 964546
    SGI-Modid: xfs-linux-melb:xfs-kern:28562a

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

    Christoph Hellwig
     

08 May, 2007

1 commit


10 Feb, 2007

1 commit

  • The {test,set,clear}_bit() operations take a bit index for the bit to
    operate on. The XBT_* flags are defined as bit fields which is incorrect,
    not to mention the way the bit fields are enumerated is broken too. This
    was only working by chance.

    Fix the definitions of the flags and make the code using them use the
    {test,set,clear}_bit() operations correctly.

    SGI-PV: 958639
    SGI-Modid: xfs-linux-melb:xfs-kern:27565a

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

    David Chinner
     

28 Sep, 2006

2 commits


28 Jul, 2006

1 commit


01 Jul, 2006

1 commit


11 Jan, 2006

2 commits


02 Nov, 2005

4 commits


05 Sep, 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