diff for duplicates of <1516115201.5784.4.camel@primarydata.com> diff --git a/a/1.txt b/N1/1.txt index c96e012..28db46b 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,47 +1,75 @@ -T24gTW9uLCAyMDE4LTAxLTE1IGF0IDE4OjMwICswMTAwLCBNYXggS2VsbGVybWFubiB3cm90ZToN -Cj4gbmZzL3N1cGVyOiBzZXQgTVNfUE9TSVhBQ0wgb25seSBpZiBBQ0wgc3VwcG9ydCBpcyBlbmFi -bGVkDQo+IA0KPiBUaGUgY29kZSBjb21tZW50IHNheXMgIldlIHdpbGwgW2FwcGx5IHRoZSB1bWFz -a10gb3Vyc2VsdmVzIiwgYnV0IHRoYXQNCj4gaGFwcGVucyBpbiBwb3NpeF9hY2xfY3JlYXRlKCkg -b25seSBpZiB0aGUga2VybmVsIGhhcyBQT1NJWCBBQ0wNCj4gc3VwcG9ydC4gIFdpdGhvdXQgaXQs -IHBvc2l4X2FjbF9jcmVhdGUoKSBpcyBhIGlzIGFuIGVtcHR5IGR1bW15DQo+IGZ1bmN0aW9uLg0K -PiANCj4gU28gbGV0J3Mgbm90IHByZXRlbmQgd2Ugd2lsbCBhcHBseSB0aGUgdW1hc2sgaWYgd2Ug -Y2FuIGFscmVhZHkga25vdw0KPiB0aGF0IHdlIHdpbGwgbmV2ZXIuDQo+IA0KPiBUaGlzIGZpeGVz -IGEgcHJvYmxlbSB3aGVyZSB0aGUgdW1hc2sgaXMgYWx3YXlzIGlnbm9yZWQgaW4gdGhlIE5GUw0K -PiBjbGllbnQgd2hlbiBjb21waWxlZCB3aXRob3V0IENPTkZJR19GU19QT1NJWF9BQ0wuICBUaGlz -IGlzIGEgNCB5ZWFyDQo+IG9sZCByZWdyZXNzaW9uIGNhdXNlZCBieSBjb21taXQgMDEzY2RmMTA4 -OGQ3MjMgd2hpY2ggaXRzZWxmIHdhcyBub3QNCj4gY29tcGxldGVseSB3cm9uZywgYnV0IGZhaWxl -ZCB0byBjb25zaWRlciBhbGwgdGhlIHNpZGUgZWZmZWN0cyBieQ0KPiBtaXNkZXNpZ25lZCBWRlMg -Y29kZS4NCj4gDQo+IFRoZXJlIGFyZSB0d28gY29tcGlsZS10aW1lIGNoZWNrcyBhbmQgb25lIHJ1 -bnRpbWUgY2hlY2s6DQo+IA0KPiAtIElmIENPTkZJR19GU19QT1NJWF9BQ0w9biwgdGhlbiBNU19Q -T1NJWEFDTCBpcyBuZXZlciBzZXQuDQo+IA0KPiAtIElmIENPTkZJR19GU19QT1NJWF9BQ0w9eSBh -bmQgQ09ORklHX05GU19WM19BQ0w9biwgdGhlbiBvbmx5IE5GU3Y0DQo+ICAgaGFzIEFDTCBzdXBw -b3J0IChhbmQgY2Fubm90IGJlIGRpc2FibGVkKSwgYW5kIHdlIG5lZWQgdG8gY2hlY2sgZm9yDQo+ -ICAgInZlcnNpb249PTQiLg0KPiANCj4gLSBJZiBDT05GSUdfRlNfUE9TSVhfQUNMPXkgYW5kIENP -TkZJR19ORlNfVjNfQUNMPXksIE1TX1BPU0lYQUNMIGlzDQo+ICAgYWx3YXlzIHNldCwgYXMgYmVm -b3JlLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogTWF4IEtlbGxlcm1hbm4gPG1rQGNtNGFsbC5jb20+ -DQo+IC0tLQ0KPiAgZnMvbmZzL3N1cGVyLmMgfCAgIDE1ICsrKysrKysrKysrLS0tLQ0KPiAgMSBm -aWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZm -IC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYw0KPiBpbmRleCAyMTZmNjdk -NjI4YjMuLmVjNGUxZjI3NzVlMCAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL3N1cGVyLmMNCj4gKysr -IGIvZnMvbmZzL3N1cGVyLmMNCj4gQEAgLTIzMzgsMTAgKzIzMzgsMTcgQEAgdm9pZCBuZnNfZmls -bF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLA0KPiBzdHJ1Y3QgbmZzX21vdW50X2luZm8g -Km1vdW50X2luZm8pDQo+ICAJCXNiLT5zX2Jsb2Nrc2l6ZSA9IG5mc19ibG9ja19zaXplKGRhdGEt -PmJzaXplLCAmc2ItDQo+ID5zX2Jsb2Nrc2l6ZV9iaXRzKTsNCj4gIA0KPiAgCWlmIChzZXJ2ZXIt -Pm5mc19jbGllbnQtPnJwY19vcHMtPnZlcnNpb24gIT0gMikgew0KPiAtCQkvKiBUaGUgVkZTIHNo -b3VsZG4ndCBhcHBseSB0aGUgdW1hc2sgdG8gbW9kZSBiaXRzLg0KPiBXZSB3aWxsIGRvDQo+IC0J -CSAqIHNvIG91cnNlbHZlcyB3aGVuIG5lY2Vzc2FyeS4NCj4gLQkJICovDQo+IC0JCXNiLT5zX2Zs -YWdzIHw9IE1TX1BPU0lYQUNMOw0KPiArI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wNCj4gKyNp -Zm5kZWYgQ09ORklHX05GU19WM19BQ0wNCj4gKwkJaWYgKG5mc3MtPm5mc19jbGllbnQtPnJwY19v -cHMtPnZlcnNpb24gPT0gNCkNCj4gKyNlbmRpZg0KPiArCQkJLyogVGhlIFZGUyBzaG91bGRuJ3Qg -YXBwbHkgdGhlIHVtYXNrIHRvIG1vZGUNCj4gKwkJCSAqIGJpdHMuIFdlIHdpbGwgZG8gc28gb3Vy -c2VsdmVzIHdoZW4NCj4gKwkJCSAqIG5lY2Vzc2FyeS4NCj4gKwkJCSAqLw0KPiArCQkJc2ItPnNf -ZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7DQo+ICsjZW5kaWYNCj4gKw0KPiAgCQlzYi0+c190aW1lX2dy -YW4gPSAxOw0KPiAgCQlzYi0+c19leHBvcnRfb3AgPSAmbmZzX2V4cG9ydF9vcHM7DQo+ICAJfQ0K -DQpUaGUgYWJvdmUgaWxsdXN0cmF0ZXMgZXhhY3RseSB3aHkgSSd2ZSBhc2tlZCBwZW9wbGUgX25l -dmVyXyB0byBtYWtlDQphbnl0aGluZyBjb25kaXRpb25hbCBvbiBycGNfb3BzLT52ZXJzaW9uLiBQ -bGVhc2UgdXNlIGEgTkZTIGNhcGFiaWxpdHkNCihpLmUuIE5GU19TQihzYiktPmNhcHMpIGZvciB0 -aGlzIGtpbmQgb2YgdGhpbmcuIFRoYXQgZXhwcmVzc2VzIHRoZQ0KY29uZGl0aW9uIGluIHRlcm1z -IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdlIHdhbnQgaW5zdGVhZCBvZiBhIHdoaW1zaWNhbA0KcHJv -dG9jb2wgdmVyc2lvbiBudW1iZXIuDQoNClRoYW5rcw0KICBUcm9uZA0KLS0gDQpUcm9uZCBNeWts -ZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGENCnRyb25kLm15 -a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20NCg== +On Mon, 2018-01-15 at 18:30 +0100, Max Kellermann wrote: +> nfs/super: set MS_POSIXACL only if ACL support is enabled +> +> The code comment says "We will [apply the umask] ourselves", but that +> happens in posix_acl_create() only if the kernel has POSIX ACL +> support. Without it, posix_acl_create() is a is an empty dummy +> function. +> +> So let's not pretend we will apply the umask if we can already know +> that we will never. +> +> This fixes a problem where the umask is always ignored in the NFS +> client when compiled without CONFIG_FS_POSIX_ACL. This is a 4 year +> old regression caused by commit 013cdf1088d723 which itself was not +> completely wrong, but failed to consider all the side effects by +> misdesigned VFS code. +> +> There are two compile-time checks and one runtime check: +> +> - If CONFIG_FS_POSIX_ACL=n, then MS_POSIXACL is never set. +> +> - If CONFIG_FS_POSIX_ACL=y and CONFIG_NFS_V3_ACL=n, then only NFSv4 +> has ACL support (and cannot be disabled), and we need to check for +> "version==4". +> +> - If CONFIG_FS_POSIX_ACL=y and CONFIG_NFS_V3_ACL=y, MS_POSIXACL is +> always set, as before. +> +> Signed-off-by: Max Kellermann <mk@cm4all.com> +> --- +> fs/nfs/super.c | 15 +++++++++++---- +> 1 file changed, 11 insertions(+), 4 deletions(-) +> +> diff --git a/fs/nfs/super.c b/fs/nfs/super.c +> index 216f67d628b3..ec4e1f2775e0 100644 +> --- a/fs/nfs/super.c +> +++ b/fs/nfs/super.c +> @@ -2338,10 +2338,17 @@ void nfs_fill_super(struct super_block *sb, +> struct nfs_mount_info *mount_info) +> sb->s_blocksize = nfs_block_size(data->bsize, &sb- +> >s_blocksize_bits); +> +> if (server->nfs_client->rpc_ops->version != 2) { +> - /* The VFS shouldn't apply the umask to mode bits. +> We will do +> - * so ourselves when necessary. +> - */ +> - sb->s_flags |= MS_POSIXACL; +> +#ifdef CONFIG_FS_POSIX_ACL +> +#ifndef CONFIG_NFS_V3_ACL +> + if (nfss->nfs_client->rpc_ops->version == 4) +> +#endif +> + /* The VFS shouldn't apply the umask to mode +> + * bits. We will do so ourselves when +> + * necessary. +> + */ +> + sb->s_flags |= MS_POSIXACL; +> +#endif +> + +> sb->s_time_gran = 1; +> sb->s_export_op = &nfs_export_ops; +> } + +The above illustrates exactly why I've asked people _never_ to make +anything conditional on rpc_ops->version. Please use a NFS capability +(i.e. NFS_SB(sb)->caps) for this kind of thing. That expresses the +condition in terms of the functionality we want instead of a whimsical +protocol version number. + +Thanks + Trond +-- +Trond Myklebust +Linux NFS client maintainer, PrimaryData +trond.myklebust@primarydata.com diff --git a/a/content_digest b/N1/content_digest index c505b8a..18bb91b 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -12,52 +12,80 @@ " linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>\0" "\00:1\0" "b\0" - "T24gTW9uLCAyMDE4LTAxLTE1IGF0IDE4OjMwICswMTAwLCBNYXggS2VsbGVybWFubiB3cm90ZToN\n" - "Cj4gbmZzL3N1cGVyOiBzZXQgTVNfUE9TSVhBQ0wgb25seSBpZiBBQ0wgc3VwcG9ydCBpcyBlbmFi\n" - "bGVkDQo+IA0KPiBUaGUgY29kZSBjb21tZW50IHNheXMgIldlIHdpbGwgW2FwcGx5IHRoZSB1bWFz\n" - "a10gb3Vyc2VsdmVzIiwgYnV0IHRoYXQNCj4gaGFwcGVucyBpbiBwb3NpeF9hY2xfY3JlYXRlKCkg\n" - "b25seSBpZiB0aGUga2VybmVsIGhhcyBQT1NJWCBBQ0wNCj4gc3VwcG9ydC4gIFdpdGhvdXQgaXQs\n" - "IHBvc2l4X2FjbF9jcmVhdGUoKSBpcyBhIGlzIGFuIGVtcHR5IGR1bW15DQo+IGZ1bmN0aW9uLg0K\n" - "PiANCj4gU28gbGV0J3Mgbm90IHByZXRlbmQgd2Ugd2lsbCBhcHBseSB0aGUgdW1hc2sgaWYgd2Ug\n" - "Y2FuIGFscmVhZHkga25vdw0KPiB0aGF0IHdlIHdpbGwgbmV2ZXIuDQo+IA0KPiBUaGlzIGZpeGVz\n" - "IGEgcHJvYmxlbSB3aGVyZSB0aGUgdW1hc2sgaXMgYWx3YXlzIGlnbm9yZWQgaW4gdGhlIE5GUw0K\n" - "PiBjbGllbnQgd2hlbiBjb21waWxlZCB3aXRob3V0IENPTkZJR19GU19QT1NJWF9BQ0wuICBUaGlz\n" - "IGlzIGEgNCB5ZWFyDQo+IG9sZCByZWdyZXNzaW9uIGNhdXNlZCBieSBjb21taXQgMDEzY2RmMTA4\n" - "OGQ3MjMgd2hpY2ggaXRzZWxmIHdhcyBub3QNCj4gY29tcGxldGVseSB3cm9uZywgYnV0IGZhaWxl\n" - "ZCB0byBjb25zaWRlciBhbGwgdGhlIHNpZGUgZWZmZWN0cyBieQ0KPiBtaXNkZXNpZ25lZCBWRlMg\n" - "Y29kZS4NCj4gDQo+IFRoZXJlIGFyZSB0d28gY29tcGlsZS10aW1lIGNoZWNrcyBhbmQgb25lIHJ1\n" - "bnRpbWUgY2hlY2s6DQo+IA0KPiAtIElmIENPTkZJR19GU19QT1NJWF9BQ0w9biwgdGhlbiBNU19Q\n" - "T1NJWEFDTCBpcyBuZXZlciBzZXQuDQo+IA0KPiAtIElmIENPTkZJR19GU19QT1NJWF9BQ0w9eSBh\n" - "bmQgQ09ORklHX05GU19WM19BQ0w9biwgdGhlbiBvbmx5IE5GU3Y0DQo+ICAgaGFzIEFDTCBzdXBw\n" - "b3J0IChhbmQgY2Fubm90IGJlIGRpc2FibGVkKSwgYW5kIHdlIG5lZWQgdG8gY2hlY2sgZm9yDQo+\n" - "ICAgInZlcnNpb249PTQiLg0KPiANCj4gLSBJZiBDT05GSUdfRlNfUE9TSVhfQUNMPXkgYW5kIENP\n" - "TkZJR19ORlNfVjNfQUNMPXksIE1TX1BPU0lYQUNMIGlzDQo+ICAgYWx3YXlzIHNldCwgYXMgYmVm\n" - "b3JlLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogTWF4IEtlbGxlcm1hbm4gPG1rQGNtNGFsbC5jb20+\n" - "DQo+IC0tLQ0KPiAgZnMvbmZzL3N1cGVyLmMgfCAgIDE1ICsrKysrKysrKysrLS0tLQ0KPiAgMSBm\n" - "aWxlIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZm\n" - "IC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYw0KPiBpbmRleCAyMTZmNjdk\n" - "NjI4YjMuLmVjNGUxZjI3NzVlMCAxMDA2NDQNCj4gLS0tIGEvZnMvbmZzL3N1cGVyLmMNCj4gKysr\n" - "IGIvZnMvbmZzL3N1cGVyLmMNCj4gQEAgLTIzMzgsMTAgKzIzMzgsMTcgQEAgdm9pZCBuZnNfZmls\n" - "bF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLA0KPiBzdHJ1Y3QgbmZzX21vdW50X2luZm8g\n" - "Km1vdW50X2luZm8pDQo+ICAJCXNiLT5zX2Jsb2Nrc2l6ZSA9IG5mc19ibG9ja19zaXplKGRhdGEt\n" - "PmJzaXplLCAmc2ItDQo+ID5zX2Jsb2Nrc2l6ZV9iaXRzKTsNCj4gIA0KPiAgCWlmIChzZXJ2ZXIt\n" - "Pm5mc19jbGllbnQtPnJwY19vcHMtPnZlcnNpb24gIT0gMikgew0KPiAtCQkvKiBUaGUgVkZTIHNo\n" - "b3VsZG4ndCBhcHBseSB0aGUgdW1hc2sgdG8gbW9kZSBiaXRzLg0KPiBXZSB3aWxsIGRvDQo+IC0J\n" - "CSAqIHNvIG91cnNlbHZlcyB3aGVuIG5lY2Vzc2FyeS4NCj4gLQkJICovDQo+IC0JCXNiLT5zX2Zs\n" - "YWdzIHw9IE1TX1BPU0lYQUNMOw0KPiArI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wNCj4gKyNp\n" - "Zm5kZWYgQ09ORklHX05GU19WM19BQ0wNCj4gKwkJaWYgKG5mc3MtPm5mc19jbGllbnQtPnJwY19v\n" - "cHMtPnZlcnNpb24gPT0gNCkNCj4gKyNlbmRpZg0KPiArCQkJLyogVGhlIFZGUyBzaG91bGRuJ3Qg\n" - "YXBwbHkgdGhlIHVtYXNrIHRvIG1vZGUNCj4gKwkJCSAqIGJpdHMuIFdlIHdpbGwgZG8gc28gb3Vy\n" - "c2VsdmVzIHdoZW4NCj4gKwkJCSAqIG5lY2Vzc2FyeS4NCj4gKwkJCSAqLw0KPiArCQkJc2ItPnNf\n" - "ZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7DQo+ICsjZW5kaWYNCj4gKw0KPiAgCQlzYi0+c190aW1lX2dy\n" - "YW4gPSAxOw0KPiAgCQlzYi0+c19leHBvcnRfb3AgPSAmbmZzX2V4cG9ydF9vcHM7DQo+ICAJfQ0K\n" - "DQpUaGUgYWJvdmUgaWxsdXN0cmF0ZXMgZXhhY3RseSB3aHkgSSd2ZSBhc2tlZCBwZW9wbGUgX25l\n" - "dmVyXyB0byBtYWtlDQphbnl0aGluZyBjb25kaXRpb25hbCBvbiBycGNfb3BzLT52ZXJzaW9uLiBQ\n" - "bGVhc2UgdXNlIGEgTkZTIGNhcGFiaWxpdHkNCihpLmUuIE5GU19TQihzYiktPmNhcHMpIGZvciB0\n" - "aGlzIGtpbmQgb2YgdGhpbmcuIFRoYXQgZXhwcmVzc2VzIHRoZQ0KY29uZGl0aW9uIGluIHRlcm1z\n" - "IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdlIHdhbnQgaW5zdGVhZCBvZiBhIHdoaW1zaWNhbA0KcHJv\n" - "dG9jb2wgdmVyc2lvbiBudW1iZXIuDQoNClRoYW5rcw0KICBUcm9uZA0KLS0gDQpUcm9uZCBNeWts\n" - "ZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGENCnRyb25kLm15\n" - a2xlYnVzdEBwcmltYXJ5ZGF0YS5jb20NCg== + "On Mon, 2018-01-15 at 18:30 +0100, Max Kellermann wrote:\n" + "> nfs/super: set MS_POSIXACL only if ACL support is enabled\n" + "> \n" + "> The code comment says \"We will [apply the umask] ourselves\", but that\n" + "> happens in posix_acl_create() only if the kernel has POSIX ACL\n" + "> support. Without it, posix_acl_create() is a is an empty dummy\n" + "> function.\n" + "> \n" + "> So let's not pretend we will apply the umask if we can already know\n" + "> that we will never.\n" + "> \n" + "> This fixes a problem where the umask is always ignored in the NFS\n" + "> client when compiled without CONFIG_FS_POSIX_ACL. This is a 4 year\n" + "> old regression caused by commit 013cdf1088d723 which itself was not\n" + "> completely wrong, but failed to consider all the side effects by\n" + "> misdesigned VFS code.\n" + "> \n" + "> There are two compile-time checks and one runtime check:\n" + "> \n" + "> - If CONFIG_FS_POSIX_ACL=n, then MS_POSIXACL is never set.\n" + "> \n" + "> - If CONFIG_FS_POSIX_ACL=y and CONFIG_NFS_V3_ACL=n, then only NFSv4\n" + "> has ACL support (and cannot be disabled), and we need to check for\n" + "> \"version==4\".\n" + "> \n" + "> - If CONFIG_FS_POSIX_ACL=y and CONFIG_NFS_V3_ACL=y, MS_POSIXACL is\n" + "> always set, as before.\n" + "> \n" + "> Signed-off-by: Max Kellermann <mk@cm4all.com>\n" + "> ---\n" + "> fs/nfs/super.c | 15 +++++++++++----\n" + "> 1 file changed, 11 insertions(+), 4 deletions(-)\n" + "> \n" + "> diff --git a/fs/nfs/super.c b/fs/nfs/super.c\n" + "> index 216f67d628b3..ec4e1f2775e0 100644\n" + "> --- a/fs/nfs/super.c\n" + "> +++ b/fs/nfs/super.c\n" + "> @@ -2338,10 +2338,17 @@ void nfs_fill_super(struct super_block *sb,\n" + "> struct nfs_mount_info *mount_info)\n" + "> \t\tsb->s_blocksize = nfs_block_size(data->bsize, &sb-\n" + "> >s_blocksize_bits);\n" + "> \n" + "> \tif (server->nfs_client->rpc_ops->version != 2) {\n" + "> -\t\t/* The VFS shouldn't apply the umask to mode bits.\n" + "> We will do\n" + "> -\t\t * so ourselves when necessary.\n" + "> -\t\t */\n" + "> -\t\tsb->s_flags |= MS_POSIXACL;\n" + "> +#ifdef CONFIG_FS_POSIX_ACL\n" + "> +#ifndef CONFIG_NFS_V3_ACL\n" + "> +\t\tif (nfss->nfs_client->rpc_ops->version == 4)\n" + "> +#endif\n" + "> +\t\t\t/* The VFS shouldn't apply the umask to mode\n" + "> +\t\t\t * bits. We will do so ourselves when\n" + "> +\t\t\t * necessary.\n" + "> +\t\t\t */\n" + "> +\t\t\tsb->s_flags |= MS_POSIXACL;\n" + "> +#endif\n" + "> +\n" + "> \t\tsb->s_time_gran = 1;\n" + "> \t\tsb->s_export_op = &nfs_export_ops;\n" + "> \t}\n" + "\n" + "The above illustrates exactly why I've asked people _never_ to make\n" + "anything conditional on rpc_ops->version. Please use a NFS capability\n" + "(i.e. NFS_SB(sb)->caps) for this kind of thing. That expresses the\n" + "condition in terms of the functionality we want instead of a whimsical\n" + "protocol version number.\n" + "\n" + "Thanks\n" + " Trond\n" + "-- \n" + "Trond Myklebust\n" + "Linux NFS client maintainer, PrimaryData\n" + trond.myklebust@primarydata.com -5cd612826d3944342db530d58f0ecfb4b3ab7078cb7ab17791b8beee3c527313 +810579295bfb94eeff8072a38d4fb7f0a1b3a0f0cca5632c6ce5e9501e9e1766
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.