1. 30 7月, 2012 2 次提交
  2. 23 7月, 2012 2 次提交
  3. 22 7月, 2012 5 次提交
  4. 14 7月, 2012 4 次提交
  5. 02 7月, 2012 9 次提交
    • D
      xfs: factor buffer reading from xfs_dir2_leaf_getdents · 9b73bd7b
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      9b73bd7b
    • D
      xfs: remove struct xfs_dabuf and infrastructure · 1d9025e5
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      1d9025e5
    • D
      xfs: use discontiguous xfs_buf support in dabuf wrappers · 3605431f
      Dave Chinner 提交于
      First step in converting the directory code to use native
      discontiguous buffers and replacing the dabuf construct.
      Signed-off-by: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      3605431f
    • D
      xfs: support discontiguous buffers in the xfs_buf_log_item · 372cc85e
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      372cc85e
    • D
      xfs: add discontiguous buffer support to transactions · de2a4f59
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      de2a4f59
    • D
      xfs: add discontiguous buffer map interface · 6dde2707
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      6dde2707
    • D
      xfs: convert internal buffer functions to pass maps · 3e85c868
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      3e85c868
    • D
      xfs: separate buffer indexing from block map · cbb7baab
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      cbb7baab
    • D
      xfs: struct xfs_buf_log_format isn't variable sized. · 77c1a08f
      Dave Chinner 提交于
      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: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      77c1a08f
  6. 22 6月, 2012 5 次提交
  7. 21 6月, 2012 1 次提交
  8. 15 6月, 2012 6 次提交
    • C
      xfs: fix typo in comment of xfs_dinode_t. · 51c84223
      Chen Baozi 提交于
      There should be "XFS_DFORK_DPTR, XFS_DFORK_APTR, and XFS_DFORK_PTR" instead
      of "XFS_DFORK_PTR, XFS_DFORK_DPTR, and XFS_DFORK_PTR".
      Signed-off-by: NChen Baozi <baozich@gmail.com>
      Reviewed-by: NMark Tinguely <tinguely@sgi.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      51c84223
    • D
      xfs: kill copy and paste segment checks in xfs_file_aio_read · 52764329
      Dave Chinner 提交于
      The generic segment check code now returns a count of the number of
      bytes in the iovec, so we don't need to roll our own anymore.
      Signed-off-by: NDave Chinner <dchinner@redhat.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      52764329
    • D
      xfs: make largest supported offset less shouty · 32972383
      Dave Chinner 提交于
      XFS_MAXIOFFSET() is just a simple macro that resolves to
      mp->m_maxioffset. It doesn't need to exist, and it just makes the
      code unnecessarily loud and shouty.
      
      Make it quiet and easy to read.
      Signed-off-by: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NEric Sandeen <sandeen@redhat.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      32972383
    • D
      xfs: m_maxioffset is redundant · d2c28191
      Dave Chinner 提交于
      The m_maxioffset field in the struct xfs_mount contains the same
      value as the superblock s_maxbytes field. There is no need to carry
      two copies of this limit around, so use the VFS superblock version.
      Signed-off-by: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NEric Sandeen <sandeen@redhat.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      d2c28191
    • J
      xfs: fix debug_object WARN at xfs_alloc_vextent() · 0f2cf9d3
      Jeff Liu 提交于
      Fengguang reports:
      
      [  780.529603] XFS (vdd): Ending clean mount
      [  781.454590] ODEBUG: object is on stack, but not annotated
      [  781.455433] ------------[ cut here ]------------
      [  781.455433] WARNING: at /c/kernel-tests/sound/lib/debugobjects.c:301 __debug_object_init+0x173/0x1f1()
      [  781.455433] Hardware name: Bochs
      [  781.455433] Modules linked in:
      [  781.455433] Pid: 26910, comm: kworker/0:2 Not tainted 3.4.0+ #51
      [  781.455433] Call Trace:
      [  781.455433]  [<ffffffff8106bc84>] warn_slowpath_common+0x83/0x9b
      [  781.455433]  [<ffffffff8106bcb6>] warn_slowpath_null+0x1a/0x1c
      [  781.455433]  [<ffffffff814919a5>] __debug_object_init+0x173/0x1f1
      [  781.455433]  [<ffffffff81491c65>] debug_object_init+0x14/0x16
      [  781.455433]  [<ffffffff8108842a>] __init_work+0x20/0x22
      [  781.455433]  [<ffffffff8134ea56>] xfs_alloc_vextent+0x6c/0xd5
      
      Use INIT_WORK_ONSTACK in xfs_alloc_vextent instead of INIT_WORK.
      Reported-by: NWu Fengguang <wfg@linux.intel.com>
      Signed-off-by: NJie Liu <jeff.liu@oracle.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      0f2cf9d3
    • A
      xfs: xfs_vm_writepage clear iomap_valid when !buffer_uptodate (REV2) · 7d0fa3ec
      Alain Renaud 提交于
      On filesytems with a block size smaller than PAGE_SIZE we currently have
      a problem with unwritten extents.  If a we have multi-block page for
      which an unwritten extent has been allocated, and only some of the
      buffers have been written to, and they are not contiguous, we can expose
      stale data from disk in the blocks between the writes after extent
      conversion.
      
      Example of a page with unwritten and real data.
      buffer  content
      0       empty  b_state = 0
      1       DATA   b_state = 0x1023 Uptodate,Dirty,Mapped,Unwritten
      2       DATA   b_state = 0x1023 Uptodate,Dirty,Mapped,Unwritten
      3       empty  b_state = 0
      4       empty  b_state = 0
      5       DATA   b_state = 0x1023 Uptodate,Dirty,Mapped,Unwritten
      6       DATA   b_state = 0x1023 Uptodate,Dirty,Mapped,Unwritten
      7       empty  b_state = 0
      
      Buffers 1, 2, 5, and 6 have been written to, leaving 0, 3, 4, and 7
      empty.  Currently buffers 1, 2, 5, and 6 are added to a single ioend,
      and when IO has completed, extent conversion creates a real extent from
      block 1 through block 6, leaving 0 and 7 unwritten.  However buffers 3
      and 4 were not written to disk, so stale data is exposed from those
      blocks on a subsequent read.
      
      Fix this by setting iomap_valid = 0 when we find a buffer that is not
      Uptodate.  This ensures that buffers 5 and 6 are not added to the same
      ioend as buffers 1 and 2.  Later these blocks will be converted into two
      separate real extents, leaving the blocks in between unwritten.
      Signed-off-by: NAlain Renaud <arenaud@sgi.com>
      Reviewed-by: NDave Chinner <dchinner@redhat.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      7d0fa3ec
  9. 02 6月, 2012 1 次提交
    • J
      fs: introduce inode operation ->update_time · c3b2da31
      Josef Bacik 提交于
      Btrfs has to make sure we have space to allocate new blocks in order to modify
      the inode, so updating time can fail.  We've gotten around this by having our
      own file_update_time but this is kind of a pain, and Christoph has indicated he
      would like to make xfs do something different with atime updates.  So introduce
      ->update_time, where we will deal with i_version an a/m/c time updates and
      indicate which changes need to be made.  The normal version just does what it
      has always done, updates the time and marks the inode dirty, and then
      filesystems can choose to do something different.
      
      I've gone through all of the users of file_update_time and made them check for
      errors with the exception of the fault code since it's complicated and I wasn't
      quite sure what to do there, also Jan is going to be pushing the file time
      updates into page_mkwrite for those who have it so that should satisfy btrfs and
      make it not a big deal to check the file_update_time() return code in the
      generic fault path. Thanks,
      Signed-off-by: NJosef Bacik <josef@redhat.com>
      c3b2da31
  10. 30 5月, 2012 2 次提交
  11. 21 5月, 2012 3 次提交
    • D
      xfs: add trace points for log forces · 14c26c6a
      Dave Chinner 提交于
      To enable easy tracing of the location of log forces and the
      frequency of them via perf, add a pair of trace points to the log
      force functions.  This will help debug where excessive log forces
      are being issued from by simple perf commands like:
      
      # ~/perf/perf top -e xfs:xfs_log_force -G -U
      
      Which gives this sort of output:
      
      Events: 141  xfs:xfs_log_force
      -  100.00%  [kernel]  [k] xfs_log_force
         - xfs_log_force
              87.04% xfsaild
                 kthread
                 kernel_thread_helper
            - 12.87% xfs_buf_lock
                 _xfs_buf_find
                 xfs_buf_get
                 xfs_trans_get_buf
                 xfs_da_do_buf
                 xfs_da_get_buf
                 xfs_dir2_data_init
                 xfs_dir2_leaf_addname
                 xfs_dir_createname
                 xfs_create
                 xfs_vn_mknod
                 xfs_vn_create
                 vfs_create
                 do_last.isra.41
                 path_openat
                 do_filp_open
                 do_sys_open
                 sys_open
                 system_call_fastpath
      Signed-off-by: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NMark Tinguely <tinguely@sgi.com>
      Signed-off-by: NBen Myers <bpm@sig.com>
      14c26c6a
    • P
      xfs: fix memory reclaim deadlock on agi buffer · 3ba31603
      Peter Watkins 提交于
      Note xfs_iget can be called while holding a locked agi buffer. If
      it goes into memory reclaim then inode teardown may try to lock the
      same buffer. Prevent the deadlock by calling radix_tree_preload
      with GFP_NOFS.
      Signed-off-by: NPeter Watkins <treestem@gmail.com>
      Reviewed-by: NDave Chinner <dchinner@redhat.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      3ba31603
    • D
      xfs: fix delalloc quota accounting on failure · ea562ed6
      Dave Chinner 提交于
      xfstest 270 was causing quota reservations way beyond what was sane
      (ten to hundreds of TB) for a 4GB filesystem. There's a sign problem
      in the error handling path of xfs_bmapi_reserve_delalloc() because
      xfs_trans_unreserve_quota_nblks() simple negates the value passed -
      which doesn't work for an unsigned variable. This causes
      reservations of close to 2^32 block instead of removing a
      reservation of a handful of blocks.
      
      Fix the same problem in the other xfs_trans_unreserve_quota_nblks()
      callers where unsigned integer variables are used, too.
      Signed-off-by: NDave Chinner <dchinner@redhat.com>
      Reviewed-by: NEric Sandeen <sandeen@redhat.com>
      Signed-off-by: NBen Myers <bpm@sgi.com>
      ea562ed6