diff for duplicates of <1486597679.11028.1.camel@primarydata.com> diff --git a/a/1.txt b/N1/1.txt index 1d6c92f..8f31d70 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,39 +1,79 @@ -T24gV2VkLCAyMDE3LTAyLTA4IGF0IDE3OjAwIC0wNTAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4g -VGhlIHRyYW5zcG9ydCBsb2NrIGlzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSB4cHJ0X2FkanVzdF9j -d25kKCkgY2FsbA0KPiBpbiB4c191ZHBfdGltZXIsIGJ1dCBpdCBpcyBub3QgbmVjZXNzYXJ5IGZv -ciBhY2Nlc3NpbmcgdGhlDQo+IHJxX3JlcGx5X2J5dGVzX3JlY3ZkIG9yIHRrX3N0YXR1cyBmaWVs -ZHMuIEl0IGlzIGNvcnJlY3QgdG8gc3VibGltYXRlDQo+IHRoZSBsb2NrIGludG8gVURQJ3MgeHNf -dWRwX3RpbWVyIG1ldGhvZCwgd2hlcmUgaXQgaXMgcmVxdWlyZWQuDQo+IA0KPiBUaGUgLT50aW1l -ciBtZXRob2QgaGFzIHRvIHRha2UgdGhlIHRyYW5zcG9ydCBsb2NrIGlmIG5lZWRlZCwgYnV0IGl0 -DQo+IGNhbiBub3cgc2xlZXAgc2FmZWx5LCBvciBldmVuIGNhbGwgYmFjayBpbnRvIHRoZSBSUEMg -c2NoZWR1bGVyLg0KPiANCj4gVGhpcyBpcyBtb3JlIGEgY2xlYW4tdXAgdGhhbiBhIGZpeCwgYnV0 -IHRoZSAiaXNzdWUiIHdhcyBpbnRyb2R1Y2VkDQo+IGJ5IG15IHRyYW5zcG9ydCBzd2l0Y2ggcGF0 -Y2hlcyBiYWNrIGluIDIwMDUuDQo+IA0KPiBGaXhlczogNDZjMGVlOGJjNGFkICgiUlBDOiBzZXBh -cmF0ZSB4cHJ0X3RpbWVyIGltcGxlbWVudGF0aW9ucyIpDQo+IFNpZ25lZC1vZmYtYnk6IENodWNr -IExldmVyIDxjaHVjay5sZXZlckBvcmFjbGUuY29tPg0KPiAtLS0NCj4gwqBuZXQvc3VucnBjL3hw -cnQuY8KgwqDCoMKgwqB8wqDCoMKgwqAyIC0tDQo+IMKgbmV0L3N1bnJwYy94cHJ0c29jay5jIHzC -oMKgwqDCoDIgKysNCj4gwqAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxl -dGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5y -cGMveHBydC5jDQo+IGluZGV4IDlhNmJlMDMuLmI1MzBhMjggMTAwNjQ0DQo+IC0tLSBhL25ldC9z -dW5ycGMveHBydC5jDQo+ICsrKyBiL25ldC9zdW5ycGMveHBydC5jDQo+IEBAIC04OTcsMTMgKzg5 -NywxMSBAQCBzdGF0aWMgdm9pZCB4cHJ0X3RpbWVyKHN0cnVjdCBycGNfdGFzayAqdGFzaykNCj4g -wqAJCXJldHVybjsNCj4gwqAJZHByaW50aygiUlBDOiAlNXUgeHBydF90aW1lclxuIiwgdGFzay0+ -dGtfcGlkKTsNCj4gwqANCj4gLQlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsN -Cj4gwqAJaWYgKCFyZXEtPnJxX3JlcGx5X2J5dGVzX3JlY3ZkKSB7DQo+IMKgCQlpZiAoeHBydC0+ -b3BzLT50aW1lcikNCj4gwqAJCQl4cHJ0LT5vcHMtPnRpbWVyKHhwcnQsIHRhc2spOw0KPiDCoAl9 -IGVsc2UNCj4gwqAJCXRhc2stPnRrX3N0YXR1cyA9IDA7DQo+IC0Jc3Bpbl91bmxvY2tfYmgoJnhw -cnQtPnRyYW5zcG9ydF9sb2NrKTsNCj4gwqB9DQo+IMKgDQo+IMKgLyoqDQo+IGRpZmYgLS1naXQg -YS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMNCj4gaW5kZXgg -YWYzOTJkOS4uZDliYjY0NCAxMDA2NDQNCj4gLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jDQo+ -ICsrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYw0KPiBAQCAtMTczNCw3ICsxNzM0LDkgQEAgc3Rh -dGljIHZvaWQgeHNfdWRwX3NldF9idWZmZXJfc2l6ZShzdHJ1Y3QNCj4gcnBjX3hwcnQgKnhwcnQs -IHNpemVfdCBzbmRzaXplLCBzaXplX3QNCj4gwqAgKi8NCj4gwqBzdGF0aWMgdm9pZCB4c191ZHBf -dGltZXIoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3QgcnBjX3Rhc2sNCj4gKnRhc2spDQo+ -IMKgew0KPiArCXNwaW5fbG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOw0KPiDCoAl4cHJ0 -X2FkanVzdF9jd25kKHhwcnQsIHRhc2ssIC1FVElNRURPVVQpOw0KPiArCXNwaW5fdW5sb2NrX2Jo -KCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7DQo+IMKgfQ0KPiDCoA0KPiDCoHN0YXRpYyB1bnNpZ25l -ZCBzaG9ydCB4c19nZXRfcmFuZG9tX3BvcnQodm9pZCkNCj4gDQoNClRoYW5rcyEgR29vZCBjbGVh -bnVwLi4uDQoNClRyb25kDQoNCi0tIA0KDQoNCg0KCQ0KCQ0KDQoNClRyb25kIE15a2xlYnVzdA0K -UHJpbmNpcGFsIFN5c3RlbSBBcmNoaXRlY3QNCjQzMDAgRWwgQ2FtaW5vIFJlYWwgfCBTdWl0ZSAx -MDANCkxvcyBBbHRvcywgQ0HCoMKgOTQwMjINClc6IDY1MC00MjItMzgwMA0KQzogODAxLTkyMS00 -NTgzwqANCnd3dy5wcmltYXJ5ZGF0YS5jb20NCg0KDQoNCg0K +On Wed, 2017-02-08 at 17:00 -0500, Chuck Lever wrote: +> The transport lock is needed to protect the xprt_adjust_cwnd() call +> in xs_udp_timer, but it is not necessary for accessing the +> rq_reply_bytes_recvd or tk_status fields. It is correct to sublimate +> the lock into UDP's xs_udp_timer method, where it is required. +> +> The ->timer method has to take the transport lock if needed, but it +> can now sleep safely, or even call back into the RPC scheduler. +> +> This is more a clean-up than a fix, but the "issue" was introduced +> by my transport switch patches back in 2005. +> +> Fixes: 46c0ee8bc4ad ("RPC: separate xprt_timer implementations") +> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> +> --- +>  net/sunrpc/xprt.c     |    2 -- +>  net/sunrpc/xprtsock.c |    2 ++ +>  2 files changed, 2 insertions(+), 2 deletions(-) +> +> diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c +> index 9a6be03..b530a28 100644 +> --- a/net/sunrpc/xprt.c +> +++ b/net/sunrpc/xprt.c +> @@ -897,13 +897,11 @@ static void xprt_timer(struct rpc_task *task) +>  return; +>  dprintk("RPC: %5u xprt_timer\n", task->tk_pid); +>  +> - spin_lock_bh(&xprt->transport_lock); +>  if (!req->rq_reply_bytes_recvd) { +>  if (xprt->ops->timer) +>  xprt->ops->timer(xprt, task); +>  } else +>  task->tk_status = 0; +> - spin_unlock_bh(&xprt->transport_lock); +>  } +>  +>  /** +> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c +> index af392d9..d9bb644 100644 +> --- a/net/sunrpc/xprtsock.c +> +++ b/net/sunrpc/xprtsock.c +> @@ -1734,7 +1734,9 @@ static void xs_udp_set_buffer_size(struct +> rpc_xprt *xprt, size_t sndsize, size_t +>  */ +>  static void xs_udp_timer(struct rpc_xprt *xprt, struct rpc_task +> *task) +>  { +> + spin_lock_bh(&xprt->transport_lock); +>  xprt_adjust_cwnd(xprt, task, -ETIMEDOUT); +> + spin_unlock_bh(&xprt->transport_lock); +>  } +>  +>  static unsigned short xs_get_random_port(void) +> + +Thanks! Good cleanup... + +Trond + +-- + + + + + + + +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 + + + + +N§²æìr¸yúèØb²X¬¶Ç§vØ^)Þº{.nÇ+·¥{±Ù{ayº\x1dÊÚë,j\a¢f£¢·h»öì\x17/oSc¾Ú³9uÀ¦æåÈ&jw¨®\x03(éÝ¢j"ú\x1a¶^[m§ÿïêäz¹Þàþf£¢·h§~m diff --git a/a/content_digest b/N1/content_digest index 79fd4e4..da8a83b 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,52 +1,93 @@ "ref\020170208214854.7152.83331.stgit@manet.1015granger.net\0" "ref\020170208220051.7152.67740.stgit@manet.1015granger.net\0" - "From\0Trond Myklebust <trondmy@primarydata.com>\0" + "ref\020170208220051.7152.67740.stgit-FYjufvaPoItvLzlybtyyYzGyq/o6K9yX@public.gmane.org\0" + "From\0Trond Myklebust <trondmy-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>\0" "Subject\0Re: [PATCH v3 09/12] sunrpc: Allow xprt->ops->timer method to sleep\0" "Date\0Wed, 8 Feb 2017 23:48:02 +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" - "T24gV2VkLCAyMDE3LTAyLTA4IGF0IDE3OjAwIC0wNTAwLCBDaHVjayBMZXZlciB3cm90ZToNCj4g\n" - "VGhlIHRyYW5zcG9ydCBsb2NrIGlzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSB4cHJ0X2FkanVzdF9j\n" - "d25kKCkgY2FsbA0KPiBpbiB4c191ZHBfdGltZXIsIGJ1dCBpdCBpcyBub3QgbmVjZXNzYXJ5IGZv\n" - "ciBhY2Nlc3NpbmcgdGhlDQo+IHJxX3JlcGx5X2J5dGVzX3JlY3ZkIG9yIHRrX3N0YXR1cyBmaWVs\n" - "ZHMuIEl0IGlzIGNvcnJlY3QgdG8gc3VibGltYXRlDQo+IHRoZSBsb2NrIGludG8gVURQJ3MgeHNf\n" - "dWRwX3RpbWVyIG1ldGhvZCwgd2hlcmUgaXQgaXMgcmVxdWlyZWQuDQo+IA0KPiBUaGUgLT50aW1l\n" - "ciBtZXRob2QgaGFzIHRvIHRha2UgdGhlIHRyYW5zcG9ydCBsb2NrIGlmIG5lZWRlZCwgYnV0IGl0\n" - "DQo+IGNhbiBub3cgc2xlZXAgc2FmZWx5LCBvciBldmVuIGNhbGwgYmFjayBpbnRvIHRoZSBSUEMg\n" - "c2NoZWR1bGVyLg0KPiANCj4gVGhpcyBpcyBtb3JlIGEgY2xlYW4tdXAgdGhhbiBhIGZpeCwgYnV0\n" - "IHRoZSAiaXNzdWUiIHdhcyBpbnRyb2R1Y2VkDQo+IGJ5IG15IHRyYW5zcG9ydCBzd2l0Y2ggcGF0\n" - "Y2hlcyBiYWNrIGluIDIwMDUuDQo+IA0KPiBGaXhlczogNDZjMGVlOGJjNGFkICgiUlBDOiBzZXBh\n" - "cmF0ZSB4cHJ0X3RpbWVyIGltcGxlbWVudGF0aW9ucyIpDQo+IFNpZ25lZC1vZmYtYnk6IENodWNr\n" - "IExldmVyIDxjaHVjay5sZXZlckBvcmFjbGUuY29tPg0KPiAtLS0NCj4gwqBuZXQvc3VucnBjL3hw\n" - "cnQuY8KgwqDCoMKgwqB8wqDCoMKgwqAyIC0tDQo+IMKgbmV0L3N1bnJwYy94cHJ0c29jay5jIHzC\n" - "oMKgwqDCoDIgKysNCj4gwqAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxl\n" - "dGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5y\n" - "cGMveHBydC5jDQo+IGluZGV4IDlhNmJlMDMuLmI1MzBhMjggMTAwNjQ0DQo+IC0tLSBhL25ldC9z\n" - "dW5ycGMveHBydC5jDQo+ICsrKyBiL25ldC9zdW5ycGMveHBydC5jDQo+IEBAIC04OTcsMTMgKzg5\n" - "NywxMSBAQCBzdGF0aWMgdm9pZCB4cHJ0X3RpbWVyKHN0cnVjdCBycGNfdGFzayAqdGFzaykNCj4g\n" - "wqAJCXJldHVybjsNCj4gwqAJZHByaW50aygiUlBDOiAlNXUgeHBydF90aW1lclxuIiwgdGFzay0+\n" - "dGtfcGlkKTsNCj4gwqANCj4gLQlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsN\n" - "Cj4gwqAJaWYgKCFyZXEtPnJxX3JlcGx5X2J5dGVzX3JlY3ZkKSB7DQo+IMKgCQlpZiAoeHBydC0+\n" - "b3BzLT50aW1lcikNCj4gwqAJCQl4cHJ0LT5vcHMtPnRpbWVyKHhwcnQsIHRhc2spOw0KPiDCoAl9\n" - "IGVsc2UNCj4gwqAJCXRhc2stPnRrX3N0YXR1cyA9IDA7DQo+IC0Jc3Bpbl91bmxvY2tfYmgoJnhw\n" - "cnQtPnRyYW5zcG9ydF9sb2NrKTsNCj4gwqB9DQo+IMKgDQo+IMKgLyoqDQo+IGRpZmYgLS1naXQg\n" - "YS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMNCj4gaW5kZXgg\n" - "YWYzOTJkOS4uZDliYjY0NCAxMDA2NDQNCj4gLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jDQo+\n" - "ICsrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYw0KPiBAQCAtMTczNCw3ICsxNzM0LDkgQEAgc3Rh\n" - "dGljIHZvaWQgeHNfdWRwX3NldF9idWZmZXJfc2l6ZShzdHJ1Y3QNCj4gcnBjX3hwcnQgKnhwcnQs\n" - "IHNpemVfdCBzbmRzaXplLCBzaXplX3QNCj4gwqAgKi8NCj4gwqBzdGF0aWMgdm9pZCB4c191ZHBf\n" - "dGltZXIoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3QgcnBjX3Rhc2sNCj4gKnRhc2spDQo+\n" - "IMKgew0KPiArCXNwaW5fbG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOw0KPiDCoAl4cHJ0\n" - "X2FkanVzdF9jd25kKHhwcnQsIHRhc2ssIC1FVElNRURPVVQpOw0KPiArCXNwaW5fdW5sb2NrX2Jo\n" - "KCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7DQo+IMKgfQ0KPiDCoA0KPiDCoHN0YXRpYyB1bnNpZ25l\n" - "ZCBzaG9ydCB4c19nZXRfcmFuZG9tX3BvcnQodm9pZCkNCj4gDQoNClRoYW5rcyEgR29vZCBjbGVh\n" - "bnVwLi4uDQoNClRyb25kDQoNCi0tIA0KDQoNCg0KCQ0KCQ0KDQoNClRyb25kIE15a2xlYnVzdA0K\n" - "UHJpbmNpcGFsIFN5c3RlbSBBcmNoaXRlY3QNCjQzMDAgRWwgQ2FtaW5vIFJlYWwgfCBTdWl0ZSAx\n" - "MDANCkxvcyBBbHRvcywgQ0HCoMKgOTQwMjINClc6IDY1MC00MjItMzgwMA0KQzogODAxLTkyMS00\n" - NTgzwqANCnd3dy5wcmltYXJ5ZGF0YS5jb20NCg0KDQoNCg0K + "On Wed, 2017-02-08 at 17:00 -0500, Chuck Lever wrote:\n" + "> The transport lock is needed to protect the xprt_adjust_cwnd() call\n" + "> in xs_udp_timer, but it is not necessary for accessing the\n" + "> rq_reply_bytes_recvd or tk_status fields. It is correct to sublimate\n" + "> the lock into UDP's xs_udp_timer method, where it is required.\n" + "> \n" + "> The ->timer method has to take the transport lock if needed, but it\n" + "> can now sleep safely, or even call back into the RPC scheduler.\n" + "> \n" + "> This is more a clean-up than a fix, but the \"issue\" was introduced\n" + "> by my transport switch patches back in 2005.\n" + "> \n" + "> Fixes: 46c0ee8bc4ad (\"RPC: separate xprt_timer implementations\")\n" + "> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>\n" + "> ---\n" + "> \303\202\302\240net/sunrpc/xprt.c\303\202\302\240\303\202\302\240\303\202\302\240\303\202\302\240\303\202\302\240|\303\202\302\240\303\202\302\240\303\202\302\240\303\202\302\2402 --\n" + "> \303\202\302\240net/sunrpc/xprtsock.c |\303\202\302\240\303\202\302\240\303\202\302\240\303\202\302\2402 ++\n" + "> \303\202\302\2402 files changed, 2 insertions(+), 2 deletions(-)\n" + "> \n" + "> diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c\n" + "> index 9a6be03..b530a28 100644\n" + "> --- a/net/sunrpc/xprt.c\n" + "> +++ b/net/sunrpc/xprt.c\n" + "> @@ -897,13 +897,11 @@ static void xprt_timer(struct rpc_task *task)\n" + "> \303\202\302\240\t\treturn;\n" + "> \303\202\302\240\tdprintk(\"RPC: %5u xprt_timer\\n\", task->tk_pid);\n" + "> \303\202\302\240\n" + "> -\tspin_lock_bh(&xprt->transport_lock);\n" + "> \303\202\302\240\tif (!req->rq_reply_bytes_recvd) {\n" + "> \303\202\302\240\t\tif (xprt->ops->timer)\n" + "> \303\202\302\240\t\t\txprt->ops->timer(xprt, task);\n" + "> \303\202\302\240\t} else\n" + "> \303\202\302\240\t\ttask->tk_status = 0;\n" + "> -\tspin_unlock_bh(&xprt->transport_lock);\n" + "> \303\202\302\240}\n" + "> \303\202\302\240\n" + "> \303\202\302\240/**\n" + "> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c\n" + "> index af392d9..d9bb644 100644\n" + "> --- a/net/sunrpc/xprtsock.c\n" + "> +++ b/net/sunrpc/xprtsock.c\n" + "> @@ -1734,7 +1734,9 @@ static void xs_udp_set_buffer_size(struct\n" + "> rpc_xprt *xprt, size_t sndsize, size_t\n" + "> \303\202\302\240 */\n" + "> \303\202\302\240static void xs_udp_timer(struct rpc_xprt *xprt, struct rpc_task\n" + "> *task)\n" + "> \303\202\302\240{\n" + "> +\tspin_lock_bh(&xprt->transport_lock);\n" + "> \303\202\302\240\txprt_adjust_cwnd(xprt, task, -ETIMEDOUT);\n" + "> +\tspin_unlock_bh(&xprt->transport_lock);\n" + "> \303\202\302\240}\n" + "> \303\202\302\240\n" + "> \303\202\302\240static unsigned short xs_get_random_port(void)\n" + "> \n" + "\n" + "Thanks! Good cleanup...\n" + "\n" + "Trond\n" + "\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\303\202\302\240\303\202\302\24094022\n" + "W: 650-422-3800\n" + "C: 801-921-4583\303\202\302\240\n" + "www.primarydata.com\n" + "\n" + "\n" + "\n" + "\n" + "N\302\213\302\247\302\262\303\246\303\254r\302\270\302\233y\303\272\303\250\302\232\303\230b\302\262X\302\254\302\266\303\207\302\247v\303\230^\302\226)\303\236\302\272{.n\303\207+\302\211\302\267\302\245\302\212{\302\261\302\255\303\231\302\232\302\212{ay\302\272\035\303\212\302\207\303\232\302\231\303\253,j\a\302\255\302\242f\302\243\302\242\302\267h\302\232\302\213\302\273\303\266\303\254\027/oSc\302\276\302\231\303\232\302\2639\302\230u\303\200\302\246\303\246\303\245\302\211\303\210&jw\302\250\302\256\003(\302\255\303\251\302\232\302\216\302\212\303\235\302\242j\"\302\235\303\272\032\302\266\033m\302\247\303\277\303\257\302\201\303\252\303\244z\302\271\303\236\302\226\302\212\303\240\303\276f\302\243\302\242\302\267h\302\232\302\210\302\247~\302\210m\302\232" -ae26f1be87696754c5d0b0f425e3b65d3fb4b74f9c2b706ebc41d9e04904a58c +748eeaacd5dab0bee236df6f5bf6e7509461eeadff21291b7aceafbda9a7e071
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.