mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
NFS client bugfixes for Linux 5.18
Highlights include: Stable fixes: - SUNRPC: Ensure that the gssproxy client can start in a connected state Bugfixes: - Revert "SUNRPC: Ensure gss-proxy connects on setup" - nfs: fix broken handling of the softreval mount option -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEESQctxSBg8JpV8KqEZwvnipYKAPIFAmJ+j5kACgkQZwvnipYK APIQag/+JXtDt9xo0SsGTMJ2PJArnRoyd3QcZjJtoabaZTylZyILZ20sxvt/jgby miOKrI+bbsykbrwQijRLF/Yys1G+iMBzSWy4lpJ9eH4AVkfjr5qqauRbPobo/ZiI i5fDLR84FlzKYWBY1Nv6YE5VREukIlXbrq7KWe/HoS7/hSAamhkUv+a0M8iNLGO4 QtH7+M0iBZTI9yM4gFAcMAANV21SxvjqP1z62kbCp00qO2mL0PgF/2pxC9WgX24/ EZX037ykzKFkjgWfzT8+/eIfCQGIPi/9e6Ir4Bc99psVFOYd1YxkTLBycNwm1VOz 5RLORbURDVMPQH2/qZ57u7B0gJF76UZM4pH3gv+i9nFhoUqf3kFZAOy48MZEFz3X sPiQZLck63mvO9Bd3QX6pFZc0datiYmhuXRknjxV6Bz/Y41y3NzeJeX4r88s4q7l tisZDmaIm0Q+H07QOTL0aCk456amP6XLnO1+nu/PSR/3ImwJSaOpypHx/BxDJUTG TvpY1ouBZ8irfT6JrbfVnSdbedIZx4c+6btVw6mlT40edZF6M3r+3s8s2TU7x+co uiBMB4Qj/C19zqcf/DziiL1PZEJPm3lk0fBHc6JIWCV4I3eYxQ5J4nFJsy8/jPm1 lTgreoHWfnYC3WhlxUk+N3+9X/9+iFEJUxqGYfANf8GFaGqcYVQ= =/Yg+ -----END PGP SIGNATURE----- Merge tag 'nfs-for-5.18-4' of git://git.linux-nfs.org/projects/trondmy/linux-nfs Pull NFS client bugfixes from Trond Myklebust: "One more pull request. There was a bug in the fix to ensure that gss- proxy continues to work correctly after we fixed the AF_LOCAL socket leak in the RPC code. This therefore reverts that broken patch, and replaces it with one that works correctly. Stable fixes: - SUNRPC: Ensure that the gssproxy client can start in a connected state Bugfixes: - Revert "SUNRPC: Ensure gss-proxy connects on setup" - nfs: fix broken handling of the softreval mount option" * tag 'nfs-for-5.18-4' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: nfs: fix broken handling of the softreval mount option SUNRPC: Ensure that the gssproxy client can start in a connected state Revert "SUNRPC: Ensure gss-proxy connects on setup"
This commit is contained in:
commit
6dd5884d1d
@ -517,7 +517,7 @@ static int nfs_fs_context_parse_param(struct fs_context *fc,
|
||||
if (result.negated)
|
||||
ctx->flags &= ~NFS_MOUNT_SOFTREVAL;
|
||||
else
|
||||
ctx->flags &= NFS_MOUNT_SOFTREVAL;
|
||||
ctx->flags |= NFS_MOUNT_SOFTREVAL;
|
||||
break;
|
||||
case Opt_posix:
|
||||
if (result.negated)
|
||||
|
@ -160,7 +160,7 @@ struct rpc_add_xprt_test {
|
||||
#define RPC_CLNT_CREATE_NO_RETRANS_TIMEOUT (1UL << 9)
|
||||
#define RPC_CLNT_CREATE_SOFTERR (1UL << 10)
|
||||
#define RPC_CLNT_CREATE_REUSEPORT (1UL << 11)
|
||||
#define RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL (1UL << 12)
|
||||
#define RPC_CLNT_CREATE_CONNECTED (1UL << 12)
|
||||
|
||||
struct rpc_clnt *rpc_create(struct rpc_create_args *args);
|
||||
struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *,
|
||||
|
@ -97,7 +97,8 @@ static int gssp_rpc_create(struct net *net, struct rpc_clnt **_clnt)
|
||||
* timeout, which would result in reconnections being
|
||||
* done without the correct namespace:
|
||||
*/
|
||||
.flags = RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL |
|
||||
.flags = RPC_CLNT_CREATE_NOPING |
|
||||
RPC_CLNT_CREATE_CONNECTED |
|
||||
RPC_CLNT_CREATE_NO_IDLE_TIMEOUT
|
||||
};
|
||||
struct rpc_clnt *clnt;
|
||||
|
@ -76,6 +76,7 @@ static int rpc_encode_header(struct rpc_task *task,
|
||||
static int rpc_decode_header(struct rpc_task *task,
|
||||
struct xdr_stream *xdr);
|
||||
static int rpc_ping(struct rpc_clnt *clnt);
|
||||
static int rpc_ping_noreply(struct rpc_clnt *clnt);
|
||||
static void rpc_check_timeout(struct rpc_task *task);
|
||||
|
||||
static void rpc_register_client(struct rpc_clnt *clnt)
|
||||
@ -479,9 +480,12 @@ static struct rpc_clnt *rpc_create_xprt(struct rpc_create_args *args,
|
||||
|
||||
if (!(args->flags & RPC_CLNT_CREATE_NOPING)) {
|
||||
int err = rpc_ping(clnt);
|
||||
if ((args->flags & RPC_CLNT_CREATE_IGNORE_NULL_UNAVAIL) &&
|
||||
err == -EOPNOTSUPP)
|
||||
err = 0;
|
||||
if (err != 0) {
|
||||
rpc_shutdown_client(clnt);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
} else if (args->flags & RPC_CLNT_CREATE_CONNECTED) {
|
||||
int err = rpc_ping_noreply(clnt);
|
||||
if (err != 0) {
|
||||
rpc_shutdown_client(clnt);
|
||||
return ERR_PTR(err);
|
||||
@ -2712,6 +2716,10 @@ static const struct rpc_procinfo rpcproc_null = {
|
||||
.p_decode = rpcproc_decode_null,
|
||||
};
|
||||
|
||||
static const struct rpc_procinfo rpcproc_null_noreply = {
|
||||
.p_encode = rpcproc_encode_null,
|
||||
};
|
||||
|
||||
static void
|
||||
rpc_null_call_prepare(struct rpc_task *task, void *data)
|
||||
{
|
||||
@ -2765,6 +2773,28 @@ static int rpc_ping(struct rpc_clnt *clnt)
|
||||
return status;
|
||||
}
|
||||
|
||||
static int rpc_ping_noreply(struct rpc_clnt *clnt)
|
||||
{
|
||||
struct rpc_message msg = {
|
||||
.rpc_proc = &rpcproc_null_noreply,
|
||||
};
|
||||
struct rpc_task_setup task_setup_data = {
|
||||
.rpc_client = clnt,
|
||||
.rpc_message = &msg,
|
||||
.callback_ops = &rpc_null_ops,
|
||||
.flags = RPC_TASK_SOFT | RPC_TASK_SOFTCONN | RPC_TASK_NULLCREDS,
|
||||
};
|
||||
struct rpc_task *task;
|
||||
int status;
|
||||
|
||||
task = rpc_run_task(&task_setup_data);
|
||||
if (IS_ERR(task))
|
||||
return PTR_ERR(task);
|
||||
status = task->tk_status;
|
||||
rpc_put_task(task);
|
||||
return status;
|
||||
}
|
||||
|
||||
struct rpc_cb_add_xprt_calldata {
|
||||
struct rpc_xprt_switch *xps;
|
||||
struct rpc_xprt *xprt;
|
||||
|
Loading…
Reference in New Issue
Block a user