1. 29 7月, 2009 2 次提交
  2. 15 7月, 2009 1 次提交
    • A
      nfsd41: use globals for DRC limits · 4bd9b0f4
      Andy Adamson 提交于
      The version 4.1 DRC memory limit and tracking variables are server wide and
      session specific. Replace struct svc_serv fields with globals.
      Stop using the svc_serv sv_lock.
      
      Add a spinlock to serialize access to the DRC limit management variables which
      change on session creation and deletion (usage counter) or (future)
      administrative action to adjust the total DRC memory limit.
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      4bd9b0f4
  3. 19 6月, 2009 2 次提交
    • N
      nfsd: optimise the starting of zero threads when none are running. · 671e1fcf
      NeilBrown 提交于
      Currently, if we ask to set then number of nfsd threads to zero when
      there are none running, we set up all the sockets and register the
      service, and then tear it all down again.
      This is pointless.
      
      So detect that case and exit promptly.
      (also remove an assignment to 'error' which was never used.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Acked-by: NJeff Layton <jlayton@redhat.com>
      671e1fcf
    • N
      nfsd: don't take nfsd_mutex twice when setting number of threads. · 82e12fe9
      NeilBrown 提交于
      Currently when we write a number to 'threads' in nfsdfs,
      we take the nfsd_mutex, update the number of threads, then take the
      mutex again to read the number of threads.
      
      Mostly this isn't a big deal.  However if we are write '0', and
      portmap happens to be dead, then we can get unpredictable behaviour.
      If the nfsd threads all got killed quickly and the last thread is
      waiting for portmap to respond, then the second time we take the mutex
      we will block waiting for the last thread.
      However if the nfsd threads didn't die quite that fast, then there
      will be no contention when we try to take the mutex again.
      
      Unpredictability isn't fun, and waiting for the last thread to exit is
      pointless, so avoid taking the lock twice.
      To achieve this, get nfsd_svc return a non-negative number of active
      threads when not returning a negative error.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      82e12fe9
  4. 07 4月, 2009 1 次提交
  5. 04 4月, 2009 3 次提交
    • B
      nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions · 8daf220a
      Benny Halevy 提交于
      Support enabling and disabling nfsv4.1 via /proc/fs/nfsd/versions
      by writing the strings "+4.1" or "-4.1" correspondingly.
      
      Use user mode nfs-utils (rpc.nfsd option) to enable.
      This will allow us to get rid of CONFIG_NFSD_V4_1
      
      [nfsd41: disable support for minorversion by default]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      8daf220a
    • A
      nfsd41: hard page limit for DRC · c3d06f9c
      Andy Adamson 提交于
      Use no more than 1/128th of the number of free pages at nfsd startup for the
      v4.1 DRC.
      
      This is an arbitrary default which should probably end up under the control
      of an administrator.
      Signed-off-by: NAndy Adamson <andros@netapp.com>
      [moved added fields in struct svc_serv under CONFIG_NFSD_V4_1]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      [fix set_max_drc calculation of sv_drc_max_pages]
      [moved NFSD_DRC_SIZE_SHIFT's declaration up in header file]
      Signed-off-by: NBenny Halevy <bhalevy@panasas.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      c3d06f9c
    • 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
  6. 01 4月, 2009 1 次提交
    • A
      Take fs_struct handling to new file (fs/fs_struct.c) · 3e93cd67
      Al Viro 提交于
      Pure code move; two new helper functions for nfsd and daemonize
      (unshare_fs_struct() and daemonize_fs_struct() resp.; for now -
      the same code as used to be in callers).  unshare_fs_struct()
      exported (for nfsd, as copy_fs_struct()/exit_fs() used to be),
      copy_fs_struct() and exit_fs() don't need exports anymore.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      3e93cd67
  7. 29 3月, 2009 2 次提交
  8. 19 3月, 2009 2 次提交
    • G
      knfsd: add file to export stats about nfsd pools · 03cf6c9f
      Greg Banks 提交于
      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: NGreg Banks <gnb@sgi.com>
      Signed-off-by: NHarshula Jayasuriya <harshula@sgi.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      03cf6c9f
    • G
      knfsd: remove the nfsd thread busy histogram · 8bbfa9f3
      Greg Banks 提交于
      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: NGreg Banks <gnb@sgi.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      8bbfa9f3
  9. 23 10月, 2008 1 次提交
    • C
      NFSD: Fix BUG during NFSD shutdown processing · 1cd9cd16
      Chuck Lever 提交于
      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: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      1cd9cd16
  10. 05 10月, 2008 1 次提交
  11. 30 9月, 2008 1 次提交
  12. 01 7月, 2008 1 次提交
    • J
      nfsd: treat all shutdown signals as equivalent · 100766f8
      Jeff Layton 提交于
      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: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      100766f8
  13. 24 6月, 2008 6 次提交
  14. 24 4月, 2008 1 次提交
  15. 02 2月, 2008 2 次提交
  16. 10 10月, 2007 3 次提交
  17. 18 7月, 2007 2 次提交
  18. 22 5月, 2007 1 次提交
    • A
      Detach sched.h from mm.h · e8edc6e0
      Alexey Dobriyan 提交于
      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: NAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e8edc6e0
  19. 13 2月, 2007 1 次提交
  20. 27 1月, 2007 1 次提交
  21. 21 10月, 2006 2 次提交
  22. 06 10月, 2006 1 次提交
    • N
      [PATCH] knfsd: tidy up up meaning of 'buffer size' in nfsd/sunrpc · c6b0a9f8
      NeilBrown 提交于
      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: NNeil Brown <neilb@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      c6b0a9f8
  23. 04 10月, 2006 2 次提交