1. 29 Jul, 2012 12 commits
  2. 22 Jul, 2012 7 commits
  3. 13 Jul, 2012 4 commits
  4. 01 Jul, 2012 9 commits
    • Dave Chinner's avatar
      xfs: factor buffer reading from xfs_dir2_leaf_getdents · 9b73bd7b
      Dave Chinner authored
      The buffer reading code in xfs_dir2_leaf_getdents is complex and difficult to
      follow due to the readahead and all the context is carries. it is also badly
      indented and so difficult to read. Factor it out into a separate function to
      make it easier to understand and optimise in future patches.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      9b73bd7b
    • Dave Chinner's avatar
      xfs: remove struct xfs_dabuf and infrastructure · 1d9025e5
      Dave Chinner authored
      The struct xfs_dabuf now only tracks a single xfs_buf and all the
      information it holds can be gained directly from the xfs_buf. Hence
      we can remove the struct dabuf and pass the xfs_buf around
      everywhere.
      
      Kill the struct dabuf and the associated infrastructure.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      1d9025e5
    • Dave Chinner's avatar
      xfs: use discontiguous xfs_buf support in dabuf wrappers · 3605431f
      Dave Chinner authored
      First step in converting the directory code to use native
      discontiguous buffers and replacing the dabuf construct.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      3605431f
    • Dave Chinner's avatar
      xfs: support discontiguous buffers in the xfs_buf_log_item · 372cc85e
      Dave Chinner authored
      discontigous buffer in separate buffer format structures. This means log
      recovery will recover all the changes on a per segment basis without
      requiring any knowledge of the fact that it was logged from a
      compound buffer.
      
      To do this, we need to be able to determine what buffer segment any
      given offset into the compound buffer sits over. This enables us to
      translate the dirty bitmap in the number of separate buffer format
      structures required.
      
      We also need to be able to determine the number of bitmap elements
      that a given buffer segment has, as this determines the size of the
      buffer format structure. Hence we need to be able to determine the
      both the start offset into the buffer and the length of a given
      segment to be able to calculate this.
      
      With this information, we can preallocate, build and format the
      correct log vector array for each segment in a compound buffer to
      appear exactly the same as individually logged buffers in the log.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      372cc85e
    • Dave Chinner's avatar
      xfs: add discontiguous buffer support to transactions · de2a4f59
      Dave Chinner authored
      Now that the buffer cache supports discontiguous buffers, add
      support to the transaction buffer interface for getting and reading
      buffers.
      
      Note that this patch does not convert the buffer item logging to
      support discontiguous buffers. That will be done as a separate
      commit.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      de2a4f59
    • Dave Chinner's avatar
      xfs: add discontiguous buffer map interface · 6dde2707
      Dave Chinner authored
      With the internal interfaces supporting discontiguous buffer maps,
      add external lookup, read and get interfaces so they can start to be
      used.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      6dde2707
    • Dave Chinner's avatar
      xfs: convert internal buffer functions to pass maps · 3e85c868
      Dave Chinner authored
      While the external interface currently uses separate blockno/length
      variables, we need to move internal interfaces to passing and
      parsing vector maps. This will then allow us to add external
      interfaces to support discontiguous buffer maps as the internal code
      will already support them.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      3e85c868
    • Dave Chinner's avatar
      xfs: separate buffer indexing from block map · cbb7baab
      Dave Chinner authored
      To support discontiguous buffers in the buffer cache, we need to
      separate the cache index variables from the I/O map. While this is
      currently a 1:1 mapping, discontiguous buffer support will break
      this relationship.
      
      However, for caching purposes, we can still treat them the same as a
      contiguous buffer - the block number of the first block and the
      length of the buffer - as that is still a unique representation.
      Also, the only way we will ever access the discontiguous regions of
      buffers is via bulding the complete buffer in the first place, so
      using the initial block number and entire buffer length is a sane
      way to index the buffers.
      
      Add a block mapping vector construct to the xfs_buf and use it in
      the places where we are doing IO instead of the current
      b_bn/b_length variables.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      cbb7baab
    • Dave Chinner's avatar
      xfs: struct xfs_buf_log_format isn't variable sized. · 77c1a08f
      Dave Chinner authored
      The struct xfs_buf_log_format wants to think the dirty bitmap is
      variable sized.  In fact, it is variable size on disk simply due to
      the way we map it from the in-memory structure, but we still just
      use a fixed size memory allocation for the in-memory structure.
      
      Hence it makes no sense to set the function up as a variable sized
      structure when we already know it's maximum size, and we always
      allocate it as such. Simplify the structure by making the dirty
      bitmap a fixed sized array and just using the size of the structure
      for the allocation size.
      
      This will make it much simpler to allocate and manipulate an array
      of format structures for discontiguous buffer support.
      
      The previous struct xfs_buf_log_item size according to
      /proc/slabinfo was 224 bytes. pahole doesn't give the same size
      because of the variable size definition. With this modification,
      pahole reports the same as /proc/slabinfo:
      
      	/* size: 224, cachelines: 4, members: 6 */
      
      Because the xfs_buf_log_item size is now determined by the maximum
      supported block size we introduce a dependency on xfs_alloc_btree.h.
      Avoid this dependency by moving the idefines for the maximum block
      sizes supported to xfs_types.h with all the other max/min type
      defines to avoid any new dependencies.
      Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarBen Myers <bpm@sgi.com>
      77c1a08f
  5. 21 Jun, 2012 6 commits
  6. 14 Jun, 2012 2 commits