OSDN Git Service

uclinux-h8/linux.git
5 years agoNFS: change sign of nfs_fh length
Frank Sorenson [Tue, 23 Oct 2018 15:34:57 +0000 (10:34 -0500)]
NFS: change sign of nfs_fh length

The filehandle has a length which is defined as a 32-bit
"unsigned integer".  Change sign of the length appropriately.

Signed-off-by: Frank Sorenson <sorenson@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoMerge tag 'nfs-rdma-for-4.20-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
Trond Myklebust [Thu, 18 Oct 2018 21:29:00 +0000 (17:29 -0400)]
Merge tag 'nfs-rdma-for-4.20-1' of git://git.linux-nfs.org/projects/anna/linux-nfs

NFS RDMA client updates for Linux 4.20

Stable bugfixes:
- Reset credit grant properly after a disconnect

Other bugfixes and cleanups:
- xprt_release_rqst_cong is called outside of transport_lock
- Create more MRs at a time and toss out old ones during recovery
- Various improvements to the RDMA connection and disconnection code:
  - Improve naming of trace events, functions, and variables
  - Add documenting comments
  - Fix metrics and stats reporting
- Fix a tracepoint sparse warning

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agosunrpc: safely reallow resvport min/max inversion
J. Bruce Fields [Thu, 18 Oct 2018 19:27:02 +0000 (15:27 -0400)]
sunrpc: safely reallow resvport min/max inversion

Commits ffb6ca33b04b and e08ea3a96fc7 prevent setting xprt_min_resvport
greater than xprt_max_resvport, but may also break simple code that sets
one parameter then the other, if the new range does not overlap the old.

Also it looks racy to me, unless there's some serialization I'm not
seeing.  Granted it would probably require malicious privileged processes
(unless there's a chance these might eventually be settable in unprivileged
containers), but still it seems better not to let userspace panic the
kernel.

Simpler seems to be to allow setting the parameters to whatever you want
but interpret xprt_min_resvport > xprt_max_resvport as the empty range.

Fixes: ffb6ca33b04b "sunrpc: Prevent resvport min/max inversion..."
Fixes: e08ea3a96fc7 "sunrpc: Prevent rexvport min/max inversion..."
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agonfs: remove redundant call to nfs_context_set_write_error()
Benjamin Coddington [Thu, 18 Oct 2018 19:01:49 +0000 (15:01 -0400)]
nfs: remove redundant call to nfs_context_set_write_error()

We don't need to call this in the direct, read, or pnfs resend paths and
the only other caller is the write path in nfs_page_async_flush() which
already checks and sets the pg_error on the context.

Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agonfs: Fix a missed page unlock after pg_doio()
Benjamin Coddington [Thu, 18 Oct 2018 19:01:48 +0000 (15:01 -0400)]
nfs: Fix a missed page unlock after pg_doio()

We must check pg_error and call error_cleanup after any call to pg_doio.
Currently, we are skipping the unlock of a page if we encounter an error in
nfs_pageio_complete() before handing off the work to the RPC layer.

Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Fix a compile warning for cmpxchg64()
Trond Myklebust [Thu, 18 Oct 2018 21:03:56 +0000 (17:03 -0400)]
SUNRPC: Fix a compile warning for cmpxchg64()

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFSv4.x: fix lock recovery during delegation recall
Olga Kornievskaia [Thu, 4 Oct 2018 18:45:00 +0000 (14:45 -0400)]
NFSv4.x: fix lock recovery during delegation recall

Running "./nfstest_delegation --runtest recall26" uncovers that
client doesn't recover the lock when we have an appending open,
where the initial open got a write delegation.

Instead of checking for the passed in open context against
the file lock's open context. Check that the state is the same.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: use cmpxchg64() in gss_seq_send64_fetch_and_inc()
Arnd Bergmann [Tue, 2 Oct 2018 20:57:46 +0000 (22:57 +0200)]
SUNRPC: use cmpxchg64() in gss_seq_send64_fetch_and_inc()

The newly introduced gss_seq_send64_fetch_and_inc() fails to build on
32-bit architectures:

net/sunrpc/auth_gss/gss_krb5_seal.c:144:14: note: in expansion of macro 'cmpxchg'
   seq_send = cmpxchg(&ctx->seq_send64, old, old + 1);
              ^~~~~~~
arch/x86/include/asm/cmpxchg.h:128:3: error: call to '__cmpxchg_wrong_size' declared with attribute error: Bad argument size for cmpxchg
   __cmpxchg_wrong_size();     \

As the message tells us, cmpxchg() cannot be used on 64-bit arguments,
that's what cmpxchg64() does.

Fixes: 571ed1fd2390 ("SUNRPC: Replace krb5_seq_lock with a lockless scheme")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoxprtrdma: Squelch a sparse warning
Chuck Lever [Mon, 1 Oct 2018 18:26:51 +0000 (14:26 -0400)]
xprtrdma: Squelch a sparse warning

linux/include/trace/events/rpcrdma.h:501:1: warning: expression using sizeof bool
linux/include/trace/events/rpcrdma.h:501:1: warning: odd constant _Bool cast (ffffffffffffffff becomes 1)

Fixes: ab03eff58eb5 ("xprtrdma: Add trace points in RPC Call ... ")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Clean up xprt_rdma_disconnect_inject
Chuck Lever [Mon, 1 Oct 2018 18:26:45 +0000 (14:26 -0400)]
xprtrdma: Clean up xprt_rdma_disconnect_inject

Clean up: Use the appropriate C macro instead of open-coding
container_of() .

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Add documenting comments
Chuck Lever [Mon, 1 Oct 2018 18:26:40 +0000 (14:26 -0400)]
xprtrdma: Add documenting comments

Clean up: fill in or update documenting comments for transport
switch entry points.

For xprt_rdma_allocate:

The first paragraph is no longer true since commit 5a6d1db45569
("SUNRPC: Add a transport-specific private field in rpc_rqst").

The second paragraph is no longer true since commit 54cbd6b0c6b9
("xprtrdma: Delay DMA mapping Send and Receive buffers").

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Report when there were zero posted Receives
Chuck Lever [Mon, 1 Oct 2018 18:26:35 +0000 (14:26 -0400)]
xprtrdma: Report when there were zero posted Receives

To show that a caller did attempt to allocate and post more Receive
buffers, the trace point in rpcrdma_post_recvs() should report when
rpcrdma_post_recvs() was invoked but no new Receive buffers were
posted.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Move rb_flags initialization
Chuck Lever [Mon, 1 Oct 2018 18:26:29 +0000 (14:26 -0400)]
xprtrdma: Move rb_flags initialization

Clean up: rb_flags might be used for other things besides
RPCRDMA_BUF_F_EMPTY_SCQ, so initialize it in a generic spot
instead of in a send-completion-queue-related helper.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Don't disable BH's in backchannel server
Chuck Lever [Mon, 1 Oct 2018 18:26:24 +0000 (14:26 -0400)]
xprtrdma: Don't disable BH's in backchannel server

Clean up: This code was copied from xprtsock.c and
backchannel_rqst.c. For rpcrdma, the backchannel server runs
exclusively in process context, thus disabling bottom-halves is
unnecessary.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Remove memory address of "ep" from an error message
Chuck Lever [Mon, 1 Oct 2018 18:26:19 +0000 (14:26 -0400)]
xprtrdma: Remove memory address of "ep" from an error message

Clean up: Replace the hashed memory address of the target rpcrdma_ep
with the server's IP address and port. The server address is more
useful in an administrative error message.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Rename rpcrdma_qp_async_error_upcall
Chuck Lever [Mon, 1 Oct 2018 18:26:13 +0000 (14:26 -0400)]
xprtrdma: Rename rpcrdma_qp_async_error_upcall

Clean up: Use a function name that is consistent with the RDMA core
API and with other consumers. Because this is a function that is
invoked from outside the rpcrdma.ko module, add an appropriate
documenting comment.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Simplify RPC wake-ups on connect
Chuck Lever [Mon, 1 Oct 2018 18:26:08 +0000 (14:26 -0400)]
xprtrdma: Simplify RPC wake-ups on connect

Currently, when a connection is established, rpcrdma_conn_upcall
invokes rpcrdma_conn_func and then
wake_up_all(&ep->rep_connect_wait). The former wakes waiting RPCs,
but the connect worker is not done yet, and that leads to races,
double wakes, and difficulty understanding how this logic is
supposed to work.

Instead, collect all the "connection established" logic in the
connect worker (xprt_rdma_connect_worker). A disconnect worker is
retained to handle provider upcalls safely.

Fixes: 254f91e2fa1f ("xprtrdma: RPC/RDMA must invoke ... ")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Re-organize the switch() in rpcrdma_conn_upcall
Chuck Lever [Mon, 1 Oct 2018 18:26:03 +0000 (14:26 -0400)]
xprtrdma: Re-organize the switch() in rpcrdma_conn_upcall

Clean up: Eliminate the FALLTHROUGH into the default arm to make the
switch easier to understand.

Also, as long as I'm here, do not display the memory address of the
target rpcrdma_ep. A hashed memory address is of marginal use here.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Eliminate "connstate" variable from rpcrdma_conn_upcall()
Chuck Lever [Mon, 1 Oct 2018 18:25:57 +0000 (14:25 -0400)]
xprtrdma: Eliminate "connstate" variable from rpcrdma_conn_upcall()

Clean up.

Since commit 173b8f49b3af ("xprtrdma: Demote "connect" log messages")
there has been no need to initialize connstat to zero. In fact, in
this code path there's now no reason not to set rep_connected
directly.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Conventional variable names in rpcrdma_conn_upcall
Chuck Lever [Mon, 1 Oct 2018 18:25:52 +0000 (14:25 -0400)]
xprtrdma: Conventional variable names in rpcrdma_conn_upcall

Clean up: The convention throughout other parts of xprtrdma is to
name variables of type struct rpcrdma_xprt "r_xprt", not "xprt".
This convention enables the use of the name "xprt" for a "struct
rpc_xprt" type variable, as in other parts of the RPC client.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Rename rpcrdma_conn_upcall
Chuck Lever [Mon, 1 Oct 2018 18:25:47 +0000 (14:25 -0400)]
xprtrdma: Rename rpcrdma_conn_upcall

Clean up: Use a function name that is consistent with the RDMA core
API and with other consumers. Because this is a function that is
invoked from outside the rpcrdma.ko module, add an appropriate
documenting comment.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agosunrpc: Report connect_time in seconds
Chuck Lever [Mon, 1 Oct 2018 18:25:41 +0000 (14:25 -0400)]
sunrpc: Report connect_time in seconds

The way connection-oriented transports report connect_time is wrong:
it's supposed to be in seconds, not in jiffies.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agosunrpc: Fix connect metrics
Chuck Lever [Mon, 1 Oct 2018 18:25:36 +0000 (14:25 -0400)]
sunrpc: Fix connect metrics

For TCP, the logic in xprt_connect_status is currently never invoked
to record a successful connection. Commit 2a4919919a97 ("SUNRPC:
Return EAGAIN instead of ENOTCONN when waking up xprt->pending")
changed the way TCP xprt's are awoken after a connect succeeds.

Instead, change connection-oriented transports to bump connect_count
and compute connect_time the moment that XPRT_CONNECTED is set.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Name MR trace events consistently
Chuck Lever [Mon, 1 Oct 2018 18:25:30 +0000 (14:25 -0400)]
xprtrdma: Name MR trace events consistently

Clean up the names of trace events related to MRs so that it's
easy to enable these with a glob.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Explicitly resetting MRs is no longer necessary
Chuck Lever [Mon, 1 Oct 2018 18:25:25 +0000 (14:25 -0400)]
xprtrdma: Explicitly resetting MRs is no longer necessary

When a memory operation fails, the MR's driver state might not match
its hardware state. The only reliable recourse is to dereg the MR.
This is done in ->ro_recover_mr, which then attempts to allocate a
fresh MR to replace the released MR.

Since commit e2ac236c0b651 ("xprtrdma: Allocate MRs on demand"),
xprtrdma dynamically allocates MRs. It can add more MRs whenever
they are needed.

That makes it possible to simply release an MR when a memory
operation fails, instead of "recovering" it. It will automatically
be replaced by the on-demand MR allocator.

This commit is a little larger than I wanted, but it replaces
->ro_recover_mr, rb_recovery_lock, rb_recovery_worker, and the
rb_stale_mrs list with a generic work queue.

Since MRs are no longer orphaned, the mrs_orphaned metric is no
longer used.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Create more MRs at a time
Chuck Lever [Mon, 1 Oct 2018 18:25:20 +0000 (14:25 -0400)]
xprtrdma: Create more MRs at a time

Some devices require more than 3 MRs to build a single 1MB I/O.
Ensure that rpcrdma_mrs_create() will add enough MRs to build that
I/O.

In a subsequent patch I'm changing the MR recovery logic to just
toss out the MRs. In that case it's possible for ->send_request to
loop acquiring some MRs, not getting enough, getting called again,
recycling the previous MRs, then not getting enough, lather rinse
repeat. Thus first we need to ensure enough MRs are created to
prevent that loop.

I'm "reusing" ia->ri_max_segs. All of its accessors seem to want the
maximum number of data segments plus two, so I'm going to bake that
into the initial calculation.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: Reset credit grant properly after a disconnect
Chuck Lever [Mon, 1 Oct 2018 18:25:14 +0000 (14:25 -0400)]
xprtrdma: Reset credit grant properly after a disconnect

On a fresh connection, an RPC/RDMA client is supposed to send only
one RPC Call until it gets a credit grant in the first RPC Reply
from the server [RFC 8166, Section 3.3.3].

There is a bug in the Linux client's credit accounting mechanism
introduced by commit e7ce710a8802 ("xprtrdma: Avoid deadlock when
credit window is reset"). On connect, it simply dumps all pending
RPC Calls onto the new connection.

Servers have been tolerant of this bad behavior. Currently no server
implementation ever changes its credit grant over reconnects, and
servers always repost enough Receives before connections are fully
established.

To correct this issue, ensure that the client resets both the credit
grant _and_ the congestion window when handling a reconnect.

Fixes: e7ce710a8802 ("xprtrdma: Avoid deadlock when credit ... ")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Cc: stable@kernel.org
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoxprtrdma: xprt_release_rqst_cong is called outside of transport_lock
Chuck Lever [Mon, 1 Oct 2018 18:25:09 +0000 (14:25 -0400)]
xprtrdma: xprt_release_rqst_cong is called outside of transport_lock

Since commit ce7c252a8c74 ("SUNRPC: Add a separate spinlock to
protect the RPC request receive list") the RPC/RDMA reply handler
has been calling xprt_release_rqst_cong without holding
xprt->transport_lock.

I think the only way this call is ever made is if the credit grant
increases and there are RPCs pending. Current server implementations
do not change their credit grant during operation (except at
connect time).

Commit e7ce710a8802 ("xprtrdma: Avoid deadlock when credit window is
reset") added the ->release_rqst call because UDP invokes
xprt_adjust_cwnd(), which calls __xprt_put_cong() after adjusting
xprt->cwnd. Both xprt_release() and ->xprt_release_xprt already wake
another task in this case, so it is safe to remove this call from
the reply handler.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
5 years agoNFSv4: Fix lookup revalidate of regular files
Trond Myklebust [Fri, 28 Sep 2018 16:42:51 +0000 (12:42 -0400)]
NFSv4: Fix lookup revalidate of regular files

If we're revalidating an existing dentry in order to open a file, we need
to ensure that we check the directory has not changed before we optimise
away the lookup.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Refactor nfs_lookup_revalidate()
Trond Myklebust [Fri, 28 Sep 2018 13:04:05 +0000 (09:04 -0400)]
NFS: Refactor nfs_lookup_revalidate()

Refactor the code in nfs_lookup_revalidate() as a stepping stone towards
optimising and fixing nfs4_lookup_revalidate().

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Fix dentry revalidation on NFSv4 lookup
Trond Myklebust [Thu, 27 Sep 2018 21:12:33 +0000 (17:12 -0400)]
NFS: Fix dentry revalidation on NFSv4 lookup

We need to ensure that inode and dentry revalidation occurs correctly
on reopen of a file that is already open. Currently, we can end up
not revalidating either in the case of NFSv4.0, due to the 'cached open'
path.
Let's fix that by ensuring that we only do cached open for the special
cases of open recovery and delegation return.

Reported-by: Stan Hu <stanhu@gmail.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Replace krb5_seq_lock with a lockless scheme
Trond Myklebust [Sat, 29 Sep 2018 20:00:43 +0000 (16:00 -0400)]
SUNRPC: Replace krb5_seq_lock with a lockless scheme

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Lockless lookup of RPCSEC_GSS mechanisms
Trond Myklebust [Sat, 29 Sep 2018 19:14:47 +0000 (15:14 -0400)]
SUNRPC: Lockless lookup of RPCSEC_GSS mechanisms

Use RCU protected lookups for discovering the supported mechanisms.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Remove rpc_authflavor_lock in favour of RCU locking
Trond Myklebust [Thu, 27 Sep 2018 17:12:44 +0000 (13:12 -0400)]
SUNRPC: Remove rpc_authflavor_lock in favour of RCU locking

Module removal is RCU safe by design, so we really have no need to
lock the auth_flavors[] array. Substitute a lockless scheme to
add/remove entries in the array, and then use rcu.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Remove private spinlock in struct nfs_pgio_header
Trond Myklebust [Tue, 25 Sep 2018 16:34:43 +0000 (12:34 -0400)]
NFS: Remove private spinlock in struct nfs_pgio_header

Now that each struct nfs_pgio_header corresponds to one RPC call, we
only have one writer to the struct nfs_pgio_header.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFSv4: Save a few bytes in the nfs_pgio_args/res
Trond Myklebust [Mon, 24 Sep 2018 17:15:37 +0000 (13:15 -0400)]
NFSv4: Save a few bytes in the nfs_pgio_args/res

Save a few bytes by allowing the read/write specific fields of the
structures to share storage.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFSv3: Improve NFSv3 performance when server returns no post-op attributes
Trond Myklebust [Mon, 5 Mar 2018 17:03:00 +0000 (12:03 -0500)]
NFSv3: Improve NFSv3 performance when server returns no post-op attributes

When the server fails to return post-op attributes, the client's
attempt to place read data directly in the page cache fails, and
so we have to do an extra copy in order to realign the data with
page borders.
This patch attempts to detect servers that don't return post-op
attributes on read (e.g. for pNFS) and adjusts the placement
calculation accordingly.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFSv4: Split out NFS v4.2 copy completion functions
Anna Schumaker [Thu, 20 Sep 2018 20:12:13 +0000 (16:12 -0400)]
NFSv4: Split out NFS v4.2 copy completion functions

The convention in the rest of the code is to have a separate function
for anything that might be ifdef-ed out.

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Reduce indentation of nfs4_recovery_handle_error()
Anna Schumaker [Tue, 11 Sep 2018 20:23:48 +0000 (16:23 -0400)]
NFS: Reduce indentation of nfs4_recovery_handle_error()

This is to match kernel coding style for switch statements.

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Reduce indentation of the switch statement in nfs4_reclaim_open_state()
Anna Schumaker [Tue, 11 Sep 2018 20:23:47 +0000 (16:23 -0400)]
NFS: Reduce indentation of the switch statement in nfs4_reclaim_open_state()

Most places in the kernel tend to line up cases with the switch to
reduce indentation, so move this over to match that style.
Additionally, I handle the (status >= 0) case in the switch so that we
only "goto restart" from a single place after error handling.

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Split out the body of nfs4_reclaim_open_state()
Anna Schumaker [Tue, 11 Sep 2018 20:23:46 +0000 (16:23 -0400)]
NFS: Split out the body of nfs4_reclaim_open_state()

Moving all of this into a new function removes the need for cramped
indentation, making the code overall easier to look at.   I also take
this chance to switch copy recovery over to using
nfs4_stateid_match_other()

Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agonfs4: flex_file: ignore synthetic uid/gid for tightly coupled DSes
Tigran Mkrtchyan [Mon, 20 Aug 2018 06:56:08 +0000 (08:56 +0200)]
nfs4: flex_file: ignore synthetic uid/gid for tightly coupled DSes

for tightly coupled DSes client must ignore provided synthetic uid and
gid as stated in draft-ietf-nfsv4-flex-files-19#section-5.1.

Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFSv4.1: Fix the r/wsize checking
Trond Myklebust [Tue, 18 Sep 2018 14:07:44 +0000 (10:07 -0400)]
NFSv4.1: Fix the r/wsize checking

The intention of nfs4_session_set_rwsize() was to cap the r/wsize to the
buffer sizes negotiated by the CREATE_SESSION. The initial code had a
bug whereby we would not check the values negotiated by nfs_probe_fsinfo()
(the assumption being that CREATE_SESSION will always negotiate buffer values
that are sane w.r.t. the server's preferred r/wsizes) but would only check
values set by the user in the 'mount' command.

The code was changed in 4.11 to _always_ set the r/wsize, meaning that we
now never use the server preferred r/wsizes. This is the regression that
this patch fixes.
Also rename the function to nfs4_session_limit_rwsize() in order to avoid
future confusion.

Fixes: 033853325fe3 (NFSv4.1 respect server's max size in CREATE_SESSION")
Cc: stable@vger.kernel.org # v4.11+
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFSv4: Convert struct nfs4_state to use refcount_t
Trond Myklebust [Sun, 2 Sep 2018 23:19:07 +0000 (19:19 -0400)]
NFSv4: Convert struct nfs4_state to use refcount_t

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFSv4: Convert open state lookup to use RCU
Trond Myklebust [Sun, 2 Sep 2018 23:15:15 +0000 (19:15 -0400)]
NFSv4: Convert open state lookup to use RCU

Further reduce contention on the inode->i_lock.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Convert lookups of the open context to RCU
Trond Myklebust [Sun, 2 Sep 2018 19:57:01 +0000 (15:57 -0400)]
NFS: Convert lookups of the open context to RCU

Reduce contention on the inode->i_lock by ensuring that we use RCU
when looking up the NFS open context.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Simplify internal check for whether file is open for write
Trond Myklebust [Sun, 2 Sep 2018 19:34:37 +0000 (15:34 -0400)]
NFS: Simplify internal check for whether file is open for write

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoNFS: Convert lookups of the lock context to RCU
Trond Myklebust [Sun, 2 Sep 2018 19:11:57 +0000 (15:11 -0400)]
NFS: Convert lookups of the lock context to RCU

Speed up lookups of an existing lock context by avoiding the inode->i_lock,
and using RCU instead.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agopNFS: Don't allocate more pages than we need to fit a layoutget response
Trond Myklebust [Mon, 3 Sep 2018 17:12:15 +0000 (13:12 -0400)]
pNFS: Don't allocate more pages than we need to fit a layoutget response

For the 'files' and 'flexfiles' layout types, we do not expect the reply
to be any larger than 4k. The block and scsi layout types are a little more
greedy, so we keep allocating the maximum response size for now.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agopNFS: Don't zero out the array in nfs4_alloc_pages()
Trond Myklebust [Mon, 3 Sep 2018 16:57:52 +0000 (12:57 -0400)]
pNFS: Don't zero out the array in nfs4_alloc_pages()

We don't need a zeroed out array, since it is immediately being filled.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Unexport xdr_partial_copy_from_skb()
Trond Myklebust [Fri, 14 Sep 2018 18:38:05 +0000 (14:38 -0400)]
SUNRPC: Unexport xdr_partial_copy_from_skb()

It is no longer used outside of net/sunrpc/socklib.c

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Clean up xs_udp_data_receive()
Trond Myklebust [Fri, 14 Sep 2018 21:45:23 +0000 (17:45 -0400)]
SUNRPC: Clean up xs_udp_data_receive()

Simplify the retry logic.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Allow AF_LOCAL sockets to use the generic stream receive
Trond Myklebust [Fri, 14 Sep 2018 18:32:45 +0000 (14:32 -0400)]
SUNRPC: Allow AF_LOCAL sockets to use the generic stream receive

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Clean up - rename xs_tcp_data_receive() to xs_stream_data_receive()
Trond Myklebust [Fri, 14 Sep 2018 18:26:28 +0000 (14:26 -0400)]
SUNRPC: Clean up - rename xs_tcp_data_receive() to xs_stream_data_receive()

In preparation for sharing with AF_LOCAL.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Simplify TCP receive code by switching to using iterators
Trond Myklebust [Fri, 14 Sep 2018 13:49:06 +0000 (09:49 -0400)]
SUNRPC: Simplify TCP receive code by switching to using iterators

Most of this code should also be reusable with other socket types.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Add a bvec array to struct xdr_buf for use with iovec_iter()
Trond Myklebust [Thu, 13 Sep 2018 16:22:04 +0000 (12:22 -0400)]
SUNRPC: Add a bvec array to struct xdr_buf for use with iovec_iter()

Add a bvec array to struct xdr_buf, and have the client allocate it
when we need to receive data into pages.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Add a label for RPC calls that require allocation on receive
Trond Myklebust [Sun, 16 Sep 2018 04:08:20 +0000 (00:08 -0400)]
SUNRPC: Add a label for RPC calls that require allocation on receive

If the RPC call relies on the receive call allocating pages as buffers,
then let's label it so that we
a) Don't leak memory by allocating pages for requests that do not expect
   this behaviour
b) Can optimise for the common case where calls do not require allocation.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Convert the xprt->sending queue back to an ordinary wait queue
Trond Myklebust [Sun, 9 Sep 2018 17:53:05 +0000 (13:53 -0400)]
SUNRPC: Convert the xprt->sending queue back to an ordinary wait queue

We no longer need priority semantics on the xprt->sending queue, because
the order in which tasks are sent is now dictated by their position in
the send queue.
Note that the backlog queue remains a priority queue, meaning that
slot resources are still managed in order of task priority.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Fix priority queue fairness
Trond Myklebust [Sun, 9 Sep 2018 02:09:48 +0000 (22:09 -0400)]
SUNRPC: Fix priority queue fairness

Fix up the priority queue to not batch by owner, but by queue, so that
we allow '1 << priority' elements to be dequeued before switching to
the next priority queue.
The owner field is still used to wake up requests in round robin order
by owner to avoid single processes hogging the RPC layer by loading the
queues.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Convert xprt receive queue to use an rbtree
Trond Myklebust [Fri, 7 Sep 2018 12:35:22 +0000 (08:35 -0400)]
SUNRPC: Convert xprt receive queue to use an rbtree

If the server is slow, we can find ourselves with quite a lot of entries
on the receive queue. Converting the search from an O(n) to O(log(n))
can make a significant difference, particularly since we have to hold
a number of locks while searching.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Don't take transport->lock unnecessarily when taking XPRT_LOCK
Trond Myklebust [Fri, 7 Sep 2018 23:38:55 +0000 (19:38 -0400)]
SUNRPC: Don't take transport->lock unnecessarily when taking XPRT_LOCK

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Cleanup: remove the unused 'task' argument from the request_send()
Trond Myklebust [Tue, 4 Sep 2018 03:58:59 +0000 (23:58 -0400)]
SUNRPC: Cleanup: remove the unused 'task' argument from the request_send()

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Clean up transport write space handling
Trond Myklebust [Tue, 4 Sep 2018 03:39:27 +0000 (23:39 -0400)]
SUNRPC: Clean up transport write space handling

Treat socket write space handling in the same way we now treat transport
congestion: by denying the XPRT_LOCK until the transport signals that it
has free buffer space.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Turn off throttling of RPC slots for TCP sockets
Trond Myklebust [Mon, 3 Sep 2018 22:41:32 +0000 (18:41 -0400)]
SUNRPC: Turn off throttling of RPC slots for TCP sockets

The theory was that we would need to grab the socket lock anyway, so we
might as well use it to gate the allocation of RPC slots for a TCP
socket.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Allow soft RPC calls to time out when waiting for the XPRT_LOCK
Trond Myklebust [Tue, 4 Sep 2018 03:11:15 +0000 (23:11 -0400)]
SUNRPC: Allow soft RPC calls to time out when waiting for the XPRT_LOCK

This no longer causes them to lose their place in the transmission queue.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Allow calls to xprt_transmit() to drain the entire transmit queue
Trond Myklebust [Wed, 29 Aug 2018 21:40:55 +0000 (17:40 -0400)]
SUNRPC: Allow calls to xprt_transmit() to drain the entire transmit queue

Rather than forcing each and every RPC task to grab the socket write
lock in order to send itself, we allow whichever task is holding the
write lock to attempt to drain the entire transmit queue.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Enqueue swapper tagged RPCs at the head of the transmit queue
Trond Myklebust [Sat, 8 Sep 2018 18:22:41 +0000 (14:22 -0400)]
SUNRPC: Enqueue swapper tagged RPCs at the head of the transmit queue

Avoid memory starvation by giving RPCs that are tagged with the
RPC_TASK_SWAPPER flag the highest priority.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Support for congestion control when queuing is enabled
Trond Myklebust [Mon, 3 Sep 2018 21:37:36 +0000 (17:37 -0400)]
SUNRPC: Support for congestion control when queuing is enabled

Both RDMA and UDP transports require the request to get a "congestion control"
credit before they can be transmitted. Right now, this is done when
the request locks the socket. We'd like it to happen when a request attempts
to be transmitted for the first time.
In order to support retransmission of requests that already hold such
credits, we also want to ensure that they get queued first, so that we
don't deadlock with requests that have yet to obtain a credit.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Improve latency for interactive tasks
Trond Myklebust [Sun, 9 Sep 2018 15:37:22 +0000 (11:37 -0400)]
SUNRPC: Improve latency for interactive tasks

One of the intentions with the priority queues was to ensure that no
single process can hog the transport. The field task->tk_owner therefore
identifies the RPC call's origin, and is intended to allow the RPC layer
to organise queues for fairness.
This commit therefore modifies the transmit queue to group requests
by task->tk_owner, and ensures that we round robin among those groups.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Move RPC retransmission stat counter to xprt_transmit()
Trond Myklebust [Sat, 1 Sep 2018 18:29:18 +0000 (14:29 -0400)]
SUNRPC: Move RPC retransmission stat counter to xprt_transmit()

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Simplify xprt_prepare_transmit()
Trond Myklebust [Sat, 1 Sep 2018 18:25:24 +0000 (14:25 -0400)]
SUNRPC: Simplify xprt_prepare_transmit()

Remove the checks for whether or not we need to transmit, and whether
or not a reply has been received. Those are already handled in
call_transmit() itself.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Don't reset the request 'bytes_sent' counter when releasing XPRT_LOCK
Trond Myklebust [Sat, 1 Sep 2018 18:20:12 +0000 (14:20 -0400)]
SUNRPC: Don't reset the request 'bytes_sent' counter when releasing XPRT_LOCK

If the request is still on the queue, this will be incorrect behaviour.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Treat the task and request as separate in the xprt_ops->send_request()
Trond Myklebust [Thu, 30 Aug 2018 17:27:29 +0000 (13:27 -0400)]
SUNRPC: Treat the task and request as separate in the xprt_ops->send_request()

When we shift to using the transmit queue, then the task that holds the
write lock will not necessarily be the same as the one being transmitted.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Fix up the back channel transmit
Trond Myklebust [Sat, 1 Sep 2018 21:21:01 +0000 (17:21 -0400)]
SUNRPC: Fix up the back channel transmit

Fix up the back channel code to recognise that it has already been
transmitted, so does not need to be called again.
Also ensure that we set req->rq_task.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Refactor RPC call encoding
Trond Myklebust [Fri, 24 Aug 2018 20:28:28 +0000 (16:28 -0400)]
SUNRPC: Refactor RPC call encoding

Move the call encoding so that it occurs before the transport connection
etc.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Add a transmission queue for RPC requests
Trond Myklebust [Fri, 10 Aug 2018 03:33:21 +0000 (23:33 -0400)]
SUNRPC: Add a transmission queue for RPC requests

Add the queue that will enforce the ordering of RPC task transmission.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Distinguish between the slot allocation list and receive queue
Trond Myklebust [Wed, 8 Aug 2018 13:23:32 +0000 (09:23 -0400)]
SUNRPC: Distinguish between the slot allocation list and receive queue

When storing a struct rpc_rqst on the slot allocation list, we currently
use the same field 'rq_list' as we use to store the request on the
receive queue. Since the structure is never on both lists at the same
time, this is OK.
However, for clarity, let's make that a union with different names for
the different lists so that we can more easily distinguish between
the two states.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Minor cleanup for call_transmit()
Trond Myklebust [Tue, 28 Aug 2018 13:20:10 +0000 (09:20 -0400)]
SUNRPC: Minor cleanup for call_transmit()

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Refactor xprt_transmit() to remove wait for reply code
Trond Myklebust [Thu, 23 Aug 2018 04:03:43 +0000 (00:03 -0400)]
SUNRPC: Refactor xprt_transmit() to remove wait for reply code

Allow the caller in clnt.c to call into the code to wait for a reply
after calling xprt_transmit(). Again, the reason is that the backchannel
code does not need this functionality.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Refactor xprt_transmit() to remove the reply queue code
Trond Myklebust [Wed, 22 Aug 2018 21:55:46 +0000 (17:55 -0400)]
SUNRPC: Refactor xprt_transmit() to remove the reply queue code

Separate out the action of adding a request to the reply queue so that the
backchannel code can simply skip calling it altogether.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Rename xprt->recv_lock to xprt->queue_lock
Trond Myklebust [Fri, 31 Aug 2018 14:21:00 +0000 (10:21 -0400)]
SUNRPC: Rename xprt->recv_lock to xprt->queue_lock

We will use the same lock to protect both the transmit and receive queues.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Don't wake queued RPC calls multiple times in xprt_transmit
Trond Myklebust [Wed, 29 Aug 2018 13:30:19 +0000 (09:30 -0400)]
SUNRPC: Don't wake queued RPC calls multiple times in xprt_transmit

Rather than waking up the entire queue of RPC messages a second time,
just wake up the task that was put to sleep.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Test whether the task is queued before grabbing the queue spinlocks
Trond Myklebust [Sat, 8 Sep 2018 03:15:35 +0000 (23:15 -0400)]
SUNRPC: Test whether the task is queued before grabbing the queue spinlocks

When asked to wake up an RPC task, it makes sense to test whether or not
the task is still queued.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Add a helper to wake up a sleeping rpc_task and set its status
Trond Myklebust [Wed, 29 Aug 2018 13:22:28 +0000 (09:22 -0400)]
SUNRPC: Add a helper to wake up a sleeping rpc_task and set its status

Add a helper that will wake up a task that is sleeping on a specific
queue, and will set the value of task->tk_status. This is mainly
intended for use by the transport layer to notify the task of an
error condition.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Refactor the transport request pinning
Trond Myklebust [Mon, 6 Aug 2018 16:55:34 +0000 (12:55 -0400)]
SUNRPC: Refactor the transport request pinning

We are going to need to pin for both send and receive.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Simplify dealing with aborted partially transmitted messages
Trond Myklebust [Fri, 31 Aug 2018 14:00:02 +0000 (10:00 -0400)]
SUNRPC: Simplify dealing with aborted partially transmitted messages

If the previous message was only partially transmitted, we need to close
the socket in order to avoid corruption of the message stream. To do so,
we currently hijack the unlocking of the socket in order to schedule
the close.
Now that we track the message offset in the socket state, we can move
that kind of checking out of the socket lock code, which is needed to
allow messages to remain queued after dropping the socket lock.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Add socket transmit queue offset tracking
Trond Myklebust [Mon, 13 Aug 2018 20:54:57 +0000 (16:54 -0400)]
SUNRPC: Add socket transmit queue offset tracking

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Move reset of TCP state variables into the reconnect code
Trond Myklebust [Mon, 13 Aug 2018 20:50:49 +0000 (16:50 -0400)]
SUNRPC: Move reset of TCP state variables into the reconnect code

Rather than resetting state variables in socket state_change() callback,
do it in the sunrpc TCP connect function itself.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Rename TCP receive-specific state variables
Trond Myklebust [Mon, 13 Aug 2018 19:48:42 +0000 (15:48 -0400)]
SUNRPC: Rename TCP receive-specific state variables

Since we will want to introduce similar TCP state variables for the
transmission of requests, let's rename the existing ones to label
that they are for the receive side.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Avoid holding locks across the XDR encoding of the RPC message
Trond Myklebust [Tue, 14 Aug 2018 17:58:34 +0000 (13:58 -0400)]
SUNRPC: Avoid holding locks across the XDR encoding of the RPC message

Currently, we grab the socket bit lock before we allow the message
to be XDR encoded. That significantly slows down the transmission
rate, since we serialise on a potentially blocking operation.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Simplify identification of when the message send/receive is complete
Trond Myklebust [Tue, 28 Aug 2018 13:00:27 +0000 (09:00 -0400)]
SUNRPC: Simplify identification of when the message send/receive is complete

Add states to indicate that the message send and receive are not yet
complete.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: The transmitted message must lie in the RPCSEC window of validity
Trond Myklebust [Tue, 14 Aug 2018 17:50:21 +0000 (13:50 -0400)]
SUNRPC: The transmitted message must lie in the RPCSEC window of validity

If a message has been encoded using RPCSEC_GSS, the server is
maintaining a window of sequence numbers that it considers valid.
The client should normally be tracking that window, and needs to
verify that the sequence number used by the message being transmitted
still lies inside the window of validity.

So far, we've been able to assume this condition would be realised
automatically, since the client has been encoding the message only
after taking the socket lock. Once we change that condition, we
will need the explicit check.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: If there is no reply expected, bail early from call_decode
Trond Myklebust [Tue, 28 Aug 2018 20:27:31 +0000 (16:27 -0400)]
SUNRPC: If there is no reply expected, bail early from call_decode

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoSUNRPC: Clean up initialisation of the struct rpc_rqst
Trond Myklebust [Wed, 22 Aug 2018 18:24:16 +0000 (14:24 -0400)]
SUNRPC: Clean up initialisation of the struct rpc_rqst

Move the initialisation back into xprt.c.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
5 years agoLinux 4.19-rc6 v4.19-rc6
Greg Kroah-Hartman [Sun, 30 Sep 2018 14:15:35 +0000 (07:15 -0700)]
Linux 4.19-rc6

5 years agoMerge tag 'auxdisplay-for-greg-v4.19-rc6' of https://github.com/ojeda/linux
Greg Kroah-Hartman [Sun, 30 Sep 2018 13:20:33 +0000 (06:20 -0700)]
Merge tag 'auxdisplay-for-greg-v4.19-rc6' of https://github.com/ojeda/linux

Miguel writes:
  "A trivial fix for auxdisplay

    - MAINTAINERS reference fix for moved file
      Reported by Joe Perches"

* tag 'auxdisplay-for-greg-v4.19-rc6' of https://github.com/ojeda/linux:
  MAINTAINERS: fix reference to moved drivers/{misc => auxdisplay}/panel.c

5 years agoMerge tag 'libnvdimm-fixes2-4.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel...
Greg Kroah-Hartman [Sun, 30 Sep 2018 13:19:38 +0000 (06:19 -0700)]
Merge tag 'libnvdimm-fixes2-4.19-rc6' of git://git./linux/kernel/git/nvdimm/nvdimm

Dan writes:
  "filesystem-dax for 4.19-rc6

   Fix a deadlock in the new for 4.19 dax_lock_mapping_entry() routine."

* tag 'libnvdimm-fixes2-4.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm:
  dax: Fix deadlock in dax_lock_mapping_entry()

5 years agoMAINTAINERS: fix reference to moved drivers/{misc => auxdisplay}/panel.c
Miguel Ojeda [Sun, 30 Sep 2018 11:50:05 +0000 (13:50 +0200)]
MAINTAINERS: fix reference to moved drivers/{misc => auxdisplay}/panel.c

Commit 51c1e9b554c9 ("auxdisplay: Move panel.c to drivers/auxdisplay folder")
moved the file, but the MAINTAINERS reference was not updated.

Link: https://lore.kernel.org/lkml/20180928220131.31075-1-joe@perches.com/
Reported-by: Joe Perches <joe@perches.com>
Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
5 years agoMerge tag 'for-linus-20180929' of git://git.kernel.dk/linux-block
Greg Kroah-Hartman [Sat, 29 Sep 2018 21:52:14 +0000 (14:52 -0700)]
Merge tag 'for-linus-20180929' of git://git.kernel.dk/linux-block

Jens writes:
  "Block fixes for 4.19-rc6

   A set of fixes that should go into this release. This pull request
   contains:

   - A fix (hopefully) for the persistent grants for xen-blkfront. A
     previous fix from this series wasn't complete, hence reverted, and
     this one should hopefully be it. (Boris Ostrovsky)

   - Fix for an elevator drain warning with SMR devices, which is
     triggered when you switch schedulers (Damien)

   - bcache deadlock fix (Guoju Fang)

   - Fix for the block unplug tracepoint, which has had the
     timer/explicit flag reverted since 4.11 (Ilya)

   - Fix a regression in this series where the blk-mq timeout hook is
     invoked with the RCU read lock held, hence preventing it from
     blocking (Keith)

   - NVMe pull from Christoph, with a single multipath fix (Susobhan Dey)"

* tag 'for-linus-20180929' of git://git.kernel.dk/linux-block:
  xen/blkfront: correct purging of persistent grants
  Revert "xen/blkfront: When purging persistent grants, keep them in the buffer"
  blk-mq: I/O and timer unplugs are inverted in blktrace
  bcache: add separate workqueue for journal_write to avoid deadlock
  xen/blkfront: When purging persistent grants, keep them in the buffer
  block: fix deadline elevator drain for zoned block devices
  blk-mq: Allow blocking queue tag iter callbacks
  nvme: properly propagate errors in nvme_mpath_init

5 years agoMerge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
Greg Kroah-Hartman [Sat, 29 Sep 2018 21:34:06 +0000 (14:34 -0700)]
Merge branch 'x86-urgent-for-linus' of git://git./linux/kernel/git/tip/tip

Thomas writes:
  "A single fix for the AMD memory encryption boot code so it does not
   read random garbage instead of the cached encryption bit when a kexec
   kernel is allocated above the 32bit address limit."

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/boot: Fix kexec booting failure in the SEV bit detection code