1. 27 6月, 2008 2 次提交
    • S
      [GFS2] No lock_nolock · 048bca22
      Steven Whitehouse 提交于
      This patch merges the lock_nolock module into GFS2 itself. As well as removing
      some of the overhead of the module, it also means that its now impossible to
      build GFS2 without a lock module (which would be a pointless thing to do
      anyway).
      
      We also plan to merge lock_dlm into GFS2 in the future, but that is a more
      tricky task, and will therefore be a separate patch.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      Cc: David Teigland <teigland@redhat.com>
      048bca22
    • S
      [GFS2] Clean up the glock core · 6802e340
      Steven Whitehouse 提交于
      This patch implements a number of cleanups to the core of the
      GFS2 glock code. As a result a lot of code is removed. It looks
      like a really big change, but actually a large part of this patch
      is either removing or moving existing code.
      
      There are some new bits too though, such as the new run_queue()
      function which is considerably streamlined. Highlights of this
      patch include:
      
       o Fixes a cluster coherency bug during SH -> EX lock conversions
       o Removes the "glmutex" code in favour of a single bit lock
       o Removes the ->go_xmote_bh() for inodes since it was duplicating
         ->go_lock()
       o We now only use the ->lm_lock() function for both locks and
         unlocks (i.e. unlock is a lock with target mode LM_ST_UNLOCKED)
       o The fast path is considerably shortly, giving performance gains
         especially with lock_nolock
       o The glock_workqueue is now used for all the callbacks from the DLM
         which allows us to simplify the lock_dlm module (see following patch)
       o The way is now open to make further changes such as eliminating the two
         threads (gfs2_glockd and gfs2_scand) in favour of a more efficient
         scheme.
      
      This patch has undergone extensive testing with various test suites
      so it should be pretty stable by now.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      Cc: Bob Peterson <rpeterso@redhat.com>
      6802e340
  2. 10 4月, 2008 1 次提交
  3. 31 3月, 2008 2 次提交
    • A
      [GFS2] fs/gfs2/recovery.c: suppress warnings · f5a8cd02
      akpm@linux-foundation.org 提交于
      fs/gfs2/recovery.c: In function 'get_log_header':
      fs/gfs2/recovery.c:152: warning: 'lh.lh_sequence' may be used uninitialized in this function
      fs/gfs2/recovery.c:152: warning: 'lh.lh_flags' may be used uninitialized in this function
      fs/gfs2/recovery.c:152: warning: 'lh.lh_tail' may be used uninitialized in this function
      fs/gfs2/recovery.c:152: warning: 'lh.lh_blkno' may be used uninitialized in this function
      fs/gfs2/recovery.c:152: warning: 'lh.lh_hash' may be used uninitialized in this function
      
      Cc: David Teigland <teigland@redhat.com>
      Cc: Bob Peterson <rpeterso@redhat.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      f5a8cd02
    • S
      [GFS2] Remove lm.[ch] and distribute content · da755fdb
      Steven Whitehouse 提交于
      The functions in lm.c were just wrappers which were mostly
      only used in one other file. By moving the functions to
      the files where they are being used, they can be marked
      static and also this will usually result in them being inlined
      since they are often only used from one point in the code.
      
      A couple of really trivial functions have been inlined by hand
      into the function which called them as it makes the code clearer
      to do that.
      
      We also gain from one fewer function call in the glock lock and
      unlock paths.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      da755fdb
  4. 03 2月, 2008 1 次提交
  5. 25 1月, 2008 2 次提交
    • A
      [GFS2] Allow journal recovery on read-only mount · 7bc5c414
      Abhijith Das 提交于
      This patch allows gfs2 to perform journal recovery even if it is mounted
      read-only. Strictly speaking, a read-only mount should not be writing to
      the filesystem, but we do this only to perform journal recovery. A
      read-only mount will fail if we don't recover the dirty journal. Also,
      when gfs2 is used as a root filesystem, it will be mounted read-only
      before being mounted read-write during the boot sequence. A failed
      read-only mount will panic the machine during bootup.
      Signed-off-by: NAbhijith Das <adas@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      7bc5c414
    • B
      [GFS2] Remove function gfs2_get_block · e9e1ef2b
      Bob Peterson 提交于
      This patch is just a cleanup.  Function gfs2_get_block() just calls
      function gfs2_block_map reversing the last two parameters.  By
      reversing the parameters, gfs2_block_map() may be called directly
      and function gfs2_get_block may be eliminated altogether.
      Since this function is done for every block operation,
      this streamlines the code and makes it a little bit more efficient.
      Signed-off-by: NBob Peterson <rpeterso@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      e9e1ef2b
  6. 10 10月, 2007 1 次提交
    • B
      [GFS2] Ensure journal file cache is flushed after recovery · 75be73a8
      Bob Peterson 提交于
      This is for bugzilla bug #248176: GFS2: invalid metadata block
      
      Patches 1 thru 3 were accepted upstream, but there were problems
      with 4 and 5.  Those issues have been resolved and now the recovery
      tests are passing without errors.  This code has gone through
      41 * 3 successful gfs2 recovery tests before it hit an
      unrelated (openais) problem.  I'm continuing to test it.
      
      This is a complete rewrite of patch 5 for bug #248176, written by
      Steve Whitehouse.  This is referred to in the bugzilla record as
      "new 6" and "a different solution".
      
      The problem was that the journal inodes, although protected by
      a glock, were not synched with the other nodes because they don't
      use the inode glock synch operations (i.e. no "glops" were defined).
      Therefore, journal recovery on a journal-recovering node were causing
      the blocks to get out of sync with the node that was actually trying
      to use that journal as it comes back up from a reboot.
      
      There are two possible solutions: (1) To make the journals use the
      normal inode glock sync operations, or (2) To make the journal
      operations take effect immediately (i.e. no caching).  Although
      option 1 works, it turns out to be a lot more code.  Steve opted
      for option 2, which is much simpler and therefore less prone to
      regression errors.
      Signed-off-by: NBob Peterson <rpeterso@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      
      --
      75be73a8
  7. 09 7月, 2007 1 次提交
    • S
      [GFS2] Fix sign problem in quota/statfs and cleanup _host structures · bb8d8a6f
      Steven Whitehouse 提交于
      This patch fixes some sign issues which were accidentally introduced
      into the quota & statfs code during the endianess annotation process.
      Also included is a general clean up which moves all of the _host
      structures out of gfs2_ondisk.h (where they should not have been to
      start with) and into the places where they are actually used (often only
      one place). Also those _host structures which are not required any more
      are removed entirely (which is the eventual plan for all of them).
      
      The conversion routines from ondisk.c are also moved into the places
      where they are actually used, which for almost every one, was just one
      single place, so all those are now static functions. This also cleans up
      the end of gfs2_ondisk.h which no longer needs the #ifdef __KERNEL__.
      
      The net result is a reduction of about 100 lines of code, many functions
      now marked static plus the bug fixes as mentioned above. For good
      measure I ran the code through sparse after making these changes to
      check that there are no warnings generated.
      
      This fixes Red Hat bz #239686
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      bb8d8a6f
  8. 15 2月, 2007 1 次提交
    • T
      [PATCH] remove many unneeded #includes of sched.h · cd354f1a
      Tim Schmielau 提交于
      After Al Viro (finally) succeeded in removing the sched.h #include in module.h
      recently, it makes sense again to remove other superfluous sched.h includes.
      There are quite a lot of files which include it but don't actually need
      anything defined in there.  Presumably these includes were once needed for
      macros that used to live in sched.h, but moved to other header files in the
      course of cleaning it up.
      
      To ease the pain, this time I did not fiddle with any header files and only
      removed #includes from .c-files, which tend to cause less trouble.
      
      Compile tested against 2.6.20-rc2 and 2.6.20-rc2-mm2 (with offsets) on alpha,
      arm, i386, ia64, mips, powerpc, and x86_64 with allnoconfig, defconfig,
      allmodconfig, and allyesconfig as well as a few randconfigs on x86_64 and all
      configs in arch/arm/configs on arm.  I also checked that no new warnings were
      introduced by the patch (actually, some warnings are removed that were emitted
      by unnecessarily included header files).
      Signed-off-by: NTim Schmielau <tim@physik3.uni-rostock.de>
      Acked-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      cd354f1a
  9. 06 12月, 2006 1 次提交
    • S
      [GFS2] Fix indent in recovery.c · 887bc5d0
      Steven Whitehouse 提交于
      As per comments from Andrew Morton and Jan Engelhardt, this fixes the
      indent and removes the "static" from a variable declaration since its
      not needed in this case (now allocated on the stack of the function
      in question).
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      Cc: Jan Engelhardt <jengelh@linux01.gwdg.de>
      Cc: Andrew Morton <akpm@osdl.org>
      887bc5d0
  10. 30 11月, 2006 2 次提交
  11. 20 10月, 2006 1 次提交
  12. 25 9月, 2006 1 次提交
  13. 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
  14. 19 9月, 2006 2 次提交
    • 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] 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
  15. 06 9月, 2006 1 次提交
  16. 05 9月, 2006 1 次提交
  17. 01 9月, 2006 1 次提交
    • 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
  18. 11 8月, 2006 1 次提交
  19. 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
  20. 15 6月, 2006 1 次提交
    • S
      [GFS2] Fix unlinked file handling · feaa7bba
      Steven Whitehouse 提交于
      This patch fixes the way we have been dealing with unlinked,
      but still open files. It removes all limits (other than memory
      for inodes, as per every other filesystem) on numbers of these
      which we can support on GFS2. It also means that (like other
      fs) its the responsibility of the last process to close the file
      to deallocate the storage, rather than the person who did the
      unlinking. Note that with GFS2, those two events might take place
      on different nodes.
      
      Also there are a number of other changes:
      
       o We use the Linux inode subsystem as it was intended to be
      used, wrt allocating GFS2 inodes
       o The Linux inode cache is now the point which we use for
      local enforcement of only holding one copy of the inode in
      core at once (previous to this we used the glock layer).
       o We no longer use the unlinked "special" file. We just ignore it
      completely. This makes unlinking more efficient.
       o We now use the 4th block allocation state. The previously unused
      state is used to track unlinked but still open inodes.
       o gfs2_inoded is no longer needed
       o Several fields are now no longer needed (and removed) from the in
      core struct gfs2_inode
       o Several fields are no longer needed (and removed) from the in core
      superblock
      
      There are a number of future possible optimisations and clean ups
      which have been made possible by this patch.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      feaa7bba
  21. 19 5月, 2006 2 次提交
  22. 06 5月, 2006 1 次提交
    • S
      [GFS2] Readpages support · fd88de56
      Steven Whitehouse 提交于
      This adds readpages support (and also corrects a small bug in
      the readpage error path at the same time). Hopefully this will
      improve performance by allowing GFS to submit larger lumps of
      I/O at a time.
      
      In order to simplify the setting of BH_Boundary, it currently gets
      set when we hit the end of a indirect pointer block. There is
      always a boundary at this point with the current allocation code.
      It doesn't get all the boundaries right though, so there is still
      room for improvement in this.
      
      See comments in fs/gfs2/ops_address.c for further information about
      readpages with GFS2.
      
      Signed-off-by: Steven Whitehouse
      fd88de56
  23. 27 4月, 2006 2 次提交
  24. 21 4月, 2006 1 次提交
    • D
      [GFS2] journal recovery patch · c63e31c2
      David Teigland 提交于
      This is one of the changes related to journal recovery I mentioned a
      couple weeks ago.  We can get into a situation where there are only
      readonly nodes currently mounting the fs, but there are journals that need
      to be recovered.  Since the readonly nodes can't recover journals, the
      next rw mounter needs to go through and check all journals and recover any
      that are dirty (i.e. what the first node to mount the fs does).  This rw
      mounter needs to skip the journals held by the existing readonly nodes.
      Skipping those journals amounts to using the TRY flag on the journal locks
      so acquiring the lock of a journal held by a readonly node will fail
      instead of blocking indefinately.
      Signed-off-by: NDavid Teigland <teigland@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      c63e31c2
  25. 31 3月, 2006 1 次提交
  26. 29 3月, 2006 1 次提交
    • S
      [GFS2] Further updates to dir and logging code · 71b86f56
      Steven Whitehouse 提交于
      This reduces the size of the directory code by about 3k and gets
      readdir() to use the functions which were introduced in the previous
      directory code update.
      
      Two memory allocations are merged into one. Eliminates zeroing of some
      buffers which were never used before they were initialised by
      other data.
      
      There is still scope for further improvement in the directory code.
      
      On the logging side, a hand created mutex has been replaced by a
      standard Linux mutex in the log allocation code.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      71b86f56
  27. 28 2月, 2006 2 次提交
  28. 13 2月, 2006 1 次提交
    • S
      [GFS2] Fix for root inode ref count bug · 7359a19c
      Steven Whitehouse 提交于
      Umount is now working correctly again. The bug was due to
      not getting an extra ref count when mounting the fs. We
      should have bumped it by two (once for the internal pointer
      to the root inode from the super block and once for the
      inode hanging off the dcache entry for root).
      
      Also this patch tidys up the code dealing with looking up
      and creating inodes. We now pass Linux inodes (with gfs2_inodes
      attached) rather than the other way around and this reduces code
      duplication in various places.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      7359a19c
  29. 17 1月, 2006 1 次提交