1. 21 10月, 2010 4 次提交
    • J
      nfsd4: callback program number is per-session · 8b5ce5cd
      J. Bruce Fields 提交于
      The callback program is allowed to depend on the session which the
      callback is going over.
      
      No change in behavior yet, while we still only do callbacks over a
      single session for the lifetime of the client.
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      8b5ce5cd
    • J
      nfsd4: make backchannel sequence number per-session · ac7c46f2
      J. Bruce Fields 提交于
      Currently we don't deal well with a client that has multiple sessions
      associated with it (even simultaneously, or serially over the lifetime
      of the client).
      
      In particular, we don't attempt to keep the backchannel running after
      the original session diseappears.
      
      We will fix that soon.
      
      Once we do that, we need the slot sequence number to be per-session;
      otherwise, for example, we cannot correctly handle a case like this:
      
      	- All session 1 connections are lost.
      	- The client creates session 2.  We use it for the backchannel
      	  (since it's the only working choice).
      	- The client gives us a new connection to use with session 1.
      	- The client destroys session 2.
      
      At this point our only choice is to go back to using session 1.  When we
      do so we must use the sequence number that is next for session 1.  We
      therefore need to maintain multiple sequence number streams.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      ac7c46f2
    • J
      nfsd4: use client pointer to backchannel session · 90c8145b
      J. Bruce Fields 提交于
      Instead of copying the sessionid, use the new cl_cb_session pointer,
      which indicates which session we're using for the backchannel.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      90c8145b
    • J
      nfsd4: move callback setup into session init code · edd76786
      J. Bruce Fields 提交于
      The backchannel should  be associated with a session, it isn't really
      global to the client.
      
      We do, however, want a pointer global to the client which tracks which
      session we're currently using for client-based callbacks.
      
      This is a first step in that direction; for now, just reshuffling of
      code with no significant change in behavior.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      edd76786
  2. 02 10月, 2010 8 次提交
  3. 27 8月, 2010 2 次提交
  4. 30 7月, 2010 1 次提交
    • J
      nfsd4: share file descriptors between stateid's · f9d7562f
      J. Bruce Fields 提交于
      The vfs doesn't really allow us to "upgrade" a file descriptor from
      read-only to read-write, and our attempt to do so in nfs4_upgrade_open
      is ugly and incomplete.
      
      Move to a different scheme where we keep multiple opens, shared between
      open stateid's, in the nfs4_file struct.  Each file will be opened at
      most 3 times (for read, write, and read-write), and those opens will be
      shared between all clients and openers.  On upgrade we will do another
      open if necessary instead of attempting to upgrade an existing open.
      We keep count of the number of readers and writers so we know when to
      close the shared files.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      f9d7562f
  5. 13 5月, 2010 3 次提交
  6. 22 4月, 2010 4 次提交
    • J
      nfsd4: allow 4.0 clients to change callback path · 4b21d0de
      J. Bruce Fields 提交于
      The rfc allows a client to change the callback parameters, but we didn't
      previously implement it.
      
      Teach the callbacks to rerun themselves (by placing themselves on a
      workqueue) when they recognize that their rpc task has been killed and
      that the callback connection has changed.
      
      Then we can change the callback connection by setting up a new rpc
      client, modifying the nfs4 client to point at it, waiting for any work
      in progress to complete, and then shutting down the old client.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      4b21d0de
    • J
      nfsd4: rearrange cb data structures · 2bf23875
      J. Bruce Fields 提交于
      Mainly I just want to separate the arguments used for setting up the tcp
      client from the rest.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      2bf23875
    • J
      nfsd4: cl_count is unused · b12a05cb
      J. Bruce Fields 提交于
      Now that the shutdown sequence guarantees callbacks are shut down before
      the client is destroyed, we no longer have a use for cl_count.
      
      We'll probably reinstate a reference count on the client some day, but
      it will be held by users other than callbacks.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      b12a05cb
    • J
      nfsd4: don't sleep in lease-break callback · b5a1a81e
      J. Bruce Fields 提交于
      The NFSv4 server's fl_break callback can sleep (dropping the BKL), in
      order to allocate a new rpc task to send a recall to the client.
      
      As far as I can tell this doesn't cause any races in the current code,
      but the analysis is difficult.  Also, the sleep here may complicate the
      move away from the BKL.
      
      So, just schedule some work to do the job for us instead.  The work will
      later also prove useful for restarting a call after the callback
      information is changed.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      b5a1a81e
  7. 03 4月, 2010 1 次提交
  8. 16 12月, 2009 2 次提交
  9. 15 12月, 2009 2 次提交
    • B
      nfsd: Move private headers to source directory · 9a74af21
      Boaz Harrosh 提交于
      Lots of include/linux/nfsd/* headers are only used by
      nfsd module. Move them to the source directory
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      9a74af21
    • B
      nfsd: Headers Independence and include cleanups · 72579ac9
      Boaz Harrosh 提交于
      * Add includes that are directly used by headers
      * Remove includes that are not needed
      
      These are the changes made:
      
      [xdr.h]
      struct nfsd_readdirres has an embedded struct readdir_cd from nfsd.h
      fixing that we can drop other includes
      
      [xdr4.h]
      embedded types defined both at state.h and nfsd.h
      
      [syscall.h]
      After export.h fix none of these stuff is needed.
      fix extra space in # include <> statement
      
      [stats.h]
      does not need <linux/nfs4.h> but was export to user-mode
      so I don't touch it
      
      [state.h]
      embedded types from nfsfh.h like struct knfsd_fh. bringing that
      eliminates the need for all other includes
      
      [nfsfh.h]
      directly manipulating types from sunrpc/svc.h.
      Removed Other unused headers.
      
      [nfsd.h]
      removed unused headers include
      
      [export.h]
      lots of sunrpc/svc.h types and a single prototype declaration
      with pointer from nfsfh.h, but all users of export.h do need
      nfsfh.h any way. remove now un-needed include.
      
      [const.h]
      Unfixed (not independent)
      
      [cache.h]
      could do with a forward declaration of "struct svc_rqst;"
      from sunrpc/svc.h but all users absolutely will need
      sunrpc/svc.h it is easier overall this way.
      Signed-off-by: NBoaz Harrosh <bharrosh@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      72579ac9
  10. 06 11月, 2009 1 次提交
  11. 16 9月, 2009 5 次提交
  12. 02 9月, 2009 2 次提交
    • A
      nfsd41: replace page based DRC with buffer based DRC · 557ce264
      Andy Adamson 提交于
      Use NFSD_SLOT_CACHE_SIZE size buffers for sessions DRC instead of holding nfsd
      pages in cache.
      
      Connectathon testing has shown that 1024 bytes for encoded compound operation
      responses past the sequence operation is sufficient, 512 bytes is a little too
      small. Set NFSD_SLOT_CACHE_SIZE to 1024.
      
      Allocate memory for the session DRC in the CREATE_SESSION operation
      to guarantee that the memory resource is available for caching responses.
      Allocate each slot individually in preparation for slot table size negotiation.
      
      Remove struct nfsd4_cache_entry and helper functions for the old page-based
      DRC.
      
      The iov_len calculation in nfs4svc_encode_compoundres is now always
      correct.  Replay is now done in nfsd4_sequence under the state lock, so
      the session ref count is only bumped on non-replay. Clean up the
      nfs4svc_encode_compoundres session logic.
      
      The nfsd4_compound_state statp pointer is also not used.
      Remove nfsd4_set_statp().
      
      Move useful nfsd4_cache_entry fields into nfsd4_slot.
      
      Signed-off-by: Andy Adamson <andros@netapp.com
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      557ce264
    • A
      nfsd41: bound forechannel drc size by memory usage · a649637c
      Andy Adamson 提交于
      By using the requested ca_maxresponsesize_cached * ca_maxresponses to bound
      a forechannel drc request size, clients can tailor a session to usage.
      
      For example, an I/O session (READ/WRITE only) can have a much smaller
      ca_maxresponsesize_cached (for only WRITE compound responses) and a lot larger
      ca_maxresponses to service a large in-flight data window.
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      a649637c
  13. 21 8月, 2009 2 次提交
  14. 29 7月, 2009 2 次提交
    • A
      nfsd41: Use separate DRC for setclientid · 49557cc7
      Andy Adamson 提交于
      Instead of trying to share the generic 4.1 reply cache code for the
      CREATE_SESSION reply cache, it's simpler to handle CREATE_SESSION
      separately.
      
      The nfs41 single slot clientid DRC holds the results of create session
      processing.  CREATE_SESSION can be preceeded by a SEQUENCE operation
      (an embedded CREATE_SESSION) and the create session single slot cache must be
      maintained.  nfsd4_replay_cache_entry() and nfsd4_store_cache_entry() do not
      implement the replay of an embedded CREATE_SESSION.
      
      The clientid DRC slot does not need the inuse, cachethis or other fields that
      the multiple slot session cache uses.  Replace the clientid DRC cache struct
      nfs4_slot cache with a new nfsd4_clid_slot cache.  Save the xdr struct
      nfsd4_create_session into the cache at the end of processing, and on a replay,
      replace the struct for the replay request with the cached version all while
      under the state lock.
      
      nfsd4_proc_compound will handle both the solo and embedded CREATE_SESSION case
      via the normal use of encode_operation.
      
      Errors that do not change the create session cache:
      A create session NFS4ERR_STALE_CLIENTID error means that a client record
      (and associated create session slot) could not be found and therefore can't
      be changed.  NFSERR_SEQ_MISORDERED errors do not change the slot cache.
      
      All other errors get cached.
      
      Remove the clientid DRC specific check in nfs4svc_encode_compoundres to
      put the session only if cstate.session is set which will now always be true.
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      49557cc7
    • A
      nfsd41: hange from page to memory based drc limits · 0c193054
      Andy Adamson 提交于
      NFSD_SLOT_CACHE_SIZE is the size of all encoded operation responses
      (excluding the sequence operation) that we want to cache.
      
      For now, keep NFSD_SLOT_CACHE_SIZE at PAGE_SIZE. It will be reduced
      when the DRC is changed from page based to memory based.
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      0c193054
  15. 19 6月, 2009 1 次提交