06 Jan, 2021

1 commit


11 Dec, 2020

1 commit

  • By switching to an XFS-backed export, I am able to reproduce the
    ibcomp worker crash on my client with xfstests generic/013.

    For the failing LISTXATTRS operation, xdr_inline_pages() is called
    with page_len=12 and buflen=128.

    - When ->send_request() is called, rpcrdma_marshal_req() does not
    set up a Reply chunk because buflen is smaller than the inline
    threshold. Thus rpcrdma_convert_iovs() does not get invoked at
    all and the transport's XDRBUF_SPARSE_PAGES logic is not invoked
    on the receive buffer.

    - During reply processing, rpcrdma_inline_fixup() tries to copy
    received data into rq_rcv_buf->pages because page_len is positive.
    But there are no receive pages because rpcrdma_marshal_req() never
    allocated them.

    The result is that the ibcomp worker faults and dies. Sometimes that
    causes a visible crash, and sometimes it results in a transport hang
    without other symptoms.

    RPC/RDMA's XDRBUF_SPARSE_PAGES support is not entirely correct, and
    should eventually be fixed or replaced. However, my preference is
    that upper-layer operations should explicitly allocate their receive
    buffers (using GFP_KERNEL) when possible, rather than relying on
    XDRBUF_SPARSE_PAGES.

    Reported-by: Olga kornievskaia
    Suggested-by: Olga kornievskaia
    Fixes: c10a75145feb ("NFSv4.2: add the extended attribute proc functions.")
    Signed-off-by: Chuck Lever
    Reviewed-by: Olga kornievskaia
    Reviewed-by: Frank van der Linden
    Tested-by: Olga kornievskaia
    Signed-off-by: Anna Schumaker

    Chuck Lever
     

12 Nov, 2020

1 commit

  • Certain NFSv4.2/RDMA tests fail with v5.9-rc1.

    rpcrdma_convert_kvec() runs off the end of the rl_segments array
    because rq_rcv_buf.tail[0].iov_len holds a very large positive
    value. The resultant kernel memory corruption is enough to crash
    the client system.

    Callers of rpc_prepare_reply_pages() must reserve an extra XDR_UNIT
    in the maximum decode size for a possible XDR pad of the contents
    of the xdr_buf's pages. That guarantees the allocated receive buffer
    will be large enough to accommodate the usual contents plus that XDR
    pad word.

    encode_op_hdr() cannot add that extra word. If it does,
    xdr_inline_pages() underruns the length of the tail iovec.

    Fixes: 3e1f02123fba ("NFSv4.2: add client side XDR handling for extended attributes")
    Signed-off-by: Chuck Lever
    Signed-off-by: Anna Schumaker

    Chuck Lever
     

08 Oct, 2020

3 commits


14 Jul, 2020

2 commits

  • Define the argument and response structures that will be used for
    RFC 8276 extended attribute RPC calls, and implement the necessary
    functions to encode/decode the extended attribute operations.

    Signed-off-by: Frank van der Linden
    Signed-off-by: Trond Myklebust

    Frank van der Linden
     
  • Set limits for extended attributes (attribute value size and listxattr
    buffer size), based on the fs-independent limits (XATTR_*_MAX).

    Define the maximum XDR sizes for the RFC 8276 XATTR operations.
    In the case of operations that carry a larger payload (SETXATTR,
    GETXATTR, LISTXATTR), these exclude that payload, which is added
    as separate pages, like other operations do.

    Define, much like for read and write operations, the maximum overhead
    sizes for get/set/listxattr, and use them to limit the maximum payload
    size for those operations, in combination with the channel attributes.

    Signed-off-by: Frank van der Linden
    Signed-off-by: Trond Myklebust

    Frank van der Linden
     

10 Oct, 2019

2 commits

  • Support only one source server address: the same address that
    the client and source server use.

    Signed-off-by: Andy Adamson
    Signed-off-by: Olga Kornievskaia

    Olga Kornievskaia
     
  • Try using the delegation stateid, then the open stateid.

    Only NL4_NETATTR, No support for NL4_NAME and NL4_URL.
    Allow only one source server address to be returned for now.

    To distinguish between same server copy offload ("intra") and
    a copy between different server ("inter"), do a check of server
    owner identity and also make sure server is capable of doing
    a copy offload.

    Signed-off-by: Andy Adamson
    Signed-off-by: Olga Kornievskaia

    Olga Kornievskaia
     

02 Mar, 2019

2 commits


14 Feb, 2019

1 commit


10 Aug, 2018

3 commits

  • Change xdr to always send COPY asynchronously.

    Keep the list copies send in a list under a server structure.
    Once copy is sent, it waits on a completion structure that will
    be signalled by the callback thread that receives CB_OFFLOAD.

    If CB_OFFLOAD returned an error and even if it returned partial
    bytes, ignore them (as we can't commit without a verifier to
    match) and return an error.

    Signed-off-by: Olga Kornievskaia
    Signed-off-by: Anna Schumaker

    Olga Kornievskaia
     
  • If server returns async reply, it must include a callback stateid,
    wr_callback_id in the write_response4.

    Signed-off-by: Olga Kornievskaia
    Signed-off-by: Anna Schumaker

    Olga Kornievskaia
     
  • Signed-off-by: Olga Kornievskaia
    Signed-off-by: Anna Schumaker

    Olga Kornievskaia
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

15 May, 2017

2 commits


09 May, 2017

1 commit

  • Instead of messing with the commit path which has been causing issues,
    add a COMMIT op after the COPY and ask for stable copies in the first
    space.

    It saves a round trip, since after the COPY, the client sends a COMMIT
    anyway.

    Signed-off-by: Olga Kornievskaia
    Signed-off-by: Trond Myklebust

    Olga Kornievskaia
     

04 Dec, 2016

1 commit


25 Jul, 2016

1 commit


18 May, 2016

1 commit

  • This adds the copy_range file_ops function pointer used by the
    sys_copy_range() function call. This patch only implements sync copies,
    so if an async copy happens we decode the stateid and ignore it.

    Signed-off-by: Anna Schumaker

    Anna Schumaker
     

16 Oct, 2015

1 commit


26 Aug, 2015

1 commit


27 Jun, 2015

1 commit


24 Jun, 2015

1 commit


24 Apr, 2015

1 commit

  • This patch adds a GETATTR to the end of ALLOCATE and DEALLOCATE
    operations so we can set the updated inode size and change attribute
    directly. DEALLOCATE will still need to release pagecache pages, so
    nfs42_proc_deallocate() now calls truncate_pagecache_range() before
    contacting the server.

    Signed-off-by: Anna Schumaker
    Signed-off-by: Trond Myklebust

    Anna Schumaker
     

26 Nov, 2014

2 commits


01 Oct, 2014

1 commit

  • The SEEK operation is used when an application makes an lseek call with
    either the SEEK_HOLE or SEEK_DATA flags set. I fall back on
    nfs_file_llseek() if the server does not have SEEK support.

    Signed-off-by: Anna Schumaker
    Signed-off-by: Trond Myklebust

    Anna Schumaker