05 Apr, 2020
1 commit
-
Move the test for whether a task is already queued to prevent
corruption of the timer list in __rpc_sleep_on_priority_timeout().Signed-off-by: Trond Myklebust
04 Apr, 2020
3 commits
-
When we're sending a layoutreturn, ensure that we reference the
layout cred atomically with the copy of the stateid.Signed-off-by: Trond Myklebust
-
Ensure that the dereference of the layout cred is atomic with the
stateid.Signed-off-by: Trond Myklebust
-
When we look up the delegation cred, we are usually doing so in
conjunction with a read of the stateid, and we want to ensure
that the look up is atomic with that read.Fixes: 57f188e04773 ("NFSv4: nfs_update_inplace_delegation() should update delegation cred")
[sfr@canb.auug.org.au: Fixed up borken Fixes: line from Trond :-)]
Signed-off-by: Trond Myklebust
03 Apr, 2020
3 commits
-
Setting nfs_mountpoint_expiry_timeout() to a negative value stops
mountpoint expiration, while setting it to a positive value restarts
the scheduler.Signed-off-by: Trond Myklebust
-
We must not return from nfs_d_automount() without holding 2 references
to the mount record. Doing so, will trigger the BUG() in finish_automount().
Also ensure that we don't try to reschedule the automount timer with
a negative or zero timeout value.Fixes: 22a1ae9a93fb ("NFS: If nfs_mountpoint_expiry_timeout < 0, do not expire submounts")
Cc: stable@vger.kernel.org # v5.5+
Signed-off-by: Trond Myklebust -
nfs_vers_tokens, nfs_xprt_protocol_tokens, and nfs_secflavor_tokens were
all missing an empty item at the end of the array, allowing
lookup_constant() to potentially walk off the end and trigger and oops.Reported-by: Olga Kornievskaia
Signed-off-by: Scott Mayhew
Fixes: e38bb238ed8c ("NFS: Convert mount option parsing to use functionality from fs_parser.h")
Cc: stable@vger.kernel.org # v5.6
Signed-off-by: Trond Myklebust
02 Apr, 2020
9 commits
-
If we have to retransmit requests, try to join their page groups
first.Signed-off-by: Trond Myklebust
-
Refactor nfs_lock_and_join_requests() in order to separate out the
subrequest merging into its own function nfs_lock_and_join_group()
that can be used by O_DIRECT.Signed-off-by: Trond Myklebust
-
If we have to split the request up into subrequests, we have to submit
the request pointed to by the function call parameter last, in case
there is an error or other issue that causes us to exit before the
last request is submitted. The reason is that the caller is expected
to perform cleanup in those cases.Signed-off-by: Trond Myklebust
-
Clean up nfs_lock_and_join_requests() to simplify the calculation
of the range covered by the page group, taking into account the
presence of mirrors.Signed-off-by: Trond Myklebust
-
We need to trust that desc->pg_mirror_idx is set correctly, whether
or not mirroring is enabled.Signed-off-by: Trond Myklebust
-
If we just set the mirror count to 1 without first clearing out
the mirrors, we can leak queued up requests.Signed-off-by: Trond Myklebust
-
nfs_direct_write_scan_commit_list() will lock the request and bump
the reference count, but we also need to account for the reference
that was taken when we initially added the request to the commit list.Fixes: fb5f7f20cdb9 ("NFS: commit errors should be fatal")
Signed-off-by: Trond Myklebust -
We need to ensure that we create the mirror requests before calling
nfs_pageio_add_request_mirror() on the request we are adding.
Otherwise, we can end up with a use-after-free if the call to
nfs_pageio_add_request_mirror() triggers I/O.Fixes: c917cfaf9bbe ("NFS: Fix up NFS I/O subrequest creation")
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust -
When a subrequest is being detached from the subgroup, we want to
ensure that it is not holding the group lock, or in the process
of waiting for the group lock.Fixes: 5b2b5187fa85 ("NFS: Fix nfs_page_group_destroy() and nfs_lock_and_join_requests() race cases")
Signed-off-by: Trond Myklebust
01 Apr, 2020
1 commit
-
When we detach a subrequest from the list, we must also release the
reference it holds to the parent.Fixes: 5b2b5187fa85 ("NFS: Fix nfs_page_group_destroy() and nfs_lock_and_join_requests() race cases")
Cc: stable@vger.kernel.org # v4.14+
Signed-off-by: Trond Myklebust
29 Mar, 2020
1 commit
-
NFSoRDMA Client Updates for Linux 5.7
New Features:
- Allow one active connection and several zombie connections to prevent
blocking if the remote server is unresponsive.Bugfixes and Cleanups:
- Enhance MR-related trace points
- Refactor connection set-up and disconnect functions
- Make Protection Domains per-connection instead of per-transport
- Merge struct rpcrdma_ia into rpcrdma_ep
28 Mar, 2020
20 commits
-
If the FLUSH_SYNC flag is set, nfs_initiate_pgio() will currently
wait for completion, and then return the status of the I/O operation.
What we actually want to report in nfs_pageio_doio() is whether or
not the RPC call was launched successfully, whereas actual I/O
status is intended handled in the reply callbacks.Since FLUSH_SYNC is never set by any of the callers anyway, let's
just remove that code altogether.Signed-off-by: Trond Myklebust
-
Move from requesting only full file layout segments, to requesting
layout segments that match our I/O size. This means the server is
still free to return a full file layout, but we will no longer
error out if it does not.Signed-off-by: Trond Myklebust
-
Remove the requirement that the server always sends whole file
layouts.Signed-off-by: Trond Myklebust
-
When starting to read or write with a layout segment, check that the
range matches our request.Signed-off-by: Trond Myklebust
-
Check that the number of mirrors, and the mirror information matches
before deciding to merge layout segments in pNFS/flexfiles.Signed-off-by: Trond Myklebust
-
Fix up pnfs_layout_mark_request_commit() to alway reschedule the write
if the layout segment is invalid. Also minor cleanup.Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
-
Move the pNFS commit related operations into a separate structure
that can be carried by the pnfs_ds_commit_info.Signed-off-by: Trond Myklebust
-
Remove the unused bucket array in struct pnfs_ds_commit_info.
Signed-off-by: Trond Myklebust
-
Lift filelayout_search_commit_reqs() into the generic pnfs/nfs code,
and add support for commit arrays.Signed-off-by: Trond Myklebust
-
Enable adding and lookup of per-layout segment commits in filelayout
and flexfilelayout.Signed-off-by: Trond Myklebust
-
Ensure that both the file and flexfiles layout types clean up when
freeing the layout segments.Signed-off-by: Trond Myklebust
-
Add support for scanning the full list of per-layout segment commit
arrays to nfs_clear_pnfs_ds_commit_verifiers().Signed-off-by: Trond Myklebust
-
Instead of trying to save the commit verifiers and checking them against
previous writes, adopt the same strategy as for buffered writes, of
just checking the verifiers at commit time.Signed-off-by: Trond Myklebust
-
Fix the O_DIRECT code to avoid retries if the COMMIT fails with a fatal
error.Signed-off-by: Trond Myklebust
-
Add a pNFS callback to allow the O_DIRECT code to release the DS
commitinfo when freeing the dreq.Signed-off-by: Trond Myklebust
-
Add support for scanning the full list of per-layout segment commit
arrays to pnfs_generic_commit_pagelist().Signed-off-by: Trond Myklebust
-
Add support for scanning the full list of per-layout segment commit
arrays to pnfs_generic_recover_commit_reqs().Signed-off-by: Trond Myklebust
-
Add support for scanning the full list of per-layout segment commit
arrays to pnfs_generic_scan_commit_lists()Signed-off-by: Trond Myklebust
-
When we have multiple layout segments with different lists of mirrored
data, we need to track the commits on a per layout segment basis.
This patch adds a list to support this tracking in struct
pnfs_ds_commit_info.Signed-off-by: Trond Myklebust
27 Mar, 2020
2 commits
-
Change the rpcrdma_xprt_disconnect() function so that it no longer
waits for the DISCONNECTED event. This prevents blocking if the
remote is unresponsive.In rpcrdma_xprt_disconnect(), the transport's rpcrdma_ep is
detached. Upon return from rpcrdma_xprt_disconnect(), the transport
(r_xprt) is ready immediately for a new connection.The RDMA_CM_DEVICE_REMOVAL and RDMA_CM_DISCONNECTED events are now
handled almost identically.However, because the lifetimes of rpcrdma_xprt structures and
rpcrdma_ep structures are now independent, creating an rpcrdma_ep
needs to take a module ref count. The ep now owns most of the
hardware resources for a transport.Also, a kref is needed to ensure that rpcrdma_ep sticks around
long enough for the cm_event_handler to finish.Signed-off-by: Chuck Lever
Signed-off-by: Anna Schumaker -
rpcrdma_cm_event_handler() is always passed an @id pointer that is
valid. However, in a subsequent patch, we won't be able to extract
an r_xprt in every case. So instead of using the r_xprt's
presentation address strings, extract them from struct rdma_cm_id.Signed-off-by: Chuck Lever
Signed-off-by: Anna Schumaker