1. 23 9月, 2016 1 次提交
    • J
      nfs: allow blocking locks to be awoken by lock callbacks · a1d617d8
      Jeff Layton 提交于
      Add a waitqueue head to the client structure. Have clients set a wait
      on that queue prior to requesting a lock from the server. If the lock
      is blocked, then we can use that to wait for wakeups.
      
      Note that we do need to do this "manually" since we need to set the
      wait on the waitqueue prior to requesting the lock, but requesting a
      lock can involve activities that can block.
      
      However, only do that for NFSv4.1 locks, either by compiling out
      all of the waitqueue handling when CONFIG_NFS_V4_1 is disabled, or
      skipping all of it at runtime if we're dealing with v4.0, or v4.1
      servers that don't send lock callbacks.
      
      Note too that even when we expect to get a lock callback, RFC5661
      section 20.11.4 is pretty clear that we still need to poll for them,
      so we do still sleep on a timeout. We do however always poll at the
      longest interval in that case.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      [Anna: nfs4_retry_setlk() "status" should default to -ERESTARTSYS]
      Signed-off-by: NAnna Schumaker <Anna.Schumaker@Netapp.com>
      a1d617d8
  2. 18 5月, 2016 1 次提交
  3. 28 12月, 2015 1 次提交
  4. 16 10月, 2015 2 次提交
  5. 28 8月, 2015 1 次提交
  6. 23 7月, 2015 1 次提交
  7. 27 6月, 2015 1 次提交
  8. 04 2月, 2015 1 次提交
  9. 06 1月, 2015 1 次提交
  10. 26 11月, 2014 2 次提交
  11. 01 10月, 2014 1 次提交
  12. 13 7月, 2014 1 次提交
  13. 29 10月, 2013 3 次提交
  14. 02 10月, 2013 1 次提交
  15. 07 9月, 2013 1 次提交
    • A
      NFSv4.1 Use MDS auth flavor for data server connection · 0e20162e
      Andy Adamson 提交于
      Commit 4edaa308 "NFS: Use "krb5i" to establish NFSv4 state whenever possible"
      uses the nfs_client cl_rpcclient for all state management operations, and
      will use krb5i or auth_sys with no regard to the mount command authflavor
      choice.
      
      The MDS, as any NFSv4.1 mount point, uses the nfs_server rpc client for all
      non-state management operations with a different nfs_server for each fsid
      encountered traversing the mount point, each with a potentially different
      auth flavor.
      
      pNFS data servers are not mounted in the normal sense as there is no associated
      nfs_server structure. Data servers can also export multiple fsids, each with
      a potentially different auth flavor.
      
      Data servers need to use the same authflavor as the MDS server rpc client for
      non-state management operations. Populate a list of rpc clients with the MDS
      server rpc client auth flavor for the DS to use.
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      0e20162e
  16. 05 9月, 2013 5 次提交
  17. 04 9月, 2013 1 次提交
  18. 09 6月, 2013 3 次提交
  19. 15 4月, 2013 1 次提交
  20. 26 3月, 2013 2 次提交
  21. 06 12月, 2012 5 次提交
  22. 27 11月, 2012 1 次提交
  23. 21 11月, 2012 1 次提交
  24. 02 10月, 2012 2 次提交
    • C
      NFS: Discover NFSv4 server trunking when mounting · 05f4c350
      Chuck Lever 提交于
      "Server trunking" is a fancy named for a multi-homed NFS server.
      Trunking might occur if a client sends NFS requests for a single
      workload to multiple network interfaces on the same server.  There
      are some implications for NFSv4 state management that make it useful
      for a client to know if a single NFSv4 server instance is
      multi-homed.  (Note this is only a consideration for NFSv4, not for
      legacy versions of NFS, which are stateless).
      
      If a client cares about server trunking, no NFSv4 operations can
      proceed until that client determines who it is talking to.  Thus
      server IP trunking discovery must be done when the client first
      encounters an unfamiliar server IP address.
      
      The nfs_get_client() function walks the nfs_client_list and matches
      on server IP address.  The outcome of that walk tells us immediately
      if we have an unfamiliar server IP address.  It invokes
      nfs_init_client() in this case.  Thus, nfs4_init_client() is a good
      spot to perform trunking discovery.
      
      Discovery requires a client to establish a fresh client ID, so our
      client will now send SETCLIENTID or EXCHANGE_ID as the first NFS
      operation after a successful ping, rather than waiting for an
      application to perform an operation that requires NFSv4 state.
      
      The exact process for detecting trunking is different for NFSv4.0 and
      NFSv4.1, so a minorversion-specific init_client callout method is
      introduced.
      
      CLID_INUSE recovery is important for the trunking discovery process.
      CLID_INUSE is a sign the server recognizes the client's nfs_client_id4
      id string, but the client is using the wrong principal this time for
      the SETCLIENTID operation.  The SETCLIENTID must be retried with a
      series of different principals until one works, and then the rest of
      trunking discovery can proceed.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      05f4c350
    • C
      NFS: Introduce "migration" mount option · 89652617
      Chuck Lever 提交于
      Currently, the Linux client uses a unique nfs_client_id4.id string
      when identifying itself to distinct NFS servers.
      
      To support transparent state migration, the Linux client will have to
      use the same nfs_client_id4 string for all servers it communicates
      with (also known as the "uniform client string" approach).  Otherwise
      NFS servers can not recognize that open and lock state need to be
      merged after a file system transition.
      
      Unfortunately, there are some NFSv4.0 servers currently in the field
      that do not tolerate the uniform client string approach.
      
      Thus, by default, our NFSv4.0 mounts will continue to use the current
      approach, and we introduce a mount option that switches them to use
      the uniform model.  Client administrators must identify which servers
      can be mounted with this option.  Eventually most NFSv4.0 servers will
      be able to handle the uniform approach, and we can change the default.
      
      The first mount of a server controls the behavior for all subsequent
      mounts for the lifetime of that set of mounts of that server.  After
      the last mount of that server is gone, the client erases the data
      structure that tracks the lease.  A subsequent lease may then honor
      a different "migration" setting.
      
      This patch adds only the infrastructure for parsing the new mount
      option.  Support for uniform client strings is added in a subsequent
      patch.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      89652617