1. 30 7月, 2009 5 次提交
    • B
      GFS2: Don't put unlikely reclaim candidates on the reclaim list. · 8ff22a6f
      Benjamin Marzinski 提交于
      GFS2 was placing far too many glocks on the reclaim list that were not good
      candidates for freeing up from cache.  These locks would sit there and
      repeatedly get scanned to see if they could be reclaimed, wasting a lot
      of time when there was memory pressure. This fix does more checks on the
      locks to see if they are actually likely to be removable from cache.
      Signed-off-by: NBenjamin Marzinski <bmarzins@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      8ff22a6f
    • S
      GFS2: Don't try and dealloc own inode · 1e19a195
      Steven Whitehouse 提交于
      When searching for unlinked, but still allocated inodes during block
      allocation, avoid the block relating to the inode that is doing the
      allocation. This fixes a hang caused when an unlinked, but still
      open, inode tries to allocate some more blocks and lands up
      finding itself during the search for deallocatable inodes.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      1e19a195
    • B
      GFS2: Fix panic in glock memory shrinker · a51b56ff
      Benjamin Marzinski 提交于
      It is possible for gfs2_shrink_glock_memory() to check a glock for
      demotion
      that's in the process of being freed by gfs2_glock_put().  In this case,
      gfs2_shrink_glock_memory() will acquire a new reference to this glock,
      and
      then try to free the glock itself when it drops the refernce.  To solve
      this, gfs2_shrink_glock_memory() just needs to check if the glock is in
      the process of being freed, and if so skip it without ever unlocking the
      lru_lock.
      Signed-off-by: NBenjamin Marzinski <bmarzins@redhat.com>
      Acked-by: NBob Peterson <rpeterso@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      a51b56ff
    • B
      GFS2: keep statfs info in sync on grows · 1946f70a
      Benjamin Marzinski 提交于
      GFS2 wasn't syncing its statfs info on grows.  This causes a problem
      when you grow the filesystem on multiple nodes.  GFS2 would calculate
      the new space based on the resource groups (which are always current),
      and then assume that the filesystem had grown the from the existing
      statfs size.  If you grew the filesystem on two different nodes in a
      short time, the second node wouldn't see the statfs size change from the
      first node, and would assume that it was grown by a larger amount than
      it was.  When all these changes were synced out, the total fileystem
      size would be incorrect (the first grow would be counted twice).
      
      This patch syncs makes GFS2 read in the statfs changes from disk before
      a grow, and write them out after the grow, while the master statfs inode
      is locked.
      Signed-off-by: NBenjamin Marzinski <bmarzins@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      1946f70a
    • S
      GFS2: Shrink the shrinker · 2163b1e6
      Steven Whitehouse 提交于
      This patch removes some of the special cases that the shrinker
      was trying to deal with. As a result we leave fewer items on
      the list and none at all which cannot be demoted. This makes
      the list scanning more efficient and solves some issues seen
      with large numbers of inodes.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      2163b1e6
  2. 23 7月, 2009 33 次提交
  3. 22 7月, 2009 2 次提交
    • L
      fbmon: work around compiler bug in gcc-2.4.2 · 3730793d
      Linus Torvalds 提交于
      There's some odd bug in gcc-4.2 where it miscompiles a simple loop whent
      he loop counter is of type 'unsigned char' and it should count to 128.
      
      The compiler will incorrectly decide that a trivial loop like this:
      
      	unsigned char i, ...
      
      	for (i = 0; i < 128; i++) {
      		..
      
      is endless, and will compile it to a single instruction that just
      branches to itself.
      
      This was triggered by the addition of '-fno-strict-overflow', and we
      could play games with compiler versions and go back to '-fwrapv'
      instead, but the trivial way to avoid it is to just make the loop
      induction variable be an 'int' instead.
      
      Thanks to Krzysztof Oledzki for reporting and testing and to Troy Moure
      for digging through assembler differences and finding it.
      Reported-and-tested-by: NKrzysztof Oledzki <olel@ans.pl>
      Found-by: NTroy Moure <twmoure@szypr.net>
      Gcc-bug-acked-by: NIan Lance Taylor <iant@google.com>
      Cc: stable@kernel.org
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3730793d
    • P
      softirq: introduce tasklet_hrtimer infrastructure · 9ba5f005
      Peter Zijlstra 提交于
      commit ca109491 (hrtimer: removing all ur callback modes) moved all
      hrtimer callbacks into hard interrupt context when high resolution
      timers are active. That breaks code which relied on the assumption
      that the callback happens in softirq context.
      
      Provide a generic infrastructure which combines tasklets and hrtimers
      together to provide an in-softirq hrtimer experience.
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: torvalds@linux-foundation.org
      Cc: kaber@trash.net
      Cc: David Miller <davem@davemloft.net>
      LKML-Reference: <1248265724.27058.1366.camel@twins>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      9ba5f005