1. 08 2月, 2007 13 次提交
  2. 07 2月, 2007 4 次提交
  3. 06 2月, 2007 23 次提交
    • P
      [DLM] fix softlockup in dlm_recv · a34fbc63
      Patrick Caulfield 提交于
      This patch stops the dlm_recv workqueue from busy-waiting when a node
      disconnects. This can cause soft lockup errors on debug systems and bad
      performance generally.
      Signed-Off-By: NPatrick Caulfield <pcaulfie@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      a34fbc63
    • D
      [DLM] zero new user lvbs · 62a0f623
      David Teigland 提交于
      A new lvb for a userland lock wasn't being initialized to zero.
      Signed-off-by: NDavid Teigland <teigland@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      62a0f623
    • R
      [DLM/GFS2] indent help text · 9beeb9f3
      Randy Dunlap 提交于
      Indent help text as expected.
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      9beeb9f3
    • R
      [GFS2] Fix unlink deadlocks · ddee7608
      Russell Cattelan 提交于
      Move the glock acquisition to outside of the transactions.
      
      Lock odering must be preserved in order to prevent ABBA
      deadlocks. The current gfs2_change_nlink code would tries
      to grab the glock after having started a transaction and thus is holding
      the log lock. This is inconsistent with other code paths in
      gfs that grab the resource group glock prior to staring
      a tranactions.
      
      One problem with this fix is that the resource group
      lock is always grabbed now even if the inode still has
      ref count and can not be marked for unlink.
      Signed-off-by: NRussell Cattelan <cattelan@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      ddee7608
    • S
      [GFS2] Put back semaphore to avoid umount problem · 61be084e
      Steven Whitehouse 提交于
      Dave Teigland fixed this bug a while back, but I managed to mistakenly
      remove the semaphore during later development. It is required to avoid
      the list of inodes changing during an invalidate_inodes call. I have
      made it an rwsem since the read side will be taken frequently during
      normal filesystem operation. The write site will only happen during
      umount of the file system.
      
      Also the bug only triggers when using the DLM lock manager and only then
      under certain conditions as its timing related.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      Cc: David Teigland <teigland@redhat.com>
      61be084e
    • E
      [GFS2] more CURRENT_TIME_SEC · bbb28ab7
      Eric Sandeen 提交于
      Whoops, quilt user error, missed this one in the previous patch.
      Signed-off-by: NEric Sandeen <sandeen@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      bbb28ab7
    • A
      [GFS2/DLM] fix GFS2 circular dependency · 00117277
      Adrian Bunk 提交于
      On Sun, Jan 28, 2007 at 11:08:18AM +0100, Jiri Slaby wrote:
      > Andrew Morton napsal(a):
      > >Temporarily at
      > >
      > >	http://userweb.kernel.org/~akpm/2.6.20-rc6-mm1/
      >
      > Unable to select IPV6. Menuconfig doesn't offer it when INET is selected.
      > When it's not it appears in the menu, but after state change it gets away.
      > The same behaviour in xconfig, gconfig.
      >
      > $ mkdir ../a/tst
      > $ make O=../a/tst menuconfig
      >   HOSTCC  scripts/basic/fixdep
      > [...]
      >   HOSTLD  scripts/kconfig/mconf
      > scripts/kconfig/mconf arch/i386/Kconfig
      > Warning! Found recursive dependency: INET GFS2_FS_LOCKING_DLM SYSFS
      > OCFS2_FS INET
      >
      > Maybe this is the problem?
      
      Yes, patch below.
      
      > regards,
      
      cu
      Adrian
      
      <--  snip  -->
      
      This patch fixes a circular dependency by letting GFS2_FS_LOCKING_DLM
      and DLM depend on instead of select SYSFS.
      
      Since SYSFS depends on EMBEDDED this change shouldn't cause any problems
      for users.
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      Acked-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      00117277
    • R
      [GFS2/DLM] use sysfs · 67f55897
      Randy Dunlap 提交于
      With CONFIG_DLM=m, CONFIG_PROC_FS=n, and CONFIG_SYSFS=n, kernel build
      fails with:
      
      WARNING: "kernel_subsys" [fs/gfs2/locking/dlm/lock_dlm.ko] undefined!
      WARNING: "kernel_subsys" [fs/dlm/dlm.ko] undefined!
      WARNING: "kernel_subsys" [fs/configfs/configfs.ko] undefined!
      make[1]: *** [__modpost] Error 1
      make: *** [modules] Error 2
      
      Since fs/dlm/lockspace.c and fs/gfs2/locking/dlm/sysfs.c use
      kernel_subsys, they should either DEPEND on it or SELECT it.
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      67f55897
    • D
      [GFS2] make lock_dlm drop_count tunable in sysfs · ee32e4f3
      David Teigland 提交于
      We want to be able to change or disable the default drop_count (number at
      which the dlm asks gfs to limit the the number of locks it's holding).
      Add it to the collection of sysfs tunables for an fs.
      Signed-off-by: NDavid Teigland <teigland@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      ee32e4f3
    • D
      [GFS2] increase default lock limit · 2f708649
      David Teigland 提交于
      Increase the number of locks at which point the dlm begins asking gfs to
      reduce its lock usage.  The default value is largely arbitrary, but the
      current value of 50,000 ends up limiting performance unnecessarily for too
      many users.
      Signed-off-by: NDavid Teigland <teigland@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      2f708649
    • S
      [GFS2] Fix list corruption in lops.c · 8bd95727
      Steven Whitehouse 提交于
      The patch below appears to fix the list corruption that we are seeing on
      occasion. Although the transaction structure is private to a single
      thread, when the queued structures are dismantled during an in-core
      commit, its possible for a different thread to be trying to add the same
      structure to another, new, transaction at the same time.
      
      To avoid this, this patch takes the log spinlock during this operation.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      8bd95727
    • S
      [GFS2] Fix recursive locking attempt with NFS · d7c103d0
      Steven Whitehouse 提交于
      In certain cases, its possible for NFS to call the lookup code while
      holding the glock (when doing a readdirplus operation) so we need to
      check for that and not try and lock the glock twice. This also fixes a
      typo in a previous NFS related GFS2 patch.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      d7c103d0
    • D
      [DLM] can miss clearing resend flag · b790c3b7
      David Teigland 提交于
      A long, complicated sequence of events, beginning with the RESEND flag not
      being cleared on an lkb, can result in an unlock never completing.
      
      - lkb on waiters list for remote lookup
      - the remote node is both the dir node and the master node, so
        it optimizes the lookup into a request and sends a request
        reply back
      - the request reply is saved on the requestqueue to be processed
        after recovery
      - recovery runs dlm_recover_waiters_pre() which sets RESEND flag
        so the lookup will be resent after recovery
      - end of recovery: process_requestqueue takes saved request reply
        which removes the lkb off the waitesr list, _without_ clearing
        the RESEND flag
      - end of recovery: dlm_recover_waiters_post() doesn't do anything
        with the now completed lookup lkb (would usually clear RESEND)
      - later, the node unmounts, unlocks this lkb that still has RESEND
        flag set
      - the lkb is on the waiters list again, now for unlock, when recovery
        occurs, dlm_recover_waiters_pre() shows the lkb for unlock with RESEND
        set, doesn't do anything since the master still exists
      - end of recovery: dlm_recover_waiters_post() takes this lkb off
        the waiters list because it has the RESEND flag set, then reports
        an error because unlocks are never supposed to be handled in
        recover_waiters_post().
      - later, the unlock reply is received, doesn't find the lkb on
        the waiters list because recover_waiters_post() has wrongly
        removed it.
      - the unlock operation has been lost, and we're left with a
        stray granted lock
      - unmount spins waiting for the unlock to complete
      
      The visible evidence of this problem will be a node where gfs umount is
      spinning, the dlm waiters list will be empty, and the dlm locks list will
      show a granted lock.
      
      The fix is simply to clear the RESEND flag when taking an lkb off the
      waiters list.
      Signed-off-by: NDavid Teigland <teigland@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      b790c3b7
    • D
      [DLM] saved dlm message can be dropped · 8fd3a98f
      David Teigland 提交于
      dlm_receive_message() returns 0 instead of returning 'error'.  What would
      happen is that process_requestqueue would take a saved message off the
      requestqueue and call receive_message on it.  receive_message would then
      see that recovery had been aborted, set error to EINTR, and 'goto out',
      expecting that the error would be returned.  Instead, 0 was always
      returned, so process_requestqueue would think that the message had been
      processed and delete it instead of saving it to process next time.  This
      means the message (usually an unlock in my tests) would be lost.
      Signed-off-by: NDavid Teigland <teigland@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      8fd3a98f
    • P
      [DLM] Make sock_sem into a mutex · f1f1c1cc
      Patrick Caulfield 提交于
      Now that there can be multiple dlm_recv threads running we need to prevent two
      recvs running for the same connection - it's unlikely but it can happen and it
      causes message corruption.
      Signed-Off-By: NPatrick Caulfield <pcaulfie@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      f1f1c1cc
    • S
      [GFS2] Fix typo in glock.c · d043e190
      Steven Whitehouse 提交于
      This is a one letter typo fix in glock.c, spotted by Rob Kenna.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      d043e190
    • E
      [GFS2] use CURRENT_TIME_SEC instead of get_seconds in gfs2 · ddfe0627
      Eric Sandeen 提交于
      I was looking something else up and came across this...
      
      I don't honestly have a good reason to change it other than to make it
      like every other Linux filesystem in this regard.  ;-)  It doesn't
      functionally change anything, but makes some lines shorter. :)
      
      I'm also curious; why does gfs2 have 64-bits of on-disk timestamps, but
      not in timespec_t format, and only stores second resolutions?  Seems like
      you're halfway to sub-second resolutions already.
      
      I suppose if that gets implemented then all of the below should
      instead be CURRENT_TIME not CURRENT_TIME_SEC.
      Signed-off-by: NEric Sandeen <sandeen@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      ddfe0627
    • S
      [GFS2] Compile fix for glock.c · 90101c31
      Steven Whitehouse 提交于
      This one liner got missed from the previous patch.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      90101c31
    • S
      [GFS2] Remove queue_empty() function · 12132933
      Steven Whitehouse 提交于
      This function is not longer required since we do not do recursive
      locking in the glock layer. As a result all its callers can be
      replaceed with list_empty() calls.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      12132933
    • P
      [DLM] fix lowcomms receiving · bd44e2b0
      Patrick Caulfield 提交于
      This patch fixes a bug whereby data on a newly accepted connection would be
      ignored if it arrived soon after the accept.
      Signed-Off-By: NPatrick Caulfield <pcaulfie@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      bd44e2b0
    • S
      [GFS2] Tidy up glops calls · b5d32bea
      Steven Whitehouse 提交于
      This patch doesn't make any changes to the ordering of the various
      operations related to glocking, but it does tidy up the calls to the
      glops.c functions to make the structure more obvious.
      
      The two functions: gfs2_glock_xmote_th() and gfs2_glock_drop_th() can be
      made static within glock.c since they are called by every set of glock
      operations. The xmote_th and drop_th glock operations are then made
      conditional upon those two routines existing and called from the
      previously mentioned functions in glock.c respectively.
      
      Also it can be seen that the go_sync operation isn't needed since it can
      easily be replaced by calls to xmote_bh and drop_bh respectively. This
      results in no longer (confusingly) calling back into routines in glock.c
      from glops.c and also reducing the glock operations by one member.
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      b5d32bea
    • P
      [DLM] lowcomms tidy · f2f5095f
      Patrick Caulfield 提交于
      This patch removes some redundant fields from the connection structure and adds
      some lockdep annotation to remove spurious warnings.
      Signed-Off-By: NPatrick Caulfield <pcaulfie@redhat.com>
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      f2f5095f
    • S
      [GFS2] Remove local exclusive glock mode · 1c0f4872
      Steven Whitehouse 提交于
      Here is a patch for GFS2 to remove the local exclusive flag. In
      the places it was used, mutex's are always held earlier in the
      call path, so it appears redundant in the LM_ST_SHARED case.
      
      Also, the GFS2 holders were setting local exclusive in any case where
      the requested lock was LM_ST_EXCLUSIVE. So the other places in the glock
      code where the flag was tested have been replaced with tests for the
      lock state being LM_ST_EXCLUSIVE in order to ensure the logic is the
      same as before (i.e. LM_ST_EXCLUSIVE is always locally exclusive as well
      as globally exclusive).
      Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
      1c0f4872