1. 23 9月, 2010 3 次提交
  2. 07 8月, 2010 1 次提交
    • J
      nfsd: don't allow setting maxblksize after svc created · 7fa53cc8
      J. Bruce Fields 提交于
      It's harmless to set this after the server is created, but also
      ineffective, since the value is only used at the time of
      svc_create_pooled().  So fail the attempt, in keeping with the pattern
      set by write_versions, write_{lease,grace}time and write_recoverydir.
      
      (This could break userspace that tried to write to nfsd/max_block_size
      between setting up sockets and starting the server.  However, such code
      wouldn't have worked anyway, and I don't know of any examples--rpc.nfsd
      in nfs-utils, probably the only user of the interface, doesn't do that.)
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      7fa53cc8
  3. 30 7月, 2010 1 次提交
  4. 23 7月, 2010 3 次提交
    • J
      nfsd: just keep single lockd reference for nfsd · ac77efbe
      Jeff Layton 提交于
      Right now, nfsd keeps a lockd reference for each socket that it has
      open. This is unnecessary and complicates the error handling on
      startup and shutdown. Change it to just do a lockd_up when starting
      the first nfsd thread just do a single lockd_down when taking down the
      last nfsd thread. Because of the strange way the sv_count is handled
      this requires an extra flag to tell whether the nfsd_serv holds a
      reference for lockd or not.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      ac77efbe
    • J
      nfsd: fix error handling in __write_ports_addxprt · 0cd14a06
      Jeff Layton 提交于
      __write_ports_addxprt calls nfsd_create_serv. That increases the
      refcount of nfsd_serv (which is tracked in sv_nrthreads). The service
      only decrements the thread count on error, not on success like
      __write_ports_addfd does, so using this interface leaves the nfsd
      thread count high.
      
      Fix this by having this function call svc_destroy() on error to release
      the reference (and possibly to tear down the service) and simply
      decrement the refcount without tearing down the service on success.
      
      This makes the sv_threads handling work basically the same in both
      __write_ports_addxprt and __write_ports_addfd.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      0cd14a06
    • J
      nfsd: fix error handling when starting nfsd with rpcbind down · 78a8d7c8
      Jeff Layton 提交于
      The refcounting for nfsd is a little goofy. What happens is that we
      create the nfsd RPC service, attach sockets to it but don't actually
      start the threads until someone writes to the "threads" procfile. To do
      this, __write_ports_addfd will create the nfsd service and then will
      decrement the refcount when exiting but won't actually destroy the
      service.
      
      This is fine when there aren't errors, but when there are this can
      cause later attempts to start nfsd to fail. nfsd_serv will be set,
      and that causes __write_versions to return EBUSY.
      
      Fix this by calling svc_destroy on nfsd_serv when this function is
      going to return error.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
      78a8d7c8
  5. 25 5月, 2010 1 次提交
  6. 30 3月, 2010 1 次提交
    • T
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo 提交于
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Guess-its-ok-by: NChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  7. 07 3月, 2010 5 次提交
  8. 28 1月, 2010 1 次提交
    • C
      NFSD: Create PF_INET6 listener in write_ports · 37498292
      Chuck Lever 提交于
      Try to create a PF_INET6 listener for NFSD, if IPv6 is enabled in the
      kernel.
      
      Make sure nfsd_serv's reference count is decreased if
      __write_ports_addxprt() failed to create a listener.  See
      __write_ports_addfd().
      
      Our current plan is to rely on rpc.nfsd to create appropriate IPv6
      listeners when server-side NFS/IPv6 support is desired.  Legacy
      behavior, via the write_threads or write_svc kernel APIs, will remain
      the same -- only IPv4 listeners are created.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      [bfields@citi.umich.edu: Move error-handling code to end]
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      37498292
  9. 27 1月, 2010 1 次提交
    • C
      SUNRPC: NFS kernel APIs shouldn't return ENOENT for "transport not found" · 68717908
      Chuck Lever 提交于
      write_ports() converts svc_create_xprt()'s ENOENT error return to
      EPROTONOSUPPORT so that rpc.nfsd (in user space) can report an error
      message that makes sense.
      
      It turns out that several of the other kernel APIs rpc.nfsd use can
      also return ENOENT from svc_create_xprt(), by way of lockd_up().
      
      On the client side, an NFSv2 or NFSv3 mount request can also return
      the result of lockd_up().  This error may also be returned during an
      NFSv4 mount request, since the NFSv4 callback service uses
      svc_create_xprt() to create the callback listener.  An ENOENT error
      return results in a confusing error message from the mount command.
      
      Let's have svc_create_xprt() return EPROTONOSUPPORT instead of ENOENT.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      68717908
  10. 16 12月, 2009 1 次提交
  11. 15 12月, 2009 3 次提交
  12. 02 10月, 2009 1 次提交
  13. 26 8月, 2009 1 次提交
  14. 10 8月, 2009 1 次提交
  15. 29 7月, 2009 2 次提交
  16. 13 7月, 2009 1 次提交
  17. 19 6月, 2009 1 次提交
    • 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
  18. 29 4月, 2009 12 次提交