mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
This request is late, apologies.
But it's also a fairly small update this time around. Some cleanup, RDMA fixes, overlayfs fixes, and a fix for an NFSv4 state bug. The bigger deal for nfsd this time around is Jeff Layton's already-merged i_version patches. This series has a minor conflict with that one, and the resolution should be obvious. (Stephen Rothwell has been carrying it in linux-next for what it's worth.) -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJafNVvAAoJECebzXlCjuG+yZUP/2SctFtkW638z9frLcIVt5M6 x5hluw5jtFrVqq/KoMwi7rVaMzhdvcgwwfaLciqrPCOmcMKlOqiWslyCV0wZVCZS jabkOeinKVAyPTlESesNyArWKBWaB8QaYDwbkQ5Y76U9Ma5gwSghS1wc8vrNduZY 2StieESOiOs9LljXf5SqCC5nN9s7gs4qtCK7aZ3JIt4661Lh39LqyO5zxLnc78eL USnJKHjTSreY2Vd1/TdNWyZhiim43wdrB+jpy6IoocTqyhYalkCz1iYdJn1arqtP iIddPpczKxkHekFVj7/Kfa+ATFtdXIpivOBhhOT0oY8HukTd58bh/oUMrFt4BSuP MQst0R9h1sanBE18XBPlXuIK51sm3AjjOGaQycl/Mzes+dMRgIP/KspAcnwwXHqG gyZsF3VzliFTc9s0SyiAz2AxNTUnjd+LV3E0DUeivURa6V3pc+sFlQzi8PRxRaep 0gmhYcZsfwdDKZ/kbQyQdSWN48NxOLFke4fYjmoUtoyILa0NAHEqafeJkR5EiRTm tZsL9H/3THEGWygYlXGGBo/J4w5jE3uL/8KkfeuZefzSo0Ujqu0pBALMTnGFLKRx Mpw7JEqfUwqIVZ0Qh6q9yIcjr89qWv96UpBqRRIkFX5zOPN7B1BH8C89g8qy3Hyt gm/5BTw4FPE0uAM9Nhsd =icEX -----END PGP SIGNATURE----- Merge tag 'nfsd-4.16' of git://linux-nfs.org/~bfields/linux Pull nfsd update from Bruce Fields: "A fairly small update this time around. Some cleanup, RDMA fixes, overlayfs fixes, and a fix for an NFSv4 state bug. The bigger deal for nfsd this time around was Jeff Layton's already-merged i_version patches" * tag 'nfsd-4.16' of git://linux-nfs.org/~bfields/linux: svcrdma: Fix Read chunk round-up NFSD: hide unused svcxdr_dupstr() nfsd: store stat times in fill_pre_wcc() instead of inode times nfsd: encode stat->mtime for getattr instead of inode->i_mtime nfsd: return RESOURCE not GARBAGE_ARGS on too many ops nfsd4: don't set lock stateid's sc_type to CLOSED nfsd: Detect unhashed stids in nfsd4_verify_open_stid() sunrpc: remove dead code in svc_sock_setbufsize svcrdma: Post Receives in the Receive completion handler nfsd4: permit layoutget of executable-only files lockd: convert nlm_rqst.a_count from atomic_t to refcount_t lockd: convert nlm_lockowner.count from atomic_t to refcount_t lockd: convert nsm_handle.sm_count from atomic_t to refcount_t
This commit is contained in:
commit
f1517df870
14 changed files with 73 additions and 97 deletions
|
|
@ -384,25 +384,11 @@ static int svc_partial_recvfrom(struct svc_rqst *rqstp,
|
|||
static void svc_sock_setbufsize(struct socket *sock, unsigned int snd,
|
||||
unsigned int rcv)
|
||||
{
|
||||
#if 0
|
||||
mm_segment_t oldfs;
|
||||
oldfs = get_fs(); set_fs(KERNEL_DS);
|
||||
sock_setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
|
||||
(char*)&snd, sizeof(snd));
|
||||
sock_setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
|
||||
(char*)&rcv, sizeof(rcv));
|
||||
#else
|
||||
/* sock_setsockopt limits use to sysctl_?mem_max,
|
||||
* which isn't acceptable. Until that is made conditional
|
||||
* on not having CAP_SYS_RESOURCE or similar, we go direct...
|
||||
* DaveM said I could!
|
||||
*/
|
||||
lock_sock(sock->sk);
|
||||
sock->sk->sk_sndbuf = snd * 2;
|
||||
sock->sk->sk_rcvbuf = rcv * 2;
|
||||
sock->sk->sk_write_space(sock->sk);
|
||||
release_sock(sock->sk);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int svc_sock_secure_port(struct svc_rqst *rqstp)
|
||||
|
|
|
|||
|
|
@ -95,7 +95,6 @@ out_shortreply:
|
|||
out_notfound:
|
||||
dprintk("svcrdma: unrecognized bc reply: xprt=%p, xid=%08x\n",
|
||||
xprt, be32_to_cpu(xid));
|
||||
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
|
@ -129,10 +128,6 @@ static int svc_rdma_bc_sendto(struct svcxprt_rdma *rdma,
|
|||
if (ret < 0)
|
||||
goto out_err;
|
||||
|
||||
ret = svc_rdma_repost_recv(rdma, GFP_NOIO);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
|
||||
/* Bump page refcnt so Send completion doesn't release
|
||||
* the rq_buffer before all retransmits are complete.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -400,10 +400,6 @@ static void svc_rdma_send_error(struct svcxprt_rdma *xprt,
|
|||
struct page *page;
|
||||
int ret;
|
||||
|
||||
ret = svc_rdma_repost_recv(xprt, GFP_KERNEL);
|
||||
if (ret)
|
||||
return;
|
||||
|
||||
page = alloc_page(GFP_KERNEL);
|
||||
if (!page)
|
||||
return;
|
||||
|
|
@ -554,8 +550,6 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp)
|
|||
ret = svc_rdma_handle_bc_reply(xprt->xpt_bc_xprt, p,
|
||||
&rqstp->rq_arg);
|
||||
svc_rdma_put_context(ctxt, 0);
|
||||
if (ret)
|
||||
goto repost;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -590,6 +584,5 @@ out_postfail:
|
|||
|
||||
out_drop:
|
||||
svc_rdma_put_context(ctxt, 1);
|
||||
repost:
|
||||
return svc_rdma_repost_recv(rdma_xprt, GFP_KERNEL);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -727,12 +727,16 @@ static int svc_rdma_build_normal_read_chunk(struct svc_rqst *rqstp,
|
|||
head->arg.head[0].iov_len - info->ri_position;
|
||||
head->arg.head[0].iov_len = info->ri_position;
|
||||
|
||||
/* Read chunk may need XDR roundup (see RFC 5666, s. 3.7).
|
||||
/* Read chunk may need XDR roundup (see RFC 8166, s. 3.4.5.2).
|
||||
*
|
||||
* NFSv2/3 write decoders need the length of the tail to
|
||||
* contain the size of the roundup padding.
|
||||
* If the client already rounded up the chunk length, the
|
||||
* length does not change. Otherwise, the length of the page
|
||||
* list is increased to include XDR round-up.
|
||||
*
|
||||
* Currently these chunks always start at page offset 0,
|
||||
* thus the rounded-up length never crosses a page boundary.
|
||||
*/
|
||||
head->arg.tail[0].iov_len += 4 - (info->ri_chunklen & 3);
|
||||
info->ri_chunklen = XDR_QUADLEN(info->ri_chunklen) << 2;
|
||||
|
||||
head->arg.page_len = info->ri_chunklen;
|
||||
head->arg.len += info->ri_chunklen;
|
||||
|
|
|
|||
|
|
@ -674,9 +674,6 @@ int svc_rdma_sendto(struct svc_rqst *rqstp)
|
|||
svc_rdma_xdr_encode_reply_chunk(rdma_resp, rp_ch, ret);
|
||||
}
|
||||
|
||||
ret = svc_rdma_post_recv(rdma, GFP_KERNEL);
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = svc_rdma_send_reply_msg(rdma, rdma_argp, rdma_resp, rqstp,
|
||||
wr_lst, rp_ch);
|
||||
if (ret < 0)
|
||||
|
|
@ -687,9 +684,6 @@ int svc_rdma_sendto(struct svc_rqst *rqstp)
|
|||
if (ret != -E2BIG && ret != -EINVAL)
|
||||
goto err1;
|
||||
|
||||
ret = svc_rdma_post_recv(rdma, GFP_KERNEL);
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = svc_rdma_send_error_msg(rdma, rdma_resp, rqstp);
|
||||
if (ret < 0)
|
||||
goto err0;
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
|
||||
#define RPCDBG_FACILITY RPCDBG_SVCXPRT
|
||||
|
||||
static int svc_rdma_post_recv(struct svcxprt_rdma *xprt);
|
||||
static struct svcxprt_rdma *rdma_create_xprt(struct svc_serv *, int);
|
||||
static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
|
||||
struct net *net,
|
||||
|
|
@ -320,6 +321,8 @@ static void svc_rdma_wc_receive(struct ib_cq *cq, struct ib_wc *wc)
|
|||
list_add_tail(&ctxt->list, &xprt->sc_rq_dto_q);
|
||||
spin_unlock(&xprt->sc_rq_dto_lock);
|
||||
|
||||
svc_rdma_post_recv(xprt);
|
||||
|
||||
set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags);
|
||||
if (test_bit(RDMAXPRT_CONN_PENDING, &xprt->sc_flags))
|
||||
goto out;
|
||||
|
|
@ -404,7 +407,8 @@ static struct svcxprt_rdma *rdma_create_xprt(struct svc_serv *serv,
|
|||
return cma_xprt;
|
||||
}
|
||||
|
||||
int svc_rdma_post_recv(struct svcxprt_rdma *xprt, gfp_t flags)
|
||||
static int
|
||||
svc_rdma_post_recv(struct svcxprt_rdma *xprt)
|
||||
{
|
||||
struct ib_recv_wr recv_wr, *bad_recv_wr;
|
||||
struct svc_rdma_op_ctxt *ctxt;
|
||||
|
|
@ -423,7 +427,7 @@ int svc_rdma_post_recv(struct svcxprt_rdma *xprt, gfp_t flags)
|
|||
pr_err("svcrdma: Too many sges (%d)\n", sge_no);
|
||||
goto err_put_ctxt;
|
||||
}
|
||||
page = alloc_page(flags);
|
||||
page = alloc_page(GFP_KERNEL);
|
||||
if (!page)
|
||||
goto err_put_ctxt;
|
||||
ctxt->pages[sge_no] = page;
|
||||
|
|
@ -459,21 +463,6 @@ int svc_rdma_post_recv(struct svcxprt_rdma *xprt, gfp_t flags)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
int svc_rdma_repost_recv(struct svcxprt_rdma *xprt, gfp_t flags)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = svc_rdma_post_recv(xprt, flags);
|
||||
if (ret) {
|
||||
pr_err("svcrdma: could not post a receive buffer, err=%d.\n",
|
||||
ret);
|
||||
pr_err("svcrdma: closing transport %p.\n", xprt);
|
||||
set_bit(XPT_CLOSE, &xprt->sc_xprt.xpt_flags);
|
||||
ret = -ENOTCONN;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
svc_rdma_parse_connect_private(struct svcxprt_rdma *newxprt,
|
||||
struct rdma_conn_param *param)
|
||||
|
|
@ -833,7 +822,7 @@ static struct svc_xprt *svc_rdma_accept(struct svc_xprt *xprt)
|
|||
|
||||
/* Post receive buffers */
|
||||
for (i = 0; i < newxprt->sc_max_requests; i++) {
|
||||
ret = svc_rdma_post_recv(newxprt, GFP_KERNEL);
|
||||
ret = svc_rdma_post_recv(newxprt);
|
||||
if (ret) {
|
||||
dprintk("svcrdma: failure posting receive buffers\n");
|
||||
goto errout;
|
||||
|
|
|
|||
Loading…
Reference in a new issue