1. 07 2月, 2007 2 次提交
  2. 06 2月, 2007 3 次提交
    • S
      [GFS2] Add writepages for "data=writeback" mounts · a8d638e3
      Steven Whitehouse 提交于
      It occurred to me that although a gfs2 specific writepages for ordered
      writes and journaled data would be tricky, by hooking writepages only
      for "data=writeback" mounts we could take advantage of not needing
      buffer heads (we don't use them on the read side, nor have we for some
      time) and create much larger I/Os for the block layer.
      
      Using blktrace both before and after, its possible to see that for large
      I/Os, most of the requests generated through writepages are now 1024
      sectors after this patch is applied as opposed to 8 sectors before.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      a8d638e3
    • S
      [GFS2] Fail over to readpage for stuffed files · e1d5b18a
      Steven Whitehouse 提交于
      This is partially derrived from a patch written by Russell Cattelan.
      It fixes a bug where there is a race between readpages and truncate
      by ignoring readpages for stuffed files. This is ok because a stuffed
      file will never be more than one block (minus sizeof(struct gfs2_dinode))
      in size and block size is always less than page size, so we do not lose
      anything efficiency-wise by not doing readahead for stuffed files. They
      will have already been "read ahead" by the action of reading the inode
      in, in the first place.
      
      This is the remaining part of the fix for Red Hat bugzilla #218966
      which had not yet made it upstream.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      Cc: Russell Cattelan <cattelan@redhat.com>
      e1d5b18a
    • S
      [GFS2] Fix DIO deadlock · c7b33834
      Steven Whitehouse 提交于
      This patch fixes Red Hat bugzilla #212627 in which a deadlock occurs
      due to trying to take the i_mutex while holding a glock. The correct
      locking order is defined as i_mutex -> glock in all cases.
      
      I've left dealing with allocating writes. I know that we need to do
      that, but for now this should do the trick. We don't need to take the
      i_mutex on write, because the VFS has already taken it for us. On read
      we don't need it since the glock is enough protection. The reason that
      I've made some of the checks into a separate function is that we'll need
      to do the checks again in the allocating write case eventually, so this
      is partly in preparation for this. Likewise the return value test of !=
      1 might look a bit odd and thats because we'll need a third return value
      in case of requiring an allocation.
      
      I've made the change to deferred mode on the glock to ensure flushing
      read caches on other nodes. I notice that (using blktrace to look at
      whats going on) we appear to do a better job of large I/Os than ext3
      after this patch (in terms of not splitting up the I/Os).
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      Cc: Wendy Cheng <wcheng@redhat.com>
      c7b33834
  3. 30 11月, 2006 7 次提交
  4. 04 11月, 2006 1 次提交
  5. 20 10月, 2006 1 次提交
  6. 13 10月, 2006 3 次提交
  7. 03 10月, 2006 1 次提交
    • S
      [GFS2] Remove uneeded endian conversion · 48516ced
      Steven Whitehouse 提交于
      In many places GFS2 was calling the endian conversion routines
      for an inode even when only a single field, or a few fields might
      have changed. As a result we were copying lots of data needlessly.
      
      This patch replaces those calls with conversion of just the
      required fields in each case. This should be faster and easier
      to understand. There are still other places which suffer from this
      problem, but this is a start in the right direction.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      48516ced
  8. 25 9月, 2006 1 次提交
  9. 22 9月, 2006 1 次提交
    • S
      [GFS2] Tidy up meta_io code · 7276b3b0
      Steven Whitehouse 提交于
      Fix a bug in the directory reading code, where we might have dereferenced
      a NULL pointer in case of OOM. Updated the directory code to use the new
      & improved version of gfs2_meta_ra() which now returns the first block
      that was being read. Previously it was releasing it requiring following
      code to grab the block again at each point it was called.
      
      Also turned off readahead on directory lookups since we are reading a
      hash table, and therefore reading the entries in order is very
      unlikely. Readahead is still used for all other calls to the
      directory reading function (e.g. when growing the hash table).
      
      Removed the DIO_START constant. Everywhere this was used, it was
      used to unconditionally start i/o aside from a couple of places, so
      I've removed it and made the couple of exceptions to this rule into
      separate functions.
      
      Also hunted through the other DIO flags and removed them as arguments
      from functions which were always called with the same combination of
      arguments.
      
      Updated gfs2_meta_indirect_buffer to be a bit more efficient and
      hopefully also be a bit easier to read.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      7276b3b0
  10. 21 9月, 2006 1 次提交
  11. 19 9月, 2006 4 次提交
    • F
      [GFS2] Export lm_interface to kernel headers · 7d308590
      Fabio Massimo Di Nitto 提交于
      
      lm_interface.h has a few out of the tree clients such as GFS1
      and userland tools.
      
      Right now, these clients keeps a copy of the file in their build tree
      that can go out of sync.
      
      Move lm_interface.h to include/linux, export it to userland and
      clean up fs/gfs2 to use the new location.
      Signed-off-by: NFabio M. Di Nitto <fabbione@ubuntu.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      7d308590
    • S
      [GFS2] Tweek unlock test in readpage() · 07903c02
      Steven Whitehouse 提交于
      This make the unlock test a bit simpler.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      07903c02
    • R
      [GFS2] Fix for mmap() bug in readpage · dc41aeed
      Russell Cattelan 提交于
      Fix for Red Hat bz 205307. Don't need to lock in readpage if
      the higher level code has already grabbed the lock.
      Signed-off-by: NRussell Cattelan <cattelan@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      dc41aeed
    • S
      [GFS2] Map multiple blocks at once where possible · 7a6bbacb
      Steven Whitehouse 提交于
      This is a tidy up of the GFS2 bmap code. The main change is that the
      bh is passed to gfs2_block_map allowing the flags to be set directly
      rather than having to repeat that code several times in ops_address.c.
      
      At the same time, the extent mapping code from gfs2_extent_map has
      been moved into gfs2_block_map. This allows all calls to gfs2_block_map
      to map extents in the case that no allocation is taking place. As a
      result reads and non-allocating writes should be faster. A quick test
      with postmark appears to support this.
      
      There is a limit on the number of blocks mapped in a single bmap
      call in that it will only ever map blocks which are pointed to
      from a single pointer block. So in other words, it will never try
      to do additional i/o in order to satisfy read-ahead. The maximum
      number of blocks is thus somewhat less than 512 (the GFS2 4k block
      size minus the header divided by sizeof(u64)). I've further limited
      the mapping of "normal" blocks to 32 blocks (to avoid extra work)
      since readpages() will currently read a maximum of 32 blocks ahead (128k).
      
      Some further work will probably be needed to set a suitable value
      for DIO as well, but for now thats left at the maximum 512 (see
      ops_address.c:gfs2_get_block_direct).
      
      There is probably a lot more that can be done to improve bmap for GFS2,
      but this is a good first step.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      7a6bbacb
  12. 05 9月, 2006 3 次提交
  13. 01 9月, 2006 2 次提交
    • S
      [GFS2] Update copyright, tidy up incore.h · e9fc2aa0
      Steven Whitehouse 提交于
      As per comments from Jan Engelhardt <jengelh@linux01.gwdg.de> this
      updates the copyright message to say "version" in full rather than
      "v.2". Also incore.h has been updated to remove forward structure
      declarations which are not required.
      
      The gfs2_quota_lvb structure has now had endianess annotations added
      to it. Also quota.c has been updated so that we now store the
      lvb data locally in endian independant format to avoid needing
      a structure in host endianess too. As a result the endianess
      conversions are done as required at various points and thus the
      conversion routines in lvb.[ch] are no longer required. I've
      moved the one remaining constant in lvb.h thats used into lm.h
      and removed the unused lvb.[ch].
      
      I have not changed the HIF_ constants. That is left to a later patch
      which I hope will unify the gh_flags and gh_iflags fields of the
      struct gfs2_holder.
      
      Cc: Jan Engelhardt <jengelh@linux01.gwdg.de>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      e9fc2aa0
    • S
      [GFS2] Fix releasepage bug (fixes direct i/o writes) · 623d9355
      Steven Whitehouse 提交于
      This patch fixes three main bugs. Firstly the direct i/o get_block
      was returning the wrong return code in certain cases. Secondly, the
      GFS2's releasepage function was not dealing with cases when clean,
      ordered buffers were found still queued on a transaction (which can
      happen depending on the ordering of journal flushes). Thirdly, the
      journaling code itself needed altering to take account of the
      after effects of removing the clean ordered buffers from the transactions
      before a journal flush.
      
      The releasepage bug did also show up under "normal" buffered i/o
      as well, so its not just a fix for direct i/o. In fact its not
      normally used in the direct i/o path at all, except when flushing
      existing buffers after performing a direct i/o write, but that was
      the code path that led us to spot this.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      623d9355
  14. 25 8月, 2006 1 次提交
  15. 19 8月, 2006 1 次提交
    • S
      [GFS2] Fix leak of gfs2_bufdata · 15d00c0b
      Steven Whitehouse 提交于
      This fixes a memory leak of struct gfs2_bufdata and also some
      problems in the ordered write handling code. It needs a bit
      more testing, but I believe that the reference counting of
      ordered write buffers should now be correct.
      
      This is aimed at fixing Red Hat bugzilla: #201028 and #201082
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      15d00c0b
  16. 09 8月, 2006 1 次提交
    • S
      [GFS2] Fix lack of buffers in writepage bug · f4387149
      Steven Whitehouse 提交于
      In some cases we can enter write page without there being buffers
      attached to the page. In this case the function to add gfs2_bufdata
      to the buffers fails sliently causing further failures down the
      stack.
      
      This fix ensures that we always add buffers in writepage if they
      didn't already exist (mmap is one way to trigger this).
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      f4387149
  17. 05 8月, 2006 1 次提交
    • S
      [GFS2] Fix lock ordering bug in page fault path · 59a1cc6b
      Steven Whitehouse 提交于
      Mmapped files were able to trigger a lock ordering bug. Private
      maps do not need to take the glock so early on. Shared maps do
      unfortunately, however we can get around that by adding a flag
      into the flags for the struct gfs2_file. This only works because
      we are taking an exclusive lock at this point, so we know that
      nobody else can be racing with us.
      
      Fixes Red Hat bugzilla: #201196
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      59a1cc6b
  18. 26 7月, 2006 3 次提交
  19. 11 7月, 2006 2 次提交
    • S
      [GFS2] Add generation number · 4340fe62
      Steven Whitehouse 提交于
      This adds a generation number for the eventual use of NFS to the
      ondisk inode. Its backward compatible with the current code since
      it doesn't really matter what the generation number is to start with,
      and indeed since its set to zero, due to it being taken from padding
      in both the inode and rgrp header, it should be fine.
      
      The eventual plan is to use this rather than no_formal_ino in the
      NFS filehandles. At that point no_formal_ino will be unused.
      
      At the same time we also add a releasepages call back to the
      "normal" address space for gfs2 inodes. Also I've removed a
      one-linrer function thats not required any more.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      4340fe62
    • S
      [GFS2] Bug fix to gfs2_readpages() · ffeb874b
      Steven Whitehouse 提交于
      This fixes a bug where we were releasing a page incorrectly
      sometimes when reading a stuffed file. This fixes the bug
      that Kevin reported when using Xen.
      
      Cc: Kevin Anderson <kanderso@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      ffeb874b
  20. 05 7月, 2006 1 次提交