Skip to content
Snippets Groups Projects
  1. Apr 04, 2009
    • Andy Adamson's avatar
      nfsd41: DRC save, restore, and clear functions · 074fe897
      Andy Adamson authored
      
      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: default avatarAndy Adamson <andros@netapp.com>
      Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
      074fe897
  2. Mar 18, 2009
    • Greg Banks's avatar
      knfsd: add file to export stats about nfsd pools · 03cf6c9f
      Greg Banks authored
      Add /proc/fs/nfsd/pool_stats to export to userspace various
      statistics about the operation of rpc server thread pools.
      
      This patch is based on a forward-ported version of
      knfsd-add-pool-thread-stats which has been shipping in the SGI
      "Enhanced NFS" product since 2006 and which was previously
      posted:
      
      http://article.gmane.org/gmane.linux.nfs/10375
      
      
      
      It has also been updated thus:
      
       * moved EXPORT_SYMBOL() to near the function it exports
       * made the new struct struct seq_operations const
       * used SEQ_START_TOKEN instead of ((void *)1)
       * merged fix from SGI PV 990526 "sunrpc: use dprintk instead of
         printk in svc_pool_stats_*()" by Harshula Jayasuriya.
       * merged fix from SGI PV 964001 "Crash reading pool_stats before
         nfsds are started".
      
      Signed-off-by: default avatarGreg Banks <gnb@sgi.com>
      Signed-off-by: default avatarHarshula Jayasuriya <harshula@sgi.com>
      Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
      03cf6c9f
    • Greg Banks's avatar
      knfsd: remove the nfsd thread busy histogram · 8bbfa9f3
      Greg Banks authored
      Stop gathering the data that feeds the 'th' line in /proc/net/rpc/nfsd
      because the questionable data provided is not worth the scalability
      impact of calculating it.  Instead, always report zeroes.  The current
      approach suffers from three major issues:
      
      1. update_thread_usage() increments buckets by call service
         time or call arrival time...in jiffies.  On lightly loaded
         machines, call service times are usually < 1 jiffy; on
         heavily loaded machines call arrival times will be << 1 jiffy.
         So a large portion of the updates to the buckets are rounded
         down to zero, and the histogram is undercounting.
      
      2. As seen previously on the nfs mailing list, the format in which
         the histogram is presented is cryptic, difficult to explain,
         and difficult to use.
      
      3. Updating the histogram requires taking a global spinlock and
         dirtying the global variables nfsd_last_call, nfsd_busy, and
         nfsdstats *twice* on every RPC call, which is a significant
         scaling limitation.
      
      Testing on a 4 CPU 4 NIC Altix using 4 IRIX clients each doing
      1K streaming reads at full line rate, shows the stats update code
      (inlined into nfsd()) takes about 1.7% of each CPU.  This patch drops
      the contribution from nfsd() into the profile noise.
      
      This patch is a forward-ported version of knfsd-remove-nfsd-threadstats
      which has been shipping in the SGI "Enhanced NFS" product since 2006.
      In that time, exactly one customer has noticed that the threadstats
      were missing.  It has been previously posted:
      
      http://article.gmane.org/gmane.linux.nfs/10376
      
      
      
      and more recently requested to be posted again.
      
      Signed-off-by: default avatarGreg Banks <gnb@sgi.com>
      Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
      8bbfa9f3
  3. Oct 22, 2008
    • Chuck Lever's avatar
      NFSD: Fix BUG during NFSD shutdown processing · 1cd9cd16
      Chuck Lever authored
      
      The Linux NFS server can be started via a user-space write to
      /proc/fs/nfs/threads or to /proc/fs/nfs/portlist.  In the first case,
      all default listeners are started (both UDP and TCP).  In the second,
      a listener is started only for one specified transport.
      
      The NFS server has to make sure lockd stays up until the last listener
      transport goes away.  To support both start-up interfaces, it should
      do one lockd_up() for each NFSD listener.
      
      The nfsd_init_socks() function used to do one lockd_up() call for each
      svc_create_xprt().  Recently commit
      26a41409 mistakenly changed
      nfsd_init_socks() to do only one lockd_up() call even though it still
      does two svc_create_xprt() calls.
      
      The end result is a lockd_down() BUG during NFSD shutdown processing
      because nfsd_last_threads() does a lockd_down() call for each entry
      on the sv_permsocks list, but the start-up code doesn't do a matching
      number of lockd_up() calls.
      
      Add a second lockd_up() in nfsd_init_socks() to make sure the number
      of lockd_up() calls matches the number of entries on the NFS servers's
      sv_permsocks list.
      
      Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
      1cd9cd16
  4. Oct 04, 2008
  5. Sep 29, 2008
  6. Jun 30, 2008
    • Jeff Layton's avatar
      nfsd: treat all shutdown signals as equivalent · 100766f8
      Jeff Layton authored
      
      knfsd currently uses 2 signal masks when processing requests. A "loose"
      mask (SHUTDOWN_SIGS) that it uses when receiving network requests, and
      then a more "strict" mask (ALLOWED_SIGS, which is just SIGKILL) that it
      allows when doing the actual operation on the local storage.
      
      This is apparently unnecessarily complicated. The underlying filesystem
      should be able to sanely handle a signal in the middle of an operation.
      This patch removes the signal mask handling from knfsd altogether. When
      knfsd is started as a kthread, all signals are ignored. It then allows
      all of the signals in SHUTDOWN_SIGS. There's no need to set the mask
      as well.
      
      Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
      Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
      100766f8
  7. Jun 23, 2008
  8. Apr 23, 2008
  9. Feb 01, 2008
  10. Oct 09, 2007
  11. Jul 17, 2007
  12. May 21, 2007
    • Alexey Dobriyan's avatar
      Detach sched.h from mm.h · e8edc6e0
      Alexey Dobriyan authored
      
      First thing mm.h does is including sched.h solely for can_do_mlock() inline
      function which has "current" dereference inside. By dealing with can_do_mlock()
      mm.h can be detached from sched.h which is good. See below, why.
      
      This patch
      a) removes unconditional inclusion of sched.h from mm.h
      b) makes can_do_mlock() normal function in mm/mlock.c
      c) exports can_do_mlock() to not break compilation
      d) adds sched.h inclusions back to files that were getting it indirectly.
      e) adds less bloated headers to some files (asm/signal.h, jiffies.h) that were
         getting them indirectly
      
      Net result is:
      a) mm.h users would get less code to open, read, preprocess, parse, ... if
         they don't need sched.h
      b) sched.h stops being dependency for significant number of files:
         on x86_64 allmodconfig touching sched.h results in recompile of 4083 files,
         after patch it's only 3744 (-8.3%).
      
      Cross-compile tested on
      
      	all arm defconfigs, all mips defconfigs, all powerpc defconfigs,
      	alpha alpha-up
      	arm
      	i386 i386-up i386-defconfig i386-allnoconfig
      	ia64 ia64-up
      	m68k
      	mips
      	parisc parisc-up
      	powerpc powerpc-up
      	s390 s390-up
      	sparc sparc-up
      	sparc64 sparc64-up
      	um-x86_64
      	x86_64 x86_64-up x86_64-defconfig x86_64-allnoconfig
      
      as well as my two usual configs.
      
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e8edc6e0
  13. Feb 12, 2007
  14. Jan 26, 2007
  15. Oct 20, 2006
  16. Oct 06, 2006
    • NeilBrown's avatar
      [PATCH] knfsd: tidy up up meaning of 'buffer size' in nfsd/sunrpc · c6b0a9f8
      NeilBrown authored
      
      There is some confusion about the meaning of 'bufsz' for a sunrpc server.
      In some cases it is the largest message that can be sent or received.  In
      other cases it is the largest 'payload' that can be included in a NFS
      message.
      
      In either case, it is not possible for both the request and the reply to be
      this large.  One of the request or reply may only be one page long, which
      fits nicely with NFS.
      
      So we remove 'bufsz' and replace it with two numbers: 'max_payload' and
      'max_mesg'.  Max_payload is the size that the server requests.  It is used
      by the server to check the max size allowed on a particular connection:
      depending on the protocol a lower limit might be used.
      
      max_mesg is the largest single message that can be sent or received.  It is
      calculated as the max_payload, rounded up to a multiple of PAGE_SIZE, and
      with PAGE_SIZE added to overhead.  Only one of the request and reply may be
      this size.  The other must be at most one page.
      
      Cc: Greg Banks <gnb@sgi.com>
      Cc: "J. Bruce Fields" <bfields@fieldses.org>
      Signed-off-by: default avatarNeil Brown <neilb@suse.de>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      c6b0a9f8
  17. Oct 04, 2006
  18. Oct 02, 2006
  19. Jun 30, 2006
Loading