1. 18 6月, 2009 1 次提交
  2. 04 4月, 2009 11 次提交
    • A
      nfsd41: stateid handling · 6668958f
      Andy Adamson 提交于
      When sessions are used, stateful operation sequenceid and stateid handling
      are not used. When sessions are used,  on the first open set the seqid to 1,
      mark state confirmed and skip seqid processing.
      
      When sessionas are used the stateid generation number is ignored when it is zero
      whereas without sessions bad_stateid or stale stateid is returned.
      
      Add flags to propagate session use to all stateful ops and down to
      check_stateid_generation.
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      [nfsd4_has_session should return a boolean, not u32]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1]
      [nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op]
      [nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      6668958f
    • B
      nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op · dd453dfd
      Benny Halevy 提交于
      Currently we only use cstate->current_fh,
      will also be used by nfsd41 code.
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      dd453dfd
    • A
      nfsd41: non-page DRC for solo sequence responses · bf864a31
      Andy Adamson 提交于
      A session inactivity time compound (lease renewal) or a compound where the
      sequence operation has sa_cachethis set to FALSE do not require any pages
      to be held in the v4.1 DRC. This is because struct nfsd4_slot is already
      caching the session information.
      
      Add logic to the nfs41 server to not cache response pages for solo sequence
      responses.
      
      Return nfserr_replay_uncached_rep on the operation following the sequence
      operation when sa_cachethis is FALSE.
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: use cstate session in nfsd4_replay_cache_entry]
      [nfsd41: rename nfsd4_no_page_in_cache]
      [nfsd41 rename nfsd4_enc_no_page_replay]
      [nfsd41 nfsd4_is_solo_sequence]
      [nfsd41 change nfsd4_not_cached return]
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      [changed return type to bool]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41 drop parens in nfsd4_is_solo_sequence call]
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      [changed "== 0" to "!"]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      bf864a31
    • A
      nfsd41: Add a create session replay cache · 38eb76a5
      Andy Adamson 提交于
      Replace the nfs4_client cl_seqid field with a single struct nfs41_slot used
      for the create session replay cache.
      
      The CREATE_SESSION slot sets the sl_session pointer to NULL. Otherwise, the
      slot and it's replay cache are used just like the session slots.
      
      Fix unconfirmed create_session replay response by initializing the
      create_session slot sequence id to 0.
      
      A future patch will set the CREATE_SESSION cache when a SEQUENCE operation
      preceeds the CREATE_SESSION operation. This compound is currently only cached
      in the session slot table.
      
      Signed-off-by: Andy Adamson<andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: use bool inuse for slot state]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: revert portion of nfsd4_set_cache_entry]
      Signed-off-by: NAndy Adamson <andros@netpp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      38eb76a5
    • A
      nfsd41: create_session operation · ec6b5d7b
      Andy Adamson 提交于
      Implement the create_session operation confoming to
      http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-26
      
      Look up the client id (generated by the server on exchange_id,
      given by the client on create_session).
      If neither a confirmed or unconfirmed client is found
      then the client id is stale
      If a confirmed cilent is found (i.e. we already received
      create_session for it) then compare the sequence id
      to determine if it's a replay or possibly a mis-ordered rpc.
      If the seqid is in order, update the confirmed client seqid
      and procedd with updating the session parameters.
      
      If an unconfirmed client_id is found then verify the creds
      and seqid.  If both match move the client id to confirmed state
      and proceed with processing the create_session.
      
      Currently, we do not support persistent sessions, and RDMA.
      
      alloc_init_session generates a new sessionid and creates
      a session structure.
      
      NFSD_PAGES_PER_SLOT is used for the max response cached calculation, and for
      the counting of DRC pages using the hard limits set in struct srv_serv.
      
      A note on NFSD_PAGES_PER_SLOT:
      
      Other patches in this series allow for NFSD_PAGES_PER_SLOT + 1 pages to be
      cached in a DRC slot when the response size is less than NFSD_PAGES_PER_SLOT *
      PAGE_SIZE but xdr_buf pages are used. e.g. a READDIR operation will encode a
      small amount of data in the xdr_buf head, and then the READDIR in the xdr_buf
      pages.  So, the hard limit calculation use of pages by a session is
      underestimated by the number of cached operations using the xdr_buf pages.
      
      Yet another patch caches no pages for the solo sequence operation, or any
      compound where cache_this is False.  So the hard limit calculation use of
      pages by a session is overestimated by the number of these operations in the
      cache.
      
      TODO: improve resource pre-allocation and negotiate session
      parameters accordingly.  Respect and possibly adjust
      backchannel attributes.
      Signed-off-by: NMarc Eshel <eshel@almaden.ibm.com>
      Signed-off-by: NDean Hildebrand <dhildeb@us.ibm.com>
      [nfsd41: remove headerpadsz from channel attributes]
      Our client and server only support a headerpadsz of 0.
      [nfsd41: use DRC limits in fore channel init]
      [nfsd41: do not change CREATE_SESSION back channel attrs]
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [use sessionid_lock spin lock]
      [nfsd41: use bool inuse for slot state]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41 remove sl_session from alloc_init_session]
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [simplify nfsd4_encode_create_session error handling]
      [nfsd41: fix comment style in init_forechannel_attrs]
      [nfsd41: allocate struct nfsd4_session and slot table in one piece]
      [nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      ec6b5d7b
    • A
      nfsd41: DRC save, restore, and clear functions · 074fe897
      Andy Adamson 提交于
      Cache all the result pages, including the rpc header in rq_respages[0],
      for a request in the slot table cache entry.
      
      Cache the statp pointer from nfsd_dispatch which points into rq_respages[0]
      just past the rpc header. When setting a cache entry, calculate and save the
      length of the nfs data minus the rpc header for rq_respages[0].
      
      When replaying a cache entry, replace the cached rpc header with the
      replayed request rpc result header, unless there is not enough room in the
      cached results first page. In that case, use the cached rpc header.
      
      The sessions fore channel maxresponse size cached is set to NFSD_PAGES_PER_SLOT
      * PAGE_SIZE. For compounds we are cacheing with operations such as READDIR
      that use the xdr_buf->pages to hold data, we choose to cache the extra page of
      data rather than copying data from xdr_buf->pages into the xdr_buf->head page.
      
      [nfsd41: limit cache to maxresponsesize_cached]
      [nfsd41: mv nfsd4_set_statp under CONFIG_NFSD_V4_1]
      [nfsd41: rename nfsd4_move_pages]
      [nfsd41: rename page_no variable]
      [nfsd41: rename nfsd4_set_cache_entry]
      [nfsd41: fix nfsd41_copy_replay_data comment]
      [nfsd41: add to nfsd4_set_cache_entry]
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      074fe897
    • A
      nfsd41: match clientid establishment method · a1bcecd2
      Andy Adamson 提交于
      We need to distinguish between client names provided by NFSv4.0 clients
      SETCLIENTID and those provided by NFSv4.1 via EXCHANGE_ID when looking
      up the clientid by string.
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      [nfsd41: use boolean values for use_exchange_id argument]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: simplify match_clientid_establishment logic]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      a1bcecd2
    • A
      nfsd41: exchange_id operation · 0733d213
      Andy Adamson 提交于
      Implement the exchange_id operation confoming to
      http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-28
      
      Based on the client provided name, hash a client id.
      If a confirmed one is found, compare the op's creds and
      verifier.  If the creds match and the verifier is different
      then expire the old client (client re-incarnated), otherwise,
      if both match, assume it's a replay and ignore it.
      
      If an unconfirmed client is found, then copy the new creds
      and verifer if need update, otherwise assume replay.
      
      The client is moved to a confirmed state on create_session.
      
      In the nfs41 branch set the exchange_id flags to
      EXCHGID4_FLAG_USE_NON_PNFS | EXCHGID4_FLAG_SUPP_MOVED_REFER
      (pNFS is not supported, Referrals are supported,
      Migration is not.).
      
      Address various scenarios from section 18.35 of the spec:
      
      1. Check for EXCHGID4_FLAG_UPD_CONFIRMED_REC_A and set
         EXCHGID4_FLAG_CONFIRMED_R as appropriate.
      
      2. Return error codes per 18.35.4 scenarios.
      
      3. Update client records or generate new client ids depending on
         scenario.
      
      Note: 18.35.4 case 3 probably still needs revisiting.  The handling
      seems not quite right.
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NAndy Adamosn <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: use utsname for major_id (and copy to server_scope)]
      [nfsd41: fix handling of various exchange id scenarios]
      Signed-off-by: NMike Sager <sager@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A]
      [simplify nfsd4_encode_exchange_id error handling]
      [nfsd41: embed an xdr_netobj in nfsd4_exchange_id]
      [nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      0733d213
    • M
      nfsd41: sessionid hashing · 5282fd72
      Marc Eshel 提交于
      Simple sessionid hashing using its monotonically increasing sequence number.
      
      Locking considerations:
      sessionid_hashtbl access is controlled by the sessionid_lock spin lock.
      It must be taken for insert, delete, and lookup.
      nfsd4_sequence looks up the session id and if the session is found,
      it calls nfsd4_get_session (still under the sessionid_lock).
      nfsd4_destroy_session calls nfsd4_put_session after unhashing
      it, so when the session's kref reaches zero it's going to get freed.
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [we don't use a prime for sessionid hash table size]
      [use sessionid_lock spin lock]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      5282fd72
    • M
      nfsd41: introduce nfs4_client cl_sessions list · 9fb87070
      Marc Eshel 提交于
      [get rid of CONFIG_NFSD_V4_1]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      9fb87070
    • A
      nfsd41: sessions basic data types · 7116ed6b
      Andy Adamson 提交于
      This patch provides basic data structures representing the nfs41
      sessions and slots, plus helpers for keeping a reference count
      on the session and freeing it.
      
      Note that our server only support a headerpadsz of 0 and
      it ignores backchannel attributes at the moment.
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: remove headerpadsz from channel attributes]
      [nfsd41: embed nfsd4_channel in nfsd4_session]
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41: use bool inuse for slot state]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [nfsd41 remove sl_session from nfsd4_slot]
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      7116ed6b
  3. 19 3月, 2009 5 次提交
  4. 24 12月, 2008 2 次提交
  5. 24 6月, 2008 2 次提交
  6. 18 7月, 2007 2 次提交
  7. 14 12月, 2006 1 次提交
  8. 21 10月, 2006 2 次提交
  9. 08 7月, 2005 2 次提交
  10. 24 6月, 2005 8 次提交
  11. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4