1. 08 7月, 2011 2 次提交
  2. 19 10月, 2010 1 次提交
  3. 27 7月, 2010 3 次提交
  4. 20 1月, 2010 1 次提交
  5. 15 12月, 2009 1 次提交
    • C
      xfs: event tracing support · 0b1b213f
      Christoph Hellwig 提交于
      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: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAlex Elder <aelder@sgi.com>
      0b1b213f
  6. 09 10月, 2009 1 次提交
    • E
      fix readahead calculations in xfs_dir2_leaf_getdents() · 8e69ce14
      Eric Sandeen 提交于
      This is for bug #850,
      http://oss.sgi.com/bugzilla/show_bug.cgi?id=850
      XFS file system segfaults , repeatedly and 100% reproducable in 2.6.30 , 2.6.31
      
      The above only showed up on a CONFIG_XFS_DEBUG=y kernel, because
      xfs_bmapi() ASSERTs that it has been asked for at least one map,
      
      and it was getting 0.
      
      The root cause is that our guesstimated "bufsize" from xfs_file_readdir
      was fairly small, and the
      
      		bufsize -= length;
      
      in the loop was going negative - except bufsize is a size_t, so it
      was wrapping to a very large number.
      
      Then when we did
      		ra_want = howmany(bufsize + mp->m_dirblksize,
      				  mp->m_sb.sb_blocksize) - 1;
      
      with that very large number, the (int) ra_want was coming out
      negative, and a subsequent compare:
      
      		if (1 + ra_want > map_blocks ...
      
      was coming out -true- (negative int compare w/ uint) and we went
      back to xfs_bmapi() for more, even though we did not need more,
      and asked for 0 maps, and hit the ASSERT.
      
      We have kind of a type mess here, but just keeping bufsize from
      going negative is probably sufficient to avoid the problem.
      Signed-off-by: NEric Sandeen <sandeen@sandeen.net>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Reviewed-by: NAlex Elder <aelder@sgi.com>
      Signed-off-by: NAlex Elder <aelder@sgi.com>
      8e69ce14
  7. 29 3月, 2009 1 次提交
  8. 07 3月, 2009 1 次提交
    • H
      xfs: make symbols static · 3180e66d
      Hannes Eder 提交于
      Instead of the keyword 'static' the macro 'STATIC' is used, so the
      symbols are still global with CONFIG_XFS_DEBUG.
      
      Fix this sparse warnings:
        fs/xfs/linux-2.6/xfs_super.c:638:1: warning: symbol 'xfs_blkdev_get' was not declared. Should it be static?
        fs/xfs/linux-2.6/xfs_super.c:655:1: warning: symbol 'xfs_blkdev_put' was not declared. Should it be static?
        fs/xfs/linux-2.6/xfs_super.c:876:1: warning: symbol 'xfsaild' was not declared. Should it be static?
        fs/xfs/xfs_bmap.c:6208:1: warning: symbol 'xfs_check_block' was not declared. Should it be static?
        fs/xfs/xfs_dir2_leaf.c:553:1: warning: symbol 'xfs_dir2_leaf_check' was not declared. Should it be static?
      Signed-off-by: NHannes Eder <hannes@hanneseder.net>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NFelix Blyakher <felixb@sgi.com>
      3180e66d
  9. 09 1月, 2009 1 次提交
    • C
      [XFS] truncate readdir offsets to signed 32 bit values · 15440319
      Christoph Hellwig 提交于
      John Stanley reported EOVERFLOW errors in readdir from his self-build
      glibc.  I traced this down to glibc enabling d_off overflow checks
      in one of the about five million different getdents implementations.
      
      In 2.6.28 Dave Woodhouse moved our readdir double buffering required
      for NFS4 readdirplus into nfsd and at that point we lost the capping
      of the directory offsets to 32 bit signed values.  Johns glibc used
      getdents64 to even implement readdir for normal 32 bit offset dirents,
      and failed with EOVERFLOW only if this happens on the first dirent in
      a getdents call.  I managed to come up with a testcase that uses
      raw getdents and does the EOVERFLOW check manually.  We always hit
      it with our last entry due to the special end of directory marker.
      
      The patch below is a dumb version of just putting back the masking,
      to make sure we have the same behavior as in 2.6.27 and earlier.
      
      I will work on a better and cleaner fix for 2.6.30.
      Reported-by: NJohn Stanley <jpsinthemix@verizon.net>
      Tested-by: NJohn Stanley <jpsinthemix@verizon.net>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Reviewed-by: NDave Chinner <david@fromorbit.com>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      15440319
  10. 28 7月, 2008 5 次提交
    • B
      [XFS] Fix CI lookup in leaf-form directories · 07fe4dd4
      Barry Naujok 提交于
      Instead of comparing buffer pointers, compare buffer block numbers and
      don't keep buff
      
      SGI-PV: 983564
      
      SGI-Modid: xfs-linux-melb:xfs-kern:31346a
      Signed-off-by: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      07fe4dd4
    • B
      [XFS] Return case-insensitive match for dentry cache · 384f3ced
      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: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      384f3ced
    • B
      [XFS] Add op_flags field and helpers to xfs_da_args · 6a178100
      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: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      6a178100
    • B
      [XFS] Name operation vector for hash and compare · 5163f95a
      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: NBarry Naujok <bnaujok@sgi.com>
      Signed-off-by: NChristoph Hellwig <hch@infradead.org>
      5163f95a
    • D
      [XFS] Remove unused arg from kmem_free() · f0e2d93c
      Denys Vlasenko 提交于
      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: NDenys Vlasenko <vda.linux@googlemail.com>
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NLachlan McIlroy <lachlan@sgi.com>
      f0e2d93c
  11. 14 2月, 2008 1 次提交
  12. 18 12月, 2007 1 次提交
  13. 15 10月, 2007 1 次提交
    • C
      [XFS] use filldir internally · 051e7cd4
      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: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NDavid Chinner <dgc@sgi.com>
      Signed-off-by: NTim Shimmin <tes@sgi.com>
      051e7cd4
  14. 14 7月, 2007 1 次提交
  15. 08 5月, 2007 1 次提交
  16. 20 6月, 2006 1 次提交
  17. 09 6月, 2006 2 次提交
  18. 29 3月, 2006 1 次提交
  19. 17 3月, 2006 10 次提交
  20. 14 3月, 2006 1 次提交
  21. 02 11月, 2005 2 次提交
  22. 21 6月, 2005 1 次提交