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.