1. 16 Jul, 2012 6 commits
    • David Teigland's avatar
      dlm: fix missing dir remove · 96006ea6
      David Teigland authored
      I don't know exactly how, but in some cases, a dir
      record is not removed, or a new one is created when
      it shouldn't be.  The result is that the dir node
      lookup returns a master node where the rsb does not
      exist.  In this case, The master node will repeatedly
      return -EBADR for requests, and the lock requests will
      be stuck.
      
      Until all possible ways for this to happen can be
      eliminated, a simple and effective way to recover from
      this situation is for the supposed master node to send
      a standard remove message to the dir node when it
      receives a request for a resource it has no rsb for.
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      96006ea6
    • David Teigland's avatar
      dlm: fix conversion deadlock from recovery · c503a621
      David Teigland authored
      The process of rebuilding locks on a new master during
      recovery could re-order the locks on the convert queue,
      creating an "in place" conversion deadlock that would
      not be resolved.  Fix this by not considering queue
      order when granting conversions after recovery.
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      c503a621
    • David Teigland's avatar
      dlm: use wait_event_timeout · 6d768177
      David Teigland authored
      Use wait_event_timeout to avoid using a timer
      directly.
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      6d768177
    • David Teigland's avatar
      dlm: fix race between remove and lookup · 05c32f47
      David Teigland authored
      It was possible for a remove message on an old
      rsb to be sent after a lookup message on a new
      rsb, where the rsbs were for the same resource
      name.  This could lead to a missing directory
      entry for the new rsb.
      
      It is fixed by keeping a copy of the resource
      name being removed until after the remove has
      been sent.  A lookup checks if this in-progress
      remove matches the name it is looking up.
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      05c32f47
    • David Teigland's avatar
      dlm: use idr instead of list for recovered rsbs · 1d7c484e
      David Teigland authored
      When a large number of resources are being recovered,
      a linear search of the recover_list takes a long time.
      Use an idr in place of a list.
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      1d7c484e
    • David Teigland's avatar
      dlm: use rsbtbl as resource directory · c04fecb4
      David Teigland authored
      Remove the dir hash table (dirtbl), and use
      the rsb hash table (rsbtbl) as the resource
      directory.  It has always been an unnecessary
      duplication of information.
      
      This improves efficiency by using a single rsbtbl
      lookup in many cases where both rsbtbl and dirtbl
      lookups were needed previously.
      
      This eliminates the need to handle cases of rsbtbl
      and dirtbl being out of sync.
      
      In many cases there will be memory savings because
      the dir hash table no longer exists.
      Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
      c04fecb4
  2. 05 Jun, 2012 21 commits
  3. 04 Jun, 2012 13 commits