22 Oct, 2015

1 commit


29 Jun, 2013

1 commit


05 Nov, 2012

1 commit


01 Nov, 2012

1 commit

  • In very busy v3 environment, rpc.mountd can respond to the NULL
    procedure but not the MNT procedure in a timely manner causing
    the MNT procedure to time out. The problem is the mount system
    call returns EIO which causes the mount to fail, instead of
    ETIMEDOUT, which would cause the mount to be retried.

    This patch sets the RPC_TASK_SOFT|RPC_TASK_TIMEOUT flags to
    the rpc_call_sync() call in nfs_mount() which causes
    ETIMEDOUT to be returned on timed out connections.

    Signed-off-by: Steve Dickson
    Signed-off-by: Trond Myklebust
    Cc: stable@vger.kernel.org

    Scott Mayhew
     

21 Mar, 2012

1 commit

  • This allows us to turn on/off the dprintk() debugging interfaces for
    those distributions that don't ship the 'rpcdebug' utility.
    It also allows us to add Kbuild dependencies. Specifically, we already
    know that dprintk() in general relies on CONFIG_SYSCTL. Now it turns out
    that the NFS dprintks depend on CONFIG_CRC32 after we added support
    for the filehandle hash.

    Reported-by: Paul Gortmaker
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

01 Feb, 2012

2 commits


22 Dec, 2010

1 commit


17 Dec, 2010

4 commits

  • Now that all client-side XDR decoder routines use xdr_streams, there
    should be no need to support the legacy calling sequence [rpc_rqst *,
    __be32 *, RPC res *] anywhere. We can construct an xdr_stream in the
    generic RPC code, instead of in each decoder function.

    This is a refactoring change. It should not cause different behavior.

    Signed-off-by: Chuck Lever
    Tested-by: J. Bruce Fields
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Now that all client-side XDR encoder routines use xdr_streams, there
    should be no need to support the legacy calling sequence [rpc_rqst *,
    __be32 *, RPC arg *] anywhere. We can construct an xdr_stream in the
    generic RPC code, instead of in each encoder function.

    Also, all the client-side encoder functions return 0 now, making a
    return value superfluous. Take this opportunity to convert them to
    return void instead.

    This is a refactoring change. It should not cause different behavior.

    Signed-off-by: Chuck Lever
    Tested-by: J. Bruce Fields
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean up.

    The UMNT request has a NULL response. There's no need to set up a
    mountres structure for it.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean up.

    The trend in the other XDR encoder functions is to BUG() when encoding
    problems occur, since a problem here is always due to a local coding
    error. Then, instead of a status, zero is unconditionally returned.

    Update the mount client XDR encoders to behave this way.

    To finish the update, use the new-style be32_to_cpup() and
    cpu_to_be32() macros, and compute the buffer sizes using raw integers
    instead of sizeof(). This matches the conventions used in other XDR
    functions.

    Signed-off-by: Chuck Lever
    Tested-by: J. Bruce Fields
    Signed-off-by: Trond Myklebust

    Chuck Lever
     

11 Dec, 2010

1 commit

  • After a few unsuccessful NFS mount attempts in which the client and
    server cannot agree on an authentication flavor both support, the
    client panics. nfs_umount() is invoked in the kernel in this case.

    Turns out nfs_umount()'s UMNT RPC invocation causes the RPC client to
    write off the end of the rpc_clnt's iostat array. This is because the
    mount client's nrprocs field is initialized with the count of defined
    procedures (two: MNT and UMNT), rather than the size of the client's
    proc array (four).

    The fix is to use the same initialization technique used by most other
    upper layer clients in the kernel.

    Introduced by commit 0b524123, which failed to update nrprocs when
    support was added for UMNT in the kernel.

    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=24302
    BugLink: http://bugs.launchpad.net/bugs/683938

    Reported-by: Stefan Bader
    Tested-by: Stefan Bader
    Cc: stable@kernel.org # >= 2.6.32
    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     

27 Oct, 2010

1 commit

  • * 'for-2.6.37' of git://linux-nfs.org/~bfields/linux: (99 commits)
    svcrpc: svc_tcp_sendto XPT_DEAD check is redundant
    svcrpc: no need for XPT_DEAD check in svc_xprt_enqueue
    svcrpc: assume svc_delete_xprt() called only once
    svcrpc: never clear XPT_BUSY on dead xprt
    nfsd4: fix connection allocation in sequence()
    nfsd4: only require krb5 principal for NFSv4.0 callbacks
    nfsd4: move minorversion to client
    nfsd4: delay session removal till free_client
    nfsd4: separate callback change and callback probe
    nfsd4: callback program number is per-session
    nfsd4: track backchannel connections
    nfsd4: confirm only on succesful create_session
    nfsd4: make backchannel sequence number per-session
    nfsd4: use client pointer to backchannel session
    nfsd4: move callback setup into session init code
    nfsd4: don't cache seq_misordered replies
    SUNRPC: Properly initialize sock_xprt.srcaddr in all cases
    SUNRPC: Use conventional switch statement when reclassifying sockets
    sunrpc/xprtrdma: clean up workqueue usage
    sunrpc: Turn list_for_each-s into the ..._entry-s
    ...

    Fix up trivial conflicts (two different deprecation notices added in
    separate branches) in Documentation/feature-removal-schedule.txt

    Linus Torvalds
     

02 Oct, 2010

1 commit


17 Sep, 2010

1 commit


10 Feb, 2010

1 commit

  • It was recently pointed out that the NFSERR_SERVERFAULT error, which is
    designed to inform the user of a serious internal error on the server, was
    being mapped to an error value that is internal to the kernel.

    This patch maps it to the error EREMOTEIO, which is exported to userland
    through errno.h.

    Signed-off-by: Trond Myklebust
    Cc: stable@kernel.org

    Trond Myklebust
     

11 Aug, 2009

1 commit


10 Aug, 2009

2 commits

  • After certain failure modes of an NFS mount, an NFS client should send
    a MOUNTPROC_UMNT request to remove the just-added mount entry from the
    server's mount table. While no-one should rely on the accuracy of the
    server's mount table, sending a UMNT is simply being a good internet
    neighbor.

    Since NFS mount processing is handled in the kernel now, we will need
    a function in the kernel's mountd client that can post a MOUNTRPC_UMNT
    request, in order to handle these failure modes.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Ensure that index i remains within array mnt_errtbl[] and mnt3_errtbl[].

    Signed-off-by: Roel Kluin
    Signed-off-by: Trond Myklebust

    Roel Kluin
     

18 Jun, 2009

8 commits

  • Clean up: Remove xdr_decode_fhstatus() and xdr_decode_fhstatus3(), now
    that they are unused.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Solder xdr_stream-based XDR decoding functions into the in-kernel mountd
    client that are more careful about checking data types and watching for
    buffer overflows. The new MNT3 decoder includes support for auth-flavor
    list decoding.

    The "_sz" macro for MNT3 replies was missing the size of the file handle.
    I've added this back, and included the size of the auth flavor array.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Introduce an xdr_stream-based XDR decoder that can unpack the auth-
    flavor list returned in a MNT3 reply.

    The nfs_mount() function's caller allocates an array, and passes the
    size and a pointer to it. The decoder decodes all the flavors it can
    into the array, and returns the number of decoded flavors.

    If the caller is not interested in the auth flavors, it can pass a
    value of zero as the size of the pre-allocated array.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Introduce xdr_stream-based XDR file handle decoders to the in-kernel
    mountd client. These are more careful than the existing decoder
    functions about buffer overflows and data type and range checking.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Introduce data structures and xdr_stream-based decoding functions for
    unmarshalling mountd status codes properly.

    Mountd version 3 uses specific standard error return codes that are
    not errno values and not NFS3ERR_ values. These have a well-defined
    standard mapping to local errno values. Introduce data structures
    and a decoder function that map these status codes to local errno
    values properly. This is new functionality (but not used yet).

    Version 1 mountd status values are defined by RFC 1094 as UNIX error
    values (errno values). Errno values on heterogeneous systems do not
    necessarily match each other. To avoid exposing possibly incorrect
    errno values to upper layers, the current XDR decoder converts all
    non-zero MNT version 1 status codes to -EACCES.

    The OpenGroup XNFS standard provides a mapping similar to but smaller
    than the version 3 error codes. Implement a decoder that uses the XNFS
    error codes, replacing the current decoder.

    For both mountd protocol versions, map unrecognized errors to -EACCES.

    Finally we introduce a replacement data structure for mnt_fhstatus
    at this time, which is used by the new XDR decoders. In addition to
    documenting that the status value returned by the XDR decoders is
    always an errno, this new structure will be expanded in subsequent
    patches.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean up: remove xdr_encode_dirpath() now that it has been replaced.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Check the length of the supplied dirpath, and see that it fits
    properly in the RPC buffer.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean up: Relocate MNT program procedure number definitions to the
    only file that uses them. Relocate the version number definitions,
    which are shared, to nfs.h. Remove duplicate program number
    definitions.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     

24 Dec, 2008

2 commits


08 Oct, 2008

1 commit

  • This patch fixes a regression that was introduced by the string based mounts.

    nfs_mount() statically returns -EACCES for every error returned
    by the remote mounted. This is incorrect because -EACCES is
    an non-fatal error to the mount.nfs command. This error causes
    mount.nfs to retry the mount even in the case when the exported
    directory does not exist.

    This patch maps the errors returned by the remote mountd into
    valid errno values, exactly how it was done pre-string based
    mounts. By returning the correct errno enables mount.nfs
    to do the right thing.

    Signed-off-by: Steve Dickson
    [Trond.Myklebust@netapp.com: nfs_stat_to_errno() now correctly returns
    negative errors, so remove the sign change.]
    Signed-off-by: Trond Myklebust

    Steve Dickson
     

24 Jun, 2008

1 commit


07 Dec, 2007

1 commit


11 Jul, 2007

5 commits


01 May, 2007

1 commit

  • The RPC buffer size estimation logic in net/sunrpc/clnt.c always
    significantly overestimates the requirements for the buffer size.
    A little instrumentation demonstrated that in fact rpc_malloc was never
    allocating the buffer from the mempool, but almost always called kmalloc.

    To compute the size of the RPC buffer more precisely, split p_bufsiz into
    two fields; one for the argument size, and one for the result size.

    Then, compute the sum of the exact call and reply header sizes, and split
    the RPC buffer precisely between the two. That should keep almost all RPC
    buffers within the 2KiB buffer mempool limit.

    And, we can finally be rid of RPC_SLACK_SPACE!

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     

21 Oct, 2006

1 commit