NFS client bugfixes for Linux 4.14
Hightlights include: stable fixes: - nfs/filelayout: fix oops when freeing filelayout segment - NFS: Fix uninitialized rpc_wait_queue bugfixes: - NFSv4/pnfs: Fix an infinite layoutget loop - nfs: RPC_MAX_AUTH_SIZE is in bytes -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJZ27KKAAoJEGcL54qWCgDybIIP/Ai9g9AQ52B7Id0VhcB40fZM Bn8I8nYbSzkOivL+w5DHW5eTg0spJ2+iEBjOucPkDWuK0hmeu7kDaIIfauaBTmcM dg2eQMVEaU8PnB0Bf9xMF1hR4Jf3laPVaW3Dnpl01+eJu0feQVf3EDJOzwDll5e6 GDt8wuKXjfXZmHEVuvMvD/YSbzlLgKIyp62VRWXWMM73VUHL9YNc0VDaX6LTHzkM fYK+jWEgoq93/xuC2cP98+PyoziL82AYl7em0mcHTeffHm6FlB2KXrQq6dsW3UqI QMHQdqn6j+CWAv/PyJP+AifT/pTlvnor9ia4TVXlleWwrMSllUDCEttWi0jaBJxv OhaQgaQQEIGb6TLo7qbmHIX/VXxC1UMfjkx1Eqr4vu/Ps8y9t1Wy6V+pd86+QbzG qo/+jtFVHTMWIU9JBlowKoAJkeyeMfhL4cfSqcgdsSj9JJ2O/F/a/BFNh3bgui69 TeSFLMoS0FCw9T2h2QeMCSwXvETmFDZR2pUXdsoULxYH0jZ4oPr7Fr9GflsSITwA oCITgkpt1oOoB5V/PrLPWfjq0JzcA69VAgmD1WJn5eNz1AvQErYYNU+VDf51T4rm zEAxk26WB7+KBBYMEyRCBeatnAAx0a28MFyYI7ittwovOkXIXOv/dw2bFZbSNyoc vpe4ZMGP442znvyy5Myh =QOH4 -----END PGP SIGNATURE----- Merge tag 'nfs-for-4.14-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs Pull NFS client bugfixes from Trond Myklebust: "Hightlights include: stable fixes: - nfs/filelayout: fix oops when freeing filelayout segment - NFS: Fix uninitialized rpc_wait_queue bugfixes: - NFSv4/pnfs: Fix an infinite layoutget loop - nfs: RPC_MAX_AUTH_SIZE is in bytes" * tag 'nfs-for-4.14-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: NFSv4/pnfs: Fix an infinite layoutget loop nfs/filelayout: fix oops when freeing filelayout segment sunrpc: remove redundant initialization of sock NFS: Fix uninitialized rpc_wait_queue NFS: Cleanup error handling in nfs_idmap_request_key() nfs: RPC_MAX_AUTH_SIZE is in bytes
This commit is contained in:
Коммит
68ebe3cbe7
|
@ -218,7 +218,6 @@ static void nfs_cb_idr_remove_locked(struct nfs_client *clp)
|
|||
static void pnfs_init_server(struct nfs_server *server)
|
||||
{
|
||||
rpc_init_wait_queue(&server->roc_rpcwaitq, "pNFS ROC");
|
||||
rpc_init_wait_queue(&server->uoc_rpcwaitq, "NFS UOC");
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -888,6 +887,7 @@ struct nfs_server *nfs_alloc_server(void)
|
|||
ida_init(&server->openowner_id);
|
||||
ida_init(&server->lockowner_id);
|
||||
pnfs_init_server(server);
|
||||
rpc_init_wait_queue(&server->uoc_rpcwaitq, "NFS UOC");
|
||||
|
||||
return server;
|
||||
}
|
||||
|
|
|
@ -745,7 +745,8 @@ filelayout_free_lseg(struct pnfs_layout_segment *lseg)
|
|||
struct nfs4_filelayout_segment *fl = FILELAYOUT_LSEG(lseg);
|
||||
|
||||
dprintk("--> %s\n", __func__);
|
||||
nfs4_fl_put_deviceid(fl->dsaddr);
|
||||
if (fl->dsaddr != NULL)
|
||||
nfs4_fl_put_deviceid(fl->dsaddr);
|
||||
/* This assumes a single RW lseg */
|
||||
if (lseg->pls_range.iomode == IOMODE_RW) {
|
||||
struct nfs4_filelayout *flo;
|
||||
|
|
|
@ -274,7 +274,7 @@ static struct key *nfs_idmap_request_key(const char *name, size_t namelen,
|
|||
ssize_t ret;
|
||||
|
||||
ret = nfs_idmap_get_desc(name, namelen, type, strlen(type), &desc);
|
||||
if (ret <= 0)
|
||||
if (ret < 0)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
rkey = request_key(&key_type_id_resolver, desc, "");
|
||||
|
|
|
@ -8399,8 +8399,7 @@ nfs4_layoutget_handle_exception(struct rpc_task *task,
|
|||
lo = NFS_I(inode)->layout;
|
||||
/* If the open stateid was bad, then recover it. */
|
||||
if (!lo || test_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags) ||
|
||||
nfs4_stateid_match_other(&lgp->args.stateid,
|
||||
&lgp->args.ctx->state->stateid)) {
|
||||
!nfs4_stateid_match_other(&lgp->args.stateid, &lo->plh_stateid)) {
|
||||
spin_unlock(&inode->i_lock);
|
||||
exception->state = lgp->args.ctx->state;
|
||||
exception->stateid = &lgp->args.stateid;
|
||||
|
|
|
@ -1842,8 +1842,8 @@ static void encode_create_session(struct xdr_stream *xdr,
|
|||
* Assumes OPEN is the biggest non-idempotent compound.
|
||||
* 2 is the verifier.
|
||||
*/
|
||||
max_resp_sz_cached = (NFS4_dec_open_sz + RPC_REPHDRSIZE +
|
||||
RPC_MAX_AUTH_SIZE + 2) * XDR_UNIT;
|
||||
max_resp_sz_cached = (NFS4_dec_open_sz + RPC_REPHDRSIZE + 2)
|
||||
* XDR_UNIT + RPC_MAX_AUTH_SIZE;
|
||||
|
||||
encode_op_hdr(xdr, OP_CREATE_SESSION, decode_create_session_maxsz, hdr);
|
||||
p = reserve_space(xdr, 16 + 2*28 + 20 + clnt->cl_nodelen + 12);
|
||||
|
|
|
@ -2203,7 +2203,7 @@ static void xs_udp_setup_socket(struct work_struct *work)
|
|||
struct sock_xprt *transport =
|
||||
container_of(work, struct sock_xprt, connect_worker.work);
|
||||
struct rpc_xprt *xprt = &transport->xprt;
|
||||
struct socket *sock = transport->sock;
|
||||
struct socket *sock;
|
||||
int status = -EIO;
|
||||
|
||||
sock = xs_create_sock(xprt, transport,
|
||||
|
|
Загрузка…
Ссылка в новой задаче