1. 22 9月, 2009 1 次提交
  2. 13 7月, 2009 1 次提交
  3. 18 6月, 2009 2 次提交
    • C
      lockd: Update NSM state from SM_MON replies · 6c9dc425
      Chuck Lever 提交于
      When rpc.statd starts up in user space at boot time, it attempts to
      write the latest NSM local state number into
      /proc/sys/fs/nfs/nsm_local_state.
      
      If lockd.ko isn't loaded yet (as is the case in most configurations),
      that file doesn't exist, thus the kernel's NSM state remains set to
      its initial value of zero during lockd operation.
      
      This is a problem because rpc.statd and lockd use the NSM state number
      to prevent repeated lock recovery on rebooted hosts.  If lockd sends
      a zero NSM state, but then a delayed SM_NOTIFY with a real NSM state
      number is received, there is no way for lockd or rpc.statd to
      distinguish that stale SM_NOTIFY from an actual reboot.  Thus lock
      recovery could be performed after the rebooted host has already
      started reclaiming locks, and those locks will be lost.
      
      We could change /etc/init.d/nfslock so it always modprobes lockd.ko
      before starting rpc.statd.  However, if lockd.ko is ever unloaded
      and reloaded, we are back at square one, since the NSM state is not
      preserved across an unload/reload cycle.  This may happen frequently
      on clients that use automounter.  A period of NFS inactivity causes
      lockd.ko to be unloaded, and the kernel loses its NSM state setting.
      
      Instead, let's use the fact that rpc.statd plants the local system's
      NSM state in every SM_MON (and SM_UNMON) reply.  lockd performs a
      synchronous SM_MON upcall to the local rpc.statd _before_ sending its
      first NLM request to a new remote.  This would permit rpc.statd to
      provide the current NSM state to lockd, even after lockd.ko had been
      unloaded and reloaded.
      
      Note that NLMPROC_LOCK arguments are constructed before the
      nsm_monitor() call, so we have to rearrange argument construction very
      slightly to make this all work out.
      
      And, the kernel appears to treat NSM state as a u32 (see struct
      nlm_args and nsm_res).  Make nsm_local_state a u32 as well, to ensure
      we don't get bogus comparison results.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      6c9dc425
    • T
  4. 07 1月, 2009 2 次提交
  5. 26 7月, 2008 1 次提交
  6. 16 7月, 2008 2 次提交
  7. 30 4月, 2008 1 次提交
  8. 20 4月, 2008 7 次提交
  9. 30 1月, 2008 2 次提交
    • T
      65fdf7d2
    • C
      NLM/NFS: Use cached nlm_host when calling nlmclnt_proc() · 1093a60e
      Chuck Lever 提交于
      Now that each NFS mount point caches its own nlm_host structure, it can be
      passed to nlmclnt_proc() for each lock request.  By pinning an nlm_host for
      each mount point, we trade the overhead of looking up or creating a fresh
      nlm_host struct during every NLM procedure call for a little extra memory.
      
      We also restrict the nlmclnt_proc symbol to limit the use of this call to
      in-tree modules.
      
      Note that nlm_lookup_host() (just removed from the client's per-request
      NLM processing) could also trigger an nlm_host garbage collection.  Now
      client-side nlm_host garbage collection occurs only during NFS mount
      processing.  Since the NFS client now holds a reference on these nlm_host
      structures, they wouldn't have been affected by garbage collection
      anyway.
      
      Given that nlm_lookup_host() reorders the global nlm_host chain after
      every successful lookup, and that a garbage collection could be triggered
      during the call, we've removed a significant amount of per-NLM-request
      CPU processing overhead.
      
      Sidebar: there are only a few remaining references to the internals of
      NFS inodes in the client-side NLM code.  The only references I found are
      related to extracting or comparing the inode's file handle via NFS_FH().
      One is in nlmclnt_grant(); the other is in nlmclnt_setlockargs().
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      1093a60e
  10. 09 5月, 2007 1 次提交
  11. 04 2月, 2007 1 次提交
  12. 14 12月, 2006 1 次提交
  13. 09 12月, 2006 1 次提交
  14. 08 12月, 2006 1 次提交
  15. 06 12月, 2006 1 次提交
  16. 04 10月, 2006 3 次提交
  17. 02 10月, 2006 1 次提交
  18. 27 9月, 2006 1 次提交
  19. 23 9月, 2006 1 次提交
  20. 06 7月, 2006 2 次提交
  21. 01 7月, 2006 1 次提交
  22. 09 6月, 2006 1 次提交
  23. 21 3月, 2006 5 次提交