All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1486598713.11028.3.camel@primarydata.com>

diff --git a/a/1.txt b/N1/1.txt
index c1af693..19be940 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,89 +1,151 @@
-T24gV2VkLCAyMDE3LTAyLTA4IGF0IDE3OjAxIC0wNTAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4g
-QWxsb3cgUlBDLW92ZXItUkRNQSB0byBzZW5kIE5VTEwgcGluZ3MgZXZlbiB3aGVuIHRoZSB0cmFu
-c3BvcnQgaGFzDQo+IGhpdCBpdHMgY3JlZGl0IGxpbWl0LiBPbmUgUlBDLW92ZXItUkRNQSBjcmVk
-aXQgaXMgcmVzZXJ2ZWQgZm9yDQo+IG9wZXJhdGlvbnMgbGlrZSBrZWVwYWxpdmUuDQo+IA0KPiBG
-b3IgdHJhbnNwb3J0cyB0aGF0IGNvbnZleSBORlN2NCwgaXQgc2VlbXMgbGlrZSBsZWFzZSByZW5l
-d2FsIHdvdWxkDQo+IGFsc28gYmUgYSBjYW5kaWRhdGUgZm9yIHVzaW5nIGEgcHJpb3JpdHkgdHJh
-bnNwb3J0IHNsb3QuIEknZCBsaWtlIHRvDQo+IHNlZSBhIG1lY2hhbmlzbSBiZXR0ZXIgdGhhbiBS
-UENSRE1BX1BSSU9SSVRZIHRoYXQgY2FuIGVuc3VyZSBvbmx5DQo+IG9uZSBwcmlvcml0eSBvcGVy
-YXRpb24gaXMgaW4gdXNlIGF0IGEgdGltZS4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IENodWNrIExl
-dmVyIDxjaHVjay5sZXZlckBvcmFjbGUuY29tPg0KPiAtLS0NCj4gwqBpbmNsdWRlL2xpbnV4L3N1
-bnJwYy9zY2hlZC5owqDCoMKgwqB8wqDCoMKgwqAyICsrDQo+IMKgbmV0L3N1bnJwYy94cHJ0LmPC
-oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqA0ICsrKysNCj4gwqBuZXQvc3Vu
-cnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jIHzCoMKgwqDCoDMgKystDQo+IMKgbmV0L3N1bnJwYy94
-cHJ0cmRtYS92ZXJicy5jwqDCoMKgwqDCoHzCoMKgwqAxMyArKysrKysrKy0tLS0tDQo+IMKgNCBm
-aWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlm
-ZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgNCj4gYi9pbmNsdWRlL2xpbnV4
-L3N1bnJwYy9zY2hlZC5oDQo+IGluZGV4IDEzODIyZTYuLmZjZWExNTggMTAwNjQ0DQo+IC0tLSBh
-L2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgNCj4gKysrIGIvaW5jbHVkZS9saW51eC9zdW5y
-cGMvc2NoZWQuaA0KPiBAQCAtMTI3LDYgKzEyNyw3IEBAIHN0cnVjdCBycGNfdGFza19zZXR1cCB7
-DQo+IMKgI2RlZmluZSBSUENfVEFTS19USU1FT1VUCTB4MTAwMAkJLyogZmFpbCB3aXRoDQo+IEVU
-SU1FRE9VVCBvbiB0aW1lb3V0ICovDQo+IMKgI2RlZmluZSBSUENfVEFTS19OT0NPTk5FQ1QJMHgy
-MDAwCQkvKiByZXR1cm4NCj4gRU5PVENPTk4gaWYgbm90IGNvbm5lY3RlZCAqLw0KPiDCoCNkZWZp
-bmUgUlBDX1RBU0tfTk9fUkVUUkFOU19USU1FT1VUCTB4NDAwMAkJLyoNCj4gd2FpdCBmb3JldmVy
-IGZvciBhIHJlcGx5ICovDQo+ICsjZGVmaW5lIFJQQ19UQVNLX05PX0NPTkcJMHg4MDAwCQkvKiBz
-a2lwDQo+IGNvbmdlc3Rpb24gY29udHJvbCAqLw0KPiDCoA0KPiDCoCNkZWZpbmUgUlBDX1RBU0tf
-U09GVFBJTkcJKFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19TT0ZUQ09OTikNCj4gwqANCj4gQEAg
-LTEzNyw2ICsxMzgsNyBAQCBzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgew0KPiDCoCNkZWZpbmUgUlBD
-X0lTX1NPRlQodCkJCSgodCktPnRrX2ZsYWdzICYNCj4gKFJQQ19UQVNLX1NPRlR8UlBDX1RBU0tf
-VElNRU9VVCkpDQo+IMKgI2RlZmluZSBSUENfSVNfU09GVENPTk4odCkJKCh0KS0+dGtfZmxhZ3Mg
-Jg0KPiBSUENfVEFTS19TT0ZUQ09OTikNCj4gwqAjZGVmaW5lIFJQQ19XQVNfU0VOVCh0KQkJKCh0
-KS0+dGtfZmxhZ3MgJg0KPiBSUENfVEFTS19TRU5UKQ0KPiArI2RlZmluZSBSUENfU0tJUF9DT05H
-KHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfTk9fQ09ORykNCj4gwqANCj4gwqAjZGVmaW5l
-IFJQQ19UQVNLX1JVTk5JTkcJMA0KPiDCoCNkZWZpbmUgUlBDX1RBU0tfUVVFVUVECQkxDQo+IGRp
-ZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jDQo+IGluZGV4
-IGI1MzBhMjguLmE0NzdlZTYgMTAwNjQ0DQo+IC0tLSBhL25ldC9zdW5ycGMveHBydC5jDQo+ICsr
-KyBiL25ldC9zdW5ycGMveHBydC5jDQo+IEBAIC0zOTIsNiArMzkyLDEwIEBAIHN0YXRpYyBpbmxp
-bmUgdm9pZCB4cHJ0X3JlbGVhc2Vfd3JpdGUoc3RydWN0DQo+IHJwY194cHJ0ICp4cHJ0LCBzdHJ1
-Y3QgcnBjX3Rhc2sgKnRhDQo+IMKgew0KPiDCoAlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2st
-PnRrX3Jxc3RwOw0KPiDCoA0KPiArCWlmIChSUENfU0tJUF9DT05HKHRhc2spKSB7DQo+ICsJCXJl
-cS0+cnFfY29uZyA9IDA7DQo+ICsJCXJldHVybiAxOw0KPiArCX0NCg0KV2h5IG5vdCBqdXN0IGhh
-dmUgdGhlIFJETUEgbGF5ZXIgY2FsbCB4cHJ0X3Jlc2VydmVfeHBydCgpIChhbmQNCnhwcnRfcmVs
-ZWFzZV94cHJ0KCkpIGlmIHRoaXMgZmxhZyBpcyBzZXQ/IEl0IHNlZW1zIHRvIG1lIHRoYXQgeW91
-IHdpbGwNCm5lZWQgc29tZSBraW5kIG9mIGV4dHJhIGNvbmdlc3Rpb24gY29udHJvbCBpbiB0aGUg
-UkRNQSBsYXllciBhbnl3YXkNCnNpbmNlIHlvdSBvbmx5IGhhdmUgb25lIHJlc2VydmVkIGNyZWRp
-dCBmb3IgdGhlc2UgcHJpdmlsZWdlZCB0YXNrcyAob3INCmRpZCBJIG1pc3Mgd2hlcmUgdGhhdCBp
-cyBiZWluZyBnYXRlZD8pLg0KDQo+IMKgCWlmIChyZXEtPnJxX2NvbmcpDQo+IMKgCQlyZXR1cm4g
-MTsNCj4gwqAJZHByaW50aygiUlBDOiAlNXUgeHBydF9jd25kX2xpbWl0ZWQgY29uZyA9ICVsdSBj
-d25kID0NCj4gJWx1XG4iLA0KPiBkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFu
-c3BvcnQuYw0KPiBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMNCj4gaW5kZXggM2E1
-YTgwNS4uMDczZmVjZCAxMDA2NDQNCj4gLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3Bv
-cnQuYw0KPiArKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jDQo+IEBAIC01NDYs
-NyArNTQ2LDggQEAgc3RhdGljIHZvaWQgcnBjcmRtYV9rZWVwYWxpdmVfcmVsZWFzZSh2b2lkDQo+
-ICpjYWxsZGF0YSkNCj4gwqANCj4gwqAJZGF0YSA9IHhwcnRfZ2V0KHhwcnQpOw0KPiDCoAludWxs
-X3Rhc2sgPSBycGNfY2FsbF9udWxsX2hlbHBlcih0YXNrLT50a19jbGllbnQsIHhwcnQsDQo+IE5V
-TEwsDQo+IC0JCQkJCcKgUlBDX1RBU0tfU09GVFBJTkcgfA0KPiBSUENfVEFTS19BU1lOQywNCj4g
-KwkJCQkJwqBSUENfVEFTS19TT0ZUUElORyB8DQo+IFJQQ19UQVNLX0FTWU5DIHwNCj4gKwkJCQkJ
-wqBSUENfVEFTS19OT19DT05HLA0KPiDCoAkJCQkJwqAmcnBjcmRtYV9rZWVwYWxpdmVfY2FsbF9v
-cHMNCj4gLCBkYXRhKTsNCj4gwqAJaWYgKCFJU19FUlIobnVsbF90YXNrKSkNCj4gwqAJCXJwY19w
-dXRfdGFzayhudWxsX3Rhc2spOw0KPiBkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92
-ZXJicy5jDQo+IGIvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jDQo+IGluZGV4IDgxY2QzMWEu
-LmQ5YjVmYTcgMTAwNjQ0DQo+IC0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYw0KPiAr
-KysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMNCj4gQEAgLTEzNiwxOSArMTM2LDIwIEBA
-DQo+IMKgc3RhdGljIHZvaWQNCj4gwqBycGNyZG1hX3VwZGF0ZV9ncmFudGVkX2NyZWRpdHMoc3Ry
-dWN0IHJwY3JkbWFfcmVwICpyZXApDQo+IMKgew0KPiAtCXN0cnVjdCBycGNyZG1hX21zZyAqcm1z
-Z3AgPSByZG1hYl90b19tc2cocmVwLT5ycl9yZG1hYnVmKTsNCj4gwqAJc3RydWN0IHJwY3JkbWFf
-YnVmZmVyICpidWZmZXIgPSAmcmVwLT5ycl9yeHBydC0+cnhfYnVmOw0KPiArCV9fYmUzMiAqcCA9
-IHJlcC0+cnJfcmRtYWJ1Zi0+cmdfYmFzZTsNCj4gwqAJdTMyIGNyZWRpdHM7DQo+IMKgDQo+IMKg
-CWlmIChyZXAtPnJyX2xlbiA8IFJQQ1JETUFfSERSTEVOX0VSUikNCj4gwqAJCXJldHVybjsNCj4g
-wqANCj4gLQljcmVkaXRzID0gYmUzMl90b19jcHUocm1zZ3AtPnJtX2NyZWRpdCk7DQo+ICsJY3Jl
-ZGl0cyA9IGJlMzJfdG9fY3B1cChwICsgMik7DQo+ICsJaWYgKGNyZWRpdHMgPiBidWZmZXItPnJi
-X21heF9yZXF1ZXN0cykNCj4gKwkJY3JlZGl0cyA9IGJ1ZmZlci0+cmJfbWF4X3JlcXVlc3RzOw0K
-PiArCS8qIFJlc2VydmUgb25lIGNyZWRpdCBmb3Iga2VlcGFsaXZlIHBpbmcgKi8NCj4gKwljcmVk
-aXRzLS07DQo+IMKgCWlmIChjcmVkaXRzID09IDApDQo+IMKgCQljcmVkaXRzID0gMTsJLyogZG9u
-J3QgZGVhZGxvY2sgKi8NCj4gLQllbHNlIGlmIChjcmVkaXRzID4gYnVmZmVyLT5yYl9tYXhfcmVx
-dWVzdHMpDQo+IC0JCWNyZWRpdHMgPSBidWZmZXItPnJiX21heF9yZXF1ZXN0czsNCj4gLQ0KPiDC
-oAlhdG9taWNfc2V0KCZidWZmZXItPnJiX2NyZWRpdHMsIGNyZWRpdHMpOw0KPiDCoH0NCj4gwqAN
-Cj4gQEAgLTkxNSw2ICs5MTYsOCBAQCBzdHJ1Y3QgcnBjcmRtYV9yZXAgKg0KPiDCoAlzdHJ1Y3Qg
-cnBjcmRtYV9idWZmZXIgKmJ1ZiA9ICZyX3hwcnQtPnJ4X2J1ZjsNCj4gwqAJaW50IGksIHJjOw0K
-PiDCoA0KPiArCWlmIChyX3hwcnQtPnJ4X2RhdGEubWF4X3JlcXVlc3RzIDwgMikNCj4gKwkJcmV0
-dXJuIC1FSU5WQUw7DQo+IMKgCWJ1Zi0+cmJfbWF4X3JlcXVlc3RzID0gcl94cHJ0LT5yeF9kYXRh
-Lm1heF9yZXF1ZXN0czsNCj4gwqAJYnVmLT5yYl9iY19zcnZfbWF4X3JlcXVlc3RzID0gMDsNCj4g
-wqAJYXRvbWljX3NldCgmYnVmLT5yYl9jcmVkaXRzLCAxKTsNCj4gDQo+IC0tDQo+IFRvIHVuc3Vi
-c2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC1u
-ZnMiDQo+IGluDQo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJu
-ZWwub3JnDQo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXTCoMKgaHR0cDovL3ZnZXIua2VybmVsLm9y
-Zy9tYWpvcmRvbW8taW5mby5odG1sDQo+IA0KLS0gDQoNCg0KCQ0KCQ0KDQoNClRyb25kIE15a2xl
-YnVzdA0KUHJpbmNpcGFsIFN5c3RlbSBBcmNoaXRlY3QNCjQzMDAgRWwgQ2FtaW5vIFJlYWwgfCBT
-dWl0ZSAxMDANCkxvcyBBbHRvcywgQ0HCoMKgOTQwMjINClc6IDY1MC00MjItMzgwMA0KQzogODAx
-LTkyMS00NTgzwqANCnd3dy5wcmltYXJ5ZGF0YS5jb20NCg0KDQoNCg==
+On Wed, 2017-02-08 at 17:01 -0500, Chuck Lever wrote:
+> Allow RPC-over-RDMA to send NULL pings even when the transport has
+> hit its credit limit. One RPC-over-RDMA credit is reserved for
+> operations like keepalive.
+> 
+> For transports that convey NFSv4, it seems like lease renewal would
+> also be a candidate for using a priority transport slot. I'd like to
+> see a mechanism better than RPCRDMA_PRIORITY that can ensure only
+> one priority operation is in use at a time.
+> 
+> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+> ---
+>  include/linux/sunrpc/sched.h    |    2 ++
+>  net/sunrpc/xprt.c               |    4 ++++
+>  net/sunrpc/xprtrdma/transport.c |    3 ++-
+>  net/sunrpc/xprtrdma/verbs.c     |   13 ++++++++-----
+>  4 files changed, 16 insertions(+), 6 deletions(-)
+> 
+> diff --git a/include/linux/sunrpc/sched.h
+> b/include/linux/sunrpc/sched.h
+> index 13822e6..fcea158 100644
+> --- a/include/linux/sunrpc/sched.h
+> +++ b/include/linux/sunrpc/sched.h
+> @@ -127,6 +127,7 @@ struct rpc_task_setup {
+>  #define RPC_TASK_TIMEOUT	0x1000		/* fail with
+> ETIMEDOUT on timeout */
+>  #define RPC_TASK_NOCONNECT	0x2000		/* return
+> ENOTCONN if not connected */
+>  #define RPC_TASK_NO_RETRANS_TIMEOUT	0x4000		/*
+> wait forever for a reply */
+> +#define RPC_TASK_NO_CONG	0x8000		/* skip
+> congestion control */
+>  
+>  #define RPC_TASK_SOFTPING	(RPC_TASK_SOFT | RPC_TASK_SOFTCONN)
+>  
+> @@ -137,6 +138,7 @@ struct rpc_task_setup {
+>  #define RPC_IS_SOFT(t)		((t)->tk_flags &
+> (RPC_TASK_SOFT|RPC_TASK_TIMEOUT))
+>  #define RPC_IS_SOFTCONN(t)	((t)->tk_flags &
+> RPC_TASK_SOFTCONN)
+>  #define RPC_WAS_SENT(t)		((t)->tk_flags &
+> RPC_TASK_SENT)
+> +#define RPC_SKIP_CONG(t)	((t)->tk_flags & RPC_TASK_NO_CONG)
+>  
+>  #define RPC_TASK_RUNNING	0
+>  #define RPC_TASK_QUEUED		1
+> diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
+> index b530a28..a477ee6 100644
+> --- a/net/sunrpc/xprt.c
+> +++ b/net/sunrpc/xprt.c
+> @@ -392,6 +392,10 @@ static inline void xprt_release_write(struct
+> rpc_xprt *xprt, struct rpc_task *ta
+>  {
+>  	struct rpc_rqst *req = task->tk_rqstp;
+>  
+> +	if (RPC_SKIP_CONG(task)) {
+> +		req->rq_cong = 0;
+> +		return 1;
+> +	}
+
+Why not just have the RDMA layer call xprt_reserve_xprt() (and
+xprt_release_xprt()) if this flag is set? It seems to me that you will
+need some kind of extra congestion control in the RDMA layer anyway
+since you only have one reserved credit for these privileged tasks (or
+did I miss where that is being gated?).
+
+>  	if (req->rq_cong)
+>  		return 1;
+>  	dprintk("RPC: %5u xprt_cwnd_limited cong = %lu cwnd =
+> %lu\n",
+> diff --git a/net/sunrpc/xprtrdma/transport.c
+> b/net/sunrpc/xprtrdma/transport.c
+> index 3a5a805..073fecd 100644
+> --- a/net/sunrpc/xprtrdma/transport.c
+> +++ b/net/sunrpc/xprtrdma/transport.c
+> @@ -546,7 +546,8 @@ static void rpcrdma_keepalive_release(void
+> *calldata)
+>  
+>  	data = xprt_get(xprt);
+>  	null_task = rpc_call_null_helper(task->tk_client, xprt,
+> NULL,
+> -					 RPC_TASK_SOFTPING |
+> RPC_TASK_ASYNC,
+> +					 RPC_TASK_SOFTPING |
+> RPC_TASK_ASYNC |
+> +					 RPC_TASK_NO_CONG,
+>  					 &rpcrdma_keepalive_call_ops
+> , data);
+>  	if (!IS_ERR(null_task))
+>  		rpc_put_task(null_task);
+> diff --git a/net/sunrpc/xprtrdma/verbs.c
+> b/net/sunrpc/xprtrdma/verbs.c
+> index 81cd31a..d9b5fa7 100644
+> --- a/net/sunrpc/xprtrdma/verbs.c
+> +++ b/net/sunrpc/xprtrdma/verbs.c
+> @@ -136,19 +136,20 @@
+>  static void
+>  rpcrdma_update_granted_credits(struct rpcrdma_rep *rep)
+>  {
+> -	struct rpcrdma_msg *rmsgp = rdmab_to_msg(rep->rr_rdmabuf);
+>  	struct rpcrdma_buffer *buffer = &rep->rr_rxprt->rx_buf;
+> +	__be32 *p = rep->rr_rdmabuf->rg_base;
+>  	u32 credits;
+>  
+>  	if (rep->rr_len < RPCRDMA_HDRLEN_ERR)
+>  		return;
+>  
+> -	credits = be32_to_cpu(rmsgp->rm_credit);
+> +	credits = be32_to_cpup(p + 2);
+> +	if (credits > buffer->rb_max_requests)
+> +		credits = buffer->rb_max_requests;
+> +	/* Reserve one credit for keepalive ping */
+> +	credits--;
+>  	if (credits == 0)
+>  		credits = 1;	/* don't deadlock */
+> -	else if (credits > buffer->rb_max_requests)
+> -		credits = buffer->rb_max_requests;
+> -
+>  	atomic_set(&buffer->rb_credits, credits);
+>  }
+>  
+> @@ -915,6 +916,8 @@ struct rpcrdma_rep *
+>  	struct rpcrdma_buffer *buf = &r_xprt->rx_buf;
+>  	int i, rc;
+>  
+> +	if (r_xprt->rx_data.max_requests < 2)
+> +		return -EINVAL;
+>  	buf->rb_max_requests = r_xprt->rx_data.max_requests;
+>  	buf->rb_bc_srv_max_requests = 0;
+>  	atomic_set(&buf->rb_credits, 1);
+> 
+> --
+> To unsubscribe from this list: send the line "unsubscribe linux-nfs"
+> in
+> the body of a message to majordomo@vger.kernel.org
+> More majordomo info at  http://vger.kernel.org/majordomo-info.html
+> 
+-- 
+
+
+	
+	
+
+
+Trond Myklebust
+Principal System Architect
+4300 El Camino Real | Suite 100
+Los Altos, CA  94022
+W: 650-422-3800
+C: 801-921-4583 
+www.primarydata.com
diff --git a/a/content_digest b/N1/content_digest
index f671a27..a43c7ab 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,102 +1,165 @@
  "ref\020170208214854.7152.83331.stgit@manet.1015granger.net\0"
  "ref\020170208220116.7152.87626.stgit@manet.1015granger.net\0"
- "From\0Trond Myklebust <trondmy@primarydata.com>\0"
+ "ref\020170208220116.7152.87626.stgit-FYjufvaPoItvLzlybtyyYzGyq/o6K9yX@public.gmane.org\0"
+ "From\0Trond Myklebust <trondmy-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>\0"
  "Subject\0Re: [PATCH v3 12/12] sunrpc: Allow keepalive ping on a credit-full transport\0"
  "Date\0Thu, 9 Feb 2017 00:05:16 +0000\0"
- "To\0anna.schumaker@netapp.com <anna.schumaker@netapp.com>"
- " chuck.lever@oracle.com <chuck.lever@oracle.com>\0"
- "Cc\0linux-rdma@vger.kernel.org <linux-rdma@vger.kernel.org>"
- " linux-nfs@vger.kernel.org <linux-nfs@vger.kernel.org>\0"
+ "To\0anna.schumaker-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org <anna.schumaker-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org>"
+ " chuck.lever-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org <chuck.lever-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>\0"
+ "Cc\0linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>"
+ " linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org <linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>\0"
  "\00:1\0"
  "b\0"
- "T24gV2VkLCAyMDE3LTAyLTA4IGF0IDE3OjAxIC0wNTAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4g\n"
- "QWxsb3cgUlBDLW92ZXItUkRNQSB0byBzZW5kIE5VTEwgcGluZ3MgZXZlbiB3aGVuIHRoZSB0cmFu\n"
- "c3BvcnQgaGFzDQo+IGhpdCBpdHMgY3JlZGl0IGxpbWl0LiBPbmUgUlBDLW92ZXItUkRNQSBjcmVk\n"
- "aXQgaXMgcmVzZXJ2ZWQgZm9yDQo+IG9wZXJhdGlvbnMgbGlrZSBrZWVwYWxpdmUuDQo+IA0KPiBG\n"
- "b3IgdHJhbnNwb3J0cyB0aGF0IGNvbnZleSBORlN2NCwgaXQgc2VlbXMgbGlrZSBsZWFzZSByZW5l\n"
- "d2FsIHdvdWxkDQo+IGFsc28gYmUgYSBjYW5kaWRhdGUgZm9yIHVzaW5nIGEgcHJpb3JpdHkgdHJh\n"
- "bnNwb3J0IHNsb3QuIEknZCBsaWtlIHRvDQo+IHNlZSBhIG1lY2hhbmlzbSBiZXR0ZXIgdGhhbiBS\n"
- "UENSRE1BX1BSSU9SSVRZIHRoYXQgY2FuIGVuc3VyZSBvbmx5DQo+IG9uZSBwcmlvcml0eSBvcGVy\n"
- "YXRpb24gaXMgaW4gdXNlIGF0IGEgdGltZS4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IENodWNrIExl\n"
- "dmVyIDxjaHVjay5sZXZlckBvcmFjbGUuY29tPg0KPiAtLS0NCj4gwqBpbmNsdWRlL2xpbnV4L3N1\n"
- "bnJwYy9zY2hlZC5owqDCoMKgwqB8wqDCoMKgwqAyICsrDQo+IMKgbmV0L3N1bnJwYy94cHJ0LmPC\n"
- "oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqA0ICsrKysNCj4gwqBuZXQvc3Vu\n"
- "cnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jIHzCoMKgwqDCoDMgKystDQo+IMKgbmV0L3N1bnJwYy94\n"
- "cHJ0cmRtYS92ZXJicy5jwqDCoMKgwqDCoHzCoMKgwqAxMyArKysrKysrKy0tLS0tDQo+IMKgNCBm\n"
- "aWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlm\n"
- "ZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgNCj4gYi9pbmNsdWRlL2xpbnV4\n"
- "L3N1bnJwYy9zY2hlZC5oDQo+IGluZGV4IDEzODIyZTYuLmZjZWExNTggMTAwNjQ0DQo+IC0tLSBh\n"
- "L2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgNCj4gKysrIGIvaW5jbHVkZS9saW51eC9zdW5y\n"
- "cGMvc2NoZWQuaA0KPiBAQCAtMTI3LDYgKzEyNyw3IEBAIHN0cnVjdCBycGNfdGFza19zZXR1cCB7\n"
- "DQo+IMKgI2RlZmluZSBSUENfVEFTS19USU1FT1VUCTB4MTAwMAkJLyogZmFpbCB3aXRoDQo+IEVU\n"
- "SU1FRE9VVCBvbiB0aW1lb3V0ICovDQo+IMKgI2RlZmluZSBSUENfVEFTS19OT0NPTk5FQ1QJMHgy\n"
- "MDAwCQkvKiByZXR1cm4NCj4gRU5PVENPTk4gaWYgbm90IGNvbm5lY3RlZCAqLw0KPiDCoCNkZWZp\n"
- "bmUgUlBDX1RBU0tfTk9fUkVUUkFOU19USU1FT1VUCTB4NDAwMAkJLyoNCj4gd2FpdCBmb3JldmVy\n"
- "IGZvciBhIHJlcGx5ICovDQo+ICsjZGVmaW5lIFJQQ19UQVNLX05PX0NPTkcJMHg4MDAwCQkvKiBz\n"
- "a2lwDQo+IGNvbmdlc3Rpb24gY29udHJvbCAqLw0KPiDCoA0KPiDCoCNkZWZpbmUgUlBDX1RBU0tf\n"
- "U09GVFBJTkcJKFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19TT0ZUQ09OTikNCj4gwqANCj4gQEAg\n"
- "LTEzNyw2ICsxMzgsNyBAQCBzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgew0KPiDCoCNkZWZpbmUgUlBD\n"
- "X0lTX1NPRlQodCkJCSgodCktPnRrX2ZsYWdzICYNCj4gKFJQQ19UQVNLX1NPRlR8UlBDX1RBU0tf\n"
- "VElNRU9VVCkpDQo+IMKgI2RlZmluZSBSUENfSVNfU09GVENPTk4odCkJKCh0KS0+dGtfZmxhZ3Mg\n"
- "Jg0KPiBSUENfVEFTS19TT0ZUQ09OTikNCj4gwqAjZGVmaW5lIFJQQ19XQVNfU0VOVCh0KQkJKCh0\n"
- "KS0+dGtfZmxhZ3MgJg0KPiBSUENfVEFTS19TRU5UKQ0KPiArI2RlZmluZSBSUENfU0tJUF9DT05H\n"
- "KHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfTk9fQ09ORykNCj4gwqANCj4gwqAjZGVmaW5l\n"
- "IFJQQ19UQVNLX1JVTk5JTkcJMA0KPiDCoCNkZWZpbmUgUlBDX1RBU0tfUVVFVUVECQkxDQo+IGRp\n"
- "ZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jDQo+IGluZGV4\n"
- "IGI1MzBhMjguLmE0NzdlZTYgMTAwNjQ0DQo+IC0tLSBhL25ldC9zdW5ycGMveHBydC5jDQo+ICsr\n"
- "KyBiL25ldC9zdW5ycGMveHBydC5jDQo+IEBAIC0zOTIsNiArMzkyLDEwIEBAIHN0YXRpYyBpbmxp\n"
- "bmUgdm9pZCB4cHJ0X3JlbGVhc2Vfd3JpdGUoc3RydWN0DQo+IHJwY194cHJ0ICp4cHJ0LCBzdHJ1\n"
- "Y3QgcnBjX3Rhc2sgKnRhDQo+IMKgew0KPiDCoAlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2st\n"
- "PnRrX3Jxc3RwOw0KPiDCoA0KPiArCWlmIChSUENfU0tJUF9DT05HKHRhc2spKSB7DQo+ICsJCXJl\n"
- "cS0+cnFfY29uZyA9IDA7DQo+ICsJCXJldHVybiAxOw0KPiArCX0NCg0KV2h5IG5vdCBqdXN0IGhh\n"
- "dmUgdGhlIFJETUEgbGF5ZXIgY2FsbCB4cHJ0X3Jlc2VydmVfeHBydCgpIChhbmQNCnhwcnRfcmVs\n"
- "ZWFzZV94cHJ0KCkpIGlmIHRoaXMgZmxhZyBpcyBzZXQ/IEl0IHNlZW1zIHRvIG1lIHRoYXQgeW91\n"
- "IHdpbGwNCm5lZWQgc29tZSBraW5kIG9mIGV4dHJhIGNvbmdlc3Rpb24gY29udHJvbCBpbiB0aGUg\n"
- "UkRNQSBsYXllciBhbnl3YXkNCnNpbmNlIHlvdSBvbmx5IGhhdmUgb25lIHJlc2VydmVkIGNyZWRp\n"
- "dCBmb3IgdGhlc2UgcHJpdmlsZWdlZCB0YXNrcyAob3INCmRpZCBJIG1pc3Mgd2hlcmUgdGhhdCBp\n"
- "cyBiZWluZyBnYXRlZD8pLg0KDQo+IMKgCWlmIChyZXEtPnJxX2NvbmcpDQo+IMKgCQlyZXR1cm4g\n"
- "MTsNCj4gwqAJZHByaW50aygiUlBDOiAlNXUgeHBydF9jd25kX2xpbWl0ZWQgY29uZyA9ICVsdSBj\n"
- "d25kID0NCj4gJWx1XG4iLA0KPiBkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFu\n"
- "c3BvcnQuYw0KPiBiL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMNCj4gaW5kZXggM2E1\n"
- "YTgwNS4uMDczZmVjZCAxMDA2NDQNCj4gLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3Bv\n"
- "cnQuYw0KPiArKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jDQo+IEBAIC01NDYs\n"
- "NyArNTQ2LDggQEAgc3RhdGljIHZvaWQgcnBjcmRtYV9rZWVwYWxpdmVfcmVsZWFzZSh2b2lkDQo+\n"
- "ICpjYWxsZGF0YSkNCj4gwqANCj4gwqAJZGF0YSA9IHhwcnRfZ2V0KHhwcnQpOw0KPiDCoAludWxs\n"
- "X3Rhc2sgPSBycGNfY2FsbF9udWxsX2hlbHBlcih0YXNrLT50a19jbGllbnQsIHhwcnQsDQo+IE5V\n"
- "TEwsDQo+IC0JCQkJCcKgUlBDX1RBU0tfU09GVFBJTkcgfA0KPiBSUENfVEFTS19BU1lOQywNCj4g\n"
- "KwkJCQkJwqBSUENfVEFTS19TT0ZUUElORyB8DQo+IFJQQ19UQVNLX0FTWU5DIHwNCj4gKwkJCQkJ\n"
- "wqBSUENfVEFTS19OT19DT05HLA0KPiDCoAkJCQkJwqAmcnBjcmRtYV9rZWVwYWxpdmVfY2FsbF9v\n"
- "cHMNCj4gLCBkYXRhKTsNCj4gwqAJaWYgKCFJU19FUlIobnVsbF90YXNrKSkNCj4gwqAJCXJwY19w\n"
- "dXRfdGFzayhudWxsX3Rhc2spOw0KPiBkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92\n"
- "ZXJicy5jDQo+IGIvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jDQo+IGluZGV4IDgxY2QzMWEu\n"
- "LmQ5YjVmYTcgMTAwNjQ0DQo+IC0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYw0KPiAr\n"
- "KysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMNCj4gQEAgLTEzNiwxOSArMTM2LDIwIEBA\n"
- "DQo+IMKgc3RhdGljIHZvaWQNCj4gwqBycGNyZG1hX3VwZGF0ZV9ncmFudGVkX2NyZWRpdHMoc3Ry\n"
- "dWN0IHJwY3JkbWFfcmVwICpyZXApDQo+IMKgew0KPiAtCXN0cnVjdCBycGNyZG1hX21zZyAqcm1z\n"
- "Z3AgPSByZG1hYl90b19tc2cocmVwLT5ycl9yZG1hYnVmKTsNCj4gwqAJc3RydWN0IHJwY3JkbWFf\n"
- "YnVmZmVyICpidWZmZXIgPSAmcmVwLT5ycl9yeHBydC0+cnhfYnVmOw0KPiArCV9fYmUzMiAqcCA9\n"
- "IHJlcC0+cnJfcmRtYWJ1Zi0+cmdfYmFzZTsNCj4gwqAJdTMyIGNyZWRpdHM7DQo+IMKgDQo+IMKg\n"
- "CWlmIChyZXAtPnJyX2xlbiA8IFJQQ1JETUFfSERSTEVOX0VSUikNCj4gwqAJCXJldHVybjsNCj4g\n"
- "wqANCj4gLQljcmVkaXRzID0gYmUzMl90b19jcHUocm1zZ3AtPnJtX2NyZWRpdCk7DQo+ICsJY3Jl\n"
- "ZGl0cyA9IGJlMzJfdG9fY3B1cChwICsgMik7DQo+ICsJaWYgKGNyZWRpdHMgPiBidWZmZXItPnJi\n"
- "X21heF9yZXF1ZXN0cykNCj4gKwkJY3JlZGl0cyA9IGJ1ZmZlci0+cmJfbWF4X3JlcXVlc3RzOw0K\n"
- "PiArCS8qIFJlc2VydmUgb25lIGNyZWRpdCBmb3Iga2VlcGFsaXZlIHBpbmcgKi8NCj4gKwljcmVk\n"
- "aXRzLS07DQo+IMKgCWlmIChjcmVkaXRzID09IDApDQo+IMKgCQljcmVkaXRzID0gMTsJLyogZG9u\n"
- "J3QgZGVhZGxvY2sgKi8NCj4gLQllbHNlIGlmIChjcmVkaXRzID4gYnVmZmVyLT5yYl9tYXhfcmVx\n"
- "dWVzdHMpDQo+IC0JCWNyZWRpdHMgPSBidWZmZXItPnJiX21heF9yZXF1ZXN0czsNCj4gLQ0KPiDC\n"
- "oAlhdG9taWNfc2V0KCZidWZmZXItPnJiX2NyZWRpdHMsIGNyZWRpdHMpOw0KPiDCoH0NCj4gwqAN\n"
- "Cj4gQEAgLTkxNSw2ICs5MTYsOCBAQCBzdHJ1Y3QgcnBjcmRtYV9yZXAgKg0KPiDCoAlzdHJ1Y3Qg\n"
- "cnBjcmRtYV9idWZmZXIgKmJ1ZiA9ICZyX3hwcnQtPnJ4X2J1ZjsNCj4gwqAJaW50IGksIHJjOw0K\n"
- "PiDCoA0KPiArCWlmIChyX3hwcnQtPnJ4X2RhdGEubWF4X3JlcXVlc3RzIDwgMikNCj4gKwkJcmV0\n"
- "dXJuIC1FSU5WQUw7DQo+IMKgCWJ1Zi0+cmJfbWF4X3JlcXVlc3RzID0gcl94cHJ0LT5yeF9kYXRh\n"
- "Lm1heF9yZXF1ZXN0czsNCj4gwqAJYnVmLT5yYl9iY19zcnZfbWF4X3JlcXVlc3RzID0gMDsNCj4g\n"
- "wqAJYXRvbWljX3NldCgmYnVmLT5yYl9jcmVkaXRzLCAxKTsNCj4gDQo+IC0tDQo+IFRvIHVuc3Vi\n"
- "c2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC1u\n"
- "ZnMiDQo+IGluDQo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJu\n"
- "ZWwub3JnDQo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXTCoMKgaHR0cDovL3ZnZXIua2VybmVsLm9y\n"
- "Zy9tYWpvcmRvbW8taW5mby5odG1sDQo+IA0KLS0gDQoNCg0KCQ0KCQ0KDQoNClRyb25kIE15a2xl\n"
- "YnVzdA0KUHJpbmNpcGFsIFN5c3RlbSBBcmNoaXRlY3QNCjQzMDAgRWwgQ2FtaW5vIFJlYWwgfCBT\n"
- "dWl0ZSAxMDANCkxvcyBBbHRvcywgQ0HCoMKgOTQwMjINClc6IDY1MC00MjItMzgwMA0KQzogODAx\n"
- LTkyMS00NTgzwqANCnd3dy5wcmltYXJ5ZGF0YS5jb20NCg0KDQoNCg==
+ "On Wed, 2017-02-08 at 17:01 -0500, Chuck Lever wrote:\n"
+ "> Allow RPC-over-RDMA to send NULL pings even when the transport has\n"
+ "> hit its credit limit. One RPC-over-RDMA credit is reserved for\n"
+ "> operations like keepalive.\n"
+ "> \n"
+ "> For transports that convey NFSv4, it seems like lease renewal would\n"
+ "> also be a candidate for using a priority transport slot. I'd like to\n"
+ "> see a mechanism better than RPCRDMA_PRIORITY that can ensure only\n"
+ "> one priority operation is in use at a time.\n"
+ "> \n"
+ "> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>\n"
+ "> ---\n"
+ "> \302\240include/linux/sunrpc/sched.h\302\240\302\240\302\240\302\240|\302\240\302\240\302\240\302\2402 ++\n"
+ "> \302\240net/sunrpc/xprt.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\240\302\240\302\2404 ++++\n"
+ "> \302\240net/sunrpc/xprtrdma/transport.c |\302\240\302\240\302\240\302\2403 ++-\n"
+ "> \302\240net/sunrpc/xprtrdma/verbs.c\302\240\302\240\302\240\302\240\302\240|\302\240\302\240\302\24013 ++++++++-----\n"
+ "> \302\2404 files changed, 16 insertions(+), 6 deletions(-)\n"
+ "> \n"
+ "> diff --git a/include/linux/sunrpc/sched.h\n"
+ "> b/include/linux/sunrpc/sched.h\n"
+ "> index 13822e6..fcea158 100644\n"
+ "> --- a/include/linux/sunrpc/sched.h\n"
+ "> +++ b/include/linux/sunrpc/sched.h\n"
+ "> @@ -127,6 +127,7 @@ struct rpc_task_setup {\n"
+ "> \302\240#define RPC_TASK_TIMEOUT\t0x1000\t\t/* fail with\n"
+ "> ETIMEDOUT on timeout */\n"
+ "> \302\240#define RPC_TASK_NOCONNECT\t0x2000\t\t/* return\n"
+ "> ENOTCONN if not connected */\n"
+ "> \302\240#define RPC_TASK_NO_RETRANS_TIMEOUT\t0x4000\t\t/*\n"
+ "> wait forever for a reply */\n"
+ "> +#define RPC_TASK_NO_CONG\t0x8000\t\t/* skip\n"
+ "> congestion control */\n"
+ "> \302\240\n"
+ "> \302\240#define RPC_TASK_SOFTPING\t(RPC_TASK_SOFT | RPC_TASK_SOFTCONN)\n"
+ "> \302\240\n"
+ "> @@ -137,6 +138,7 @@ struct rpc_task_setup {\n"
+ "> \302\240#define RPC_IS_SOFT(t)\t\t((t)->tk_flags &\n"
+ "> (RPC_TASK_SOFT|RPC_TASK_TIMEOUT))\n"
+ "> \302\240#define RPC_IS_SOFTCONN(t)\t((t)->tk_flags &\n"
+ "> RPC_TASK_SOFTCONN)\n"
+ "> \302\240#define RPC_WAS_SENT(t)\t\t((t)->tk_flags &\n"
+ "> RPC_TASK_SENT)\n"
+ "> +#define RPC_SKIP_CONG(t)\t((t)->tk_flags & RPC_TASK_NO_CONG)\n"
+ "> \302\240\n"
+ "> \302\240#define RPC_TASK_RUNNING\t0\n"
+ "> \302\240#define RPC_TASK_QUEUED\t\t1\n"
+ "> diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c\n"
+ "> index b530a28..a477ee6 100644\n"
+ "> --- a/net/sunrpc/xprt.c\n"
+ "> +++ b/net/sunrpc/xprt.c\n"
+ "> @@ -392,6 +392,10 @@ static inline void xprt_release_write(struct\n"
+ "> rpc_xprt *xprt, struct rpc_task *ta\n"
+ "> \302\240{\n"
+ "> \302\240\tstruct rpc_rqst *req = task->tk_rqstp;\n"
+ "> \302\240\n"
+ "> +\tif (RPC_SKIP_CONG(task)) {\n"
+ "> +\t\treq->rq_cong = 0;\n"
+ "> +\t\treturn 1;\n"
+ "> +\t}\n"
+ "\n"
+ "Why not just have the RDMA layer call xprt_reserve_xprt() (and\n"
+ "xprt_release_xprt()) if this flag is set? It seems to me that you will\n"
+ "need some kind of extra congestion control in the RDMA layer anyway\n"
+ "since you only have one reserved credit for these privileged tasks (or\n"
+ "did I miss where that is being gated?).\n"
+ "\n"
+ "> \302\240\tif (req->rq_cong)\n"
+ "> \302\240\t\treturn 1;\n"
+ "> \302\240\tdprintk(\"RPC: %5u xprt_cwnd_limited cong = %lu cwnd =\n"
+ "> %lu\\n\",\n"
+ "> diff --git a/net/sunrpc/xprtrdma/transport.c\n"
+ "> b/net/sunrpc/xprtrdma/transport.c\n"
+ "> index 3a5a805..073fecd 100644\n"
+ "> --- a/net/sunrpc/xprtrdma/transport.c\n"
+ "> +++ b/net/sunrpc/xprtrdma/transport.c\n"
+ "> @@ -546,7 +546,8 @@ static void rpcrdma_keepalive_release(void\n"
+ "> *calldata)\n"
+ "> \302\240\n"
+ "> \302\240\tdata = xprt_get(xprt);\n"
+ "> \302\240\tnull_task = rpc_call_null_helper(task->tk_client, xprt,\n"
+ "> NULL,\n"
+ "> -\t\t\t\t\t\302\240RPC_TASK_SOFTPING |\n"
+ "> RPC_TASK_ASYNC,\n"
+ "> +\t\t\t\t\t\302\240RPC_TASK_SOFTPING |\n"
+ "> RPC_TASK_ASYNC |\n"
+ "> +\t\t\t\t\t\302\240RPC_TASK_NO_CONG,\n"
+ "> \302\240\t\t\t\t\t\302\240&rpcrdma_keepalive_call_ops\n"
+ "> , data);\n"
+ "> \302\240\tif (!IS_ERR(null_task))\n"
+ "> \302\240\t\trpc_put_task(null_task);\n"
+ "> diff --git a/net/sunrpc/xprtrdma/verbs.c\n"
+ "> b/net/sunrpc/xprtrdma/verbs.c\n"
+ "> index 81cd31a..d9b5fa7 100644\n"
+ "> --- a/net/sunrpc/xprtrdma/verbs.c\n"
+ "> +++ b/net/sunrpc/xprtrdma/verbs.c\n"
+ "> @@ -136,19 +136,20 @@\n"
+ "> \302\240static void\n"
+ "> \302\240rpcrdma_update_granted_credits(struct rpcrdma_rep *rep)\n"
+ "> \302\240{\n"
+ "> -\tstruct rpcrdma_msg *rmsgp = rdmab_to_msg(rep->rr_rdmabuf);\n"
+ "> \302\240\tstruct rpcrdma_buffer *buffer = &rep->rr_rxprt->rx_buf;\n"
+ "> +\t__be32 *p = rep->rr_rdmabuf->rg_base;\n"
+ "> \302\240\tu32 credits;\n"
+ "> \302\240\n"
+ "> \302\240\tif (rep->rr_len < RPCRDMA_HDRLEN_ERR)\n"
+ "> \302\240\t\treturn;\n"
+ "> \302\240\n"
+ "> -\tcredits = be32_to_cpu(rmsgp->rm_credit);\n"
+ "> +\tcredits = be32_to_cpup(p + 2);\n"
+ "> +\tif (credits > buffer->rb_max_requests)\n"
+ "> +\t\tcredits = buffer->rb_max_requests;\n"
+ "> +\t/* Reserve one credit for keepalive ping */\n"
+ "> +\tcredits--;\n"
+ "> \302\240\tif (credits == 0)\n"
+ "> \302\240\t\tcredits = 1;\t/* don't deadlock */\n"
+ "> -\telse if (credits > buffer->rb_max_requests)\n"
+ "> -\t\tcredits = buffer->rb_max_requests;\n"
+ "> -\n"
+ "> \302\240\tatomic_set(&buffer->rb_credits, credits);\n"
+ "> \302\240}\n"
+ "> \302\240\n"
+ "> @@ -915,6 +916,8 @@ struct rpcrdma_rep *\n"
+ "> \302\240\tstruct rpcrdma_buffer *buf = &r_xprt->rx_buf;\n"
+ "> \302\240\tint i, rc;\n"
+ "> \302\240\n"
+ "> +\tif (r_xprt->rx_data.max_requests < 2)\n"
+ "> +\t\treturn -EINVAL;\n"
+ "> \302\240\tbuf->rb_max_requests = r_xprt->rx_data.max_requests;\n"
+ "> \302\240\tbuf->rb_bc_srv_max_requests = 0;\n"
+ "> \302\240\tatomic_set(&buf->rb_credits, 1);\n"
+ "> \n"
+ "> --\n"
+ "> To unsubscribe from this list: send the line \"unsubscribe linux-nfs\"\n"
+ "> in\n"
+ "> the body of a message to majordomo@vger.kernel.org\n"
+ "> More majordomo info at\302\240\302\240http://vger.kernel.org/majordomo-info.html\n"
+ "> \n"
+ "-- \n"
+ "\n"
+ "\n"
+ "\t\n"
+ "\t\n"
+ "\n"
+ "\n"
+ "Trond Myklebust\n"
+ "Principal System Architect\n"
+ "4300 El Camino Real | Suite 100\n"
+ "Los Altos, CA\302\240\302\24094022\n"
+ "W: 650-422-3800\n"
+ "C: 801-921-4583\302\240\n"
+ www.primarydata.com
 
-e651dcfc6c003550f8d49e21d7fc70e2861ec6920e73f446a1cb5d527541d23a
+a4753371ce79bbf53841bc5ef1ef92e0061ac97d665b596c88b94fccb18b6a97

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.