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

diff --git a/a/1.txt b/N1/1.txt
index f74b743..c977ba7 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,162 +1,279 @@
-T24gV2VkLCAyMDE3LTA0LTEyIGF0IDEyOjI0ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gQWxs
-b2NhdGUgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGVtYmVk
-ZGluZyBpdA0KPiBpbnNpZGUgdGhlIHN1cGVyYmxvY2suIFRoaXMgdW5pZmllcyBoYW5kbGluZyBv
-ZiBiZGkgYW1vbmcgdXNlcnMuDQo+IA0KPiBDQzogVHJvbmQgTXlrbGVidXN0IDx0cm9uZC5teWts
-ZWJ1c3RAcHJpbWFyeWRhdGEuY29tPg0KPiBDQzogQW5uYSBTY2h1bWFrZXIgPGFubmEuc2NodW1h
-a2VyQG5ldGFwcC5jb20+DQo+IENDOiBsaW51eC1uZnNAdmdlci5rZXJuZWwub3JnDQo+IFJldmll
-d2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCj4gU2lnbmVkLW9mZi1ieTog
-SmFuIEthcmEgPGphY2tAc3VzZS5jej4NCj4gLS0tDQo+IMKgZnMvbmZzL2NsaWVudC5jwqDCoMKg
-wqDCoMKgwqDCoMKgwqDCoHwgMTAgLS0tLS0tLS0tLQ0KPiDCoGZzL25mcy9pbnRlcm5hbC5owqDC
-oMKgwqDCoMKgwqDCoMKgfMKgwqA2ICsrKy0tLQ0KPiDCoGZzL25mcy9zdXBlci5jwqDCoMKgwqDC
-oMKgwqDCoMKgwqDCoMKgfCAzNCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tDQo+
-IMKgZnMvbmZzL3dyaXRlLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDEzICsrKysrKy0tLS0t
-LS0NCj4gwqBpbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIHzCoMKgMSAtDQo+IMKgNSBmaWxlcyBj
-aGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1n
-aXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMNCj4gaW5kZXggMzkwYWRhODc0
-MWJjLi4wNGQxNWEwMDQ1ZTMgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9jbGllbnQuYw0KPiArKysg
-Yi9mcy9uZnMvY2xpZW50LmMNCj4gQEAgLTc2MSw5ICs3NjEsNiBAQCBzdGF0aWMgdm9pZCBuZnNf
-c2VydmVyX3NldF9mc2luZm8oc3RydWN0DQo+IG5mc19zZXJ2ZXIgKnNlcnZlciwNCj4gwqAJCXNl
-cnZlci0+cnNpemUgPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsNCj4gwqAJc2VydmVyLT5ycGFnZXMg
-PSAoc2VydmVyLT5yc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+DQo+IFBBR0VfU0hJRlQ7DQo+IMKg
-DQo+IC0Jc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvLm5hbWUgPSAibmZzIjsNCj4gLQlzZXJ2ZXIt
-PmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSBzZXJ2ZXItPnJwYWdlcyAqDQo+IE5GU19NQVhf
-UkVBREFIRUFEOw0KPiAtDQo+IMKgCWlmIChzZXJ2ZXItPndzaXplID4gbWF4X3JwY19wYXlsb2Fk
-KQ0KPiDCoAkJc2VydmVyLT53c2l6ZSA9IG1heF9ycGNfcGF5bG9hZDsNCj4gwqAJaWYgKHNlcnZl
-ci0+d3NpemUgPiBORlNfTUFYX0ZJTEVfSU9fU0laRSkNCj4gQEAgLTkxNywxMiArOTE0LDYgQEAg
-c3RydWN0IG5mc19zZXJ2ZXIgKm5mc19hbGxvY19zZXJ2ZXIodm9pZCkNCj4gwqAJCXJldHVybiBO
-VUxMOw0KPiDCoAl9DQo+IMKgDQo+IC0JaWYgKGJkaV9pbml0KCZzZXJ2ZXItPmJhY2tpbmdfZGV2
-X2luZm8pKSB7DQo+IC0JCW5mc19mcmVlX2lvc3RhdHMoc2VydmVyLT5pb19zdGF0cyk7DQo+IC0J
-CWtmcmVlKHNlcnZlcik7DQo+IC0JCXJldHVybiBOVUxMOw0KPiAtCX0NCj4gLQ0KPiDCoAlpZGFf
-aW5pdCgmc2VydmVyLT5vcGVub3duZXJfaWQpOw0KPiDCoAlpZGFfaW5pdCgmc2VydmVyLT5sb2Nr
-b3duZXJfaWQpOw0KPiDCoAlwbmZzX2luaXRfc2VydmVyKHNlcnZlcik7DQo+IEBAIC05NTMsNyAr
-OTQ0LDYgQEAgdm9pZCBuZnNfZnJlZV9zZXJ2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikN
-Cj4gwqAJaWRhX2Rlc3Ryb3koJnNlcnZlci0+bG9ja293bmVyX2lkKTsNCj4gwqAJaWRhX2Rlc3Ry
-b3koJnNlcnZlci0+b3Blbm93bmVyX2lkKTsNCj4gwqAJbmZzX2ZyZWVfaW9zdGF0cyhzZXJ2ZXIt
-PmlvX3N0YXRzKTsNCj4gLQliZGlfZGVzdHJveSgmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsN
-Cj4gwqAJa2ZyZWUoc2VydmVyKTsNCj4gwqAJbmZzX3JlbGVhc2VfYXV0b21vdW50X3RpbWVyKCk7
-DQo+IMKgCWRwcmludGsoIjwtLSBuZnNfZnJlZV9zZXJ2ZXIoKVxuIik7DQo+IGRpZmYgLS1naXQg
-YS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oDQo+IGluZGV4IDdiMzhmZWRi
-N2UwMy4uOWRjNjVkN2FlNzU0IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvaW50ZXJuYWwuaA0KPiAr
-KysgYi9mcy9uZnMvaW50ZXJuYWwuaA0KPiBAQCAtMTM5LDcgKzEzOSw3IEBAIHN0cnVjdCBuZnNf
-bW91bnRfcmVxdWVzdCB7DQo+IMKgfTsNCj4gwqANCj4gwqBzdHJ1Y3QgbmZzX21vdW50X2luZm8g
-ew0KPiAtCXZvaWQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0DQo+
-IG5mc19tb3VudF9pbmZvICopOw0KPiArCWludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9i
-bG9jayAqLCBzdHJ1Y3QNCj4gbmZzX21vdW50X2luZm8gKik7DQo+IMKgCWludCAoKnNldF9zZWN1
-cml0eSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBkZW50cnkgKiwNCj4gc3RydWN0IG5m
-c19tb3VudF9pbmZvICopOw0KPiDCoAlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpwYXJz
-ZWQ7DQo+IMKgCXN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKmNsb25lZDsNCj4gQEAgLTQwNyw3ICs0
-MDcsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpuZnNfZnNfbW91bnQoc3RydWN0DQo+IGZpbGVfc3lzdGVt
-X3R5cGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKg0KPiDCoHN0cnVjdCBkZW50cnkgKiBu
-ZnNfeGRldl9tb3VudF9jb21tb24oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwNCj4gaW50LA0K
-PiDCoAkJY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+IMKgdm9pZCBu
-ZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7DQo+IC12b2lkIG5mc19maWxsX3N1
-cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+ICtp
-bnQgbmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBuZnNfbW91bnRf
-aW5mbyAqKTsNCj4gwqANCj4gwqBleHRlcm4gc3RydWN0IHJwY19zdGF0IG5mc19ycGNzdGF0Ow0K
-PiDCoA0KPiBAQCAtNDU4LDcgKzQ1OCw3IEBAIGV4dGVybiB2b2lkIG5mc19yZWFkX3ByZXBhcmUo
-c3RydWN0IHJwY190YXNrDQo+ICp0YXNrLCB2b2lkICpjYWxsZGF0YSk7DQo+IMKgZXh0ZXJuIHZv
-aWQgbmZzX3BhZ2Vpb19yZXNldF9yZWFkX21kcyhzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9y
-DQo+ICpwZ2lvKTsNCj4gwqANCj4gwqAvKiBzdXBlci5jICovDQo+IC12b2lkIG5mc19jbG9uZV9z
-dXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IG5mc19tb3VudF9pbmZvICopOw0KPiAr
-aW50IG5mc19jbG9uZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IG5mc19tb3Vu
-dF9pbmZvICopOw0KPiDCoHZvaWQgbmZzX3Vtb3VudF9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sg
-Kik7DQo+IMKgaW50wqDCoG5mc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRm
-cyAqKTsNCj4gwqBpbnTCoMKgbmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3Ry
-dWN0IGRlbnRyeSAqKTsNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1
-cGVyLmMNCj4gaW5kZXggNTRlMGY5ZjJkZDk0Li44ZDk3YWE3MDQwN2UgMTAwNjQ0DQo+IC0tLSBh
-L2ZzL25mcy9zdXBlci5jDQo+ICsrKyBiL2ZzL25mcy9zdXBlci5jDQo+IEBAIC0yMzE1LDE4ICsy
-MzE1LDE3IEBAIGlubGluZSB2b2lkIG5mc19pbml0aWFsaXNlX3NiKHN0cnVjdA0KPiBzdXBlcl9i
-bG9jayAqc2IpDQo+IMKgCQlzYi0+c19ibG9ja3NpemUgPSBuZnNfYmxvY2tfYml0cyhzZXJ2ZXIt
-PndzaXplLA0KPiDCoAkJCQkJCcKgJnNiLQ0KPiA+c19ibG9ja3NpemVfYml0cyk7DQo+IMKgDQo+
-IC0Jc2ItPnNfYmRpID0gJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbzsNCj4gLQ0KPiDCoAluZnNf
-c3VwZXJfc2V0X21heGJ5dGVzKHNiLCBzZXJ2ZXItPm1heGZpbGVzaXplKTsNCj4gwqB9DQo+IMKg
-DQo+IMKgLyoNCj4gwqAgKiBGaW5pc2ggc2V0dGluZyB1cCBhbiBORlMyLzMgc3VwZXJibG9jaw0K
-PiDCoCAqLw0KPiAtdm9pZCBuZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBz
-dHJ1Y3QgbmZzX21vdW50X2luZm8NCj4gKm1vdW50X2luZm8pDQo+ICtpbnQgbmZzX2ZpbGxfc3Vw
-ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG5mc19tb3VudF9pbmZvDQo+ICptb3Vu
-dF9pbmZvKQ0KPiDCoHsNCj4gwqAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YSA9
-IG1vdW50X2luZm8tPnBhcnNlZDsNCj4gwqAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5G
-U19TQihzYik7DQo+ICsJaW50IHJldDsNCj4gwqANCj4gwqAJc2ItPnNfYmxvY2tzaXplX2JpdHMg
-PSAwOw0KPiDCoAlzYi0+c19ibG9ja3NpemUgPSAwOw0KPiBAQCAtMjM0NCwxMyArMjM0MywyMSBA
-QCB2b2lkIG5mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsDQo+IHN0cnVjdCBu
-ZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mbykNCj4gwqAJfQ0KPiDCoA0KPiDCoMKgCW5mc19pbml0
-aWFsaXNlX3NiKHNiKTsNCj4gKw0KPiArCXJldCA9IHN1cGVyX3NldHVwX2JkaV9uYW1lKHNiLCAi
-JXU6JXUiLCBNQUpPUihzZXJ2ZXItDQo+ID5zX2RldiksDQo+ICsJCQkJwqDCoMKgTUlOT1Ioc2Vy
-dmVyLT5zX2RldikpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsJc2ItPnNf
-YmRpLT5yYV9wYWdlcyA9IHNlcnZlci0+cnBhZ2VzICogTkZTX01BWF9SRUFEQUhFQUQ7DQo+ICsJ
-cmV0dXJuIDA7DQo+ICsNCj4gwqB9DQo+IMKgRVhQT1JUX1NZTUJPTF9HUEwobmZzX2ZpbGxfc3Vw
-ZXIpOw0KPiDCoA0KPiDCoC8qDQo+IMKgICogRmluaXNoIHNldHRpbmcgdXAgYSBjbG9uZWQgTkZT
-Mi8zLzQgc3VwZXJibG9jaw0KPiDCoCAqLw0KPiAtdm9pZCBuZnNfY2xvbmVfc3VwZXIoc3RydWN0
-IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG5mc19tb3VudF9pbmZvDQo+ICptb3VudF9pbmZvKQ0K
-PiAraW50IG5mc19jbG9uZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbmZz
-X21vdW50X2luZm8NCj4gKm1vdW50X2luZm8pDQo+IMKgew0KPiDCoAljb25zdCBzdHJ1Y3Qgc3Vw
-ZXJfYmxvY2sgKm9sZF9zYiA9IG1vdW50X2luZm8tPmNsb25lZC0+c2I7DQo+IMKgCXN0cnVjdCBu
-ZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Ioc2IpOw0KPiBAQCAtMjM3MCw2ICsyMzc3LDExIEBA
-IHZvaWQgbmZzX2Nsb25lX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsDQo+IHN0cnVjdCBu
-ZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mbykNCj4gwqAJfQ0KPiDCoA0KPiDCoMKgCW5mc19pbml0
-aWFsaXNlX3NiKHNiKTsNCj4gKw0KPiArCXNiLT5zX2JkaSA9IGJkaV9nZXQob2xkX3NiLT5zX2Jk
-aSk7DQo+ICsJc2ItPnNfaWZsYWdzIHw9IFNCX0lfRFlOQkRJOw0KPiArDQo+ICsJcmV0dXJuIDA7
-DQo+IMKgfQ0KPiDCoA0KPiDCoHN0YXRpYyBpbnQgbmZzX2NvbXBhcmVfbW91bnRfb3B0aW9ucyhj
-b25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsDQo+IGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpi
-LCBpbnQgZmxhZ3MpDQo+IEBAIC0yNTIyLDExICsyNTM0LDYgQEAgc3RhdGljIHZvaWQgbmZzX2dl
-dF9jYWNoZV9jb29raWUoc3RydWN0DQo+IHN1cGVyX2Jsb2NrICpzYiwNCj4gwqB9DQo+IMKgI2Vu
-ZGlmDQo+IMKgDQo+IC1zdGF0aWMgaW50IG5mc19iZGlfcmVnaXN0ZXIoc3RydWN0IG5mc19zZXJ2
-ZXIgKnNlcnZlcikNCj4gLXsNCj4gLQlyZXR1cm4gYmRpX3JlZ2lzdGVyX2Rldigmc2VydmVyLT5i
-YWNraW5nX2Rldl9pbmZvLCBzZXJ2ZXItDQo+ID5zX2Rldik7DQo+IC19DQo+IC0NCj4gwqBpbnQg
-bmZzX3NldF9zYl9zZWN1cml0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBkZW50cnkN
-Cj4gKm1udHJvb3QsDQo+IMKgCQkJc3RydWN0IG5mc19tb3VudF9pbmZvICptb3VudF9pbmZvKQ0K
-PiDCoHsNCj4gQEAgLTI1OTQsMTcgKzI2MDEsMTQgQEAgc3RydWN0IGRlbnRyeSAqbmZzX2ZzX21v
-dW50X2NvbW1vbihzdHJ1Y3QNCj4gbmZzX3NlcnZlciAqc2VydmVyLA0KPiDCoAkJbmZzX2ZyZWVf
-c2VydmVyKHNlcnZlcik7DQo+IMKgCQlzZXJ2ZXIgPSBOVUxMOw0KPiDCoAl9IGVsc2Ugew0KPiAt
-CQllcnJvciA9IG5mc19iZGlfcmVnaXN0ZXIoc2VydmVyKTsNCj4gLQkJaWYgKGVycm9yKSB7DQo+
-IC0JCQltbnRyb290ID0gRVJSX1BUUihlcnJvcik7DQo+IC0JCQlnb3RvIGVycm9yX3NwbGF0X3N1
-cGVyOw0KPiAtCQl9DQo+IMKgCQlzZXJ2ZXItPnN1cGVyID0gczsNCj4gwqAJfQ0KPiDCoA0KPiDC
-oAlpZiAoIXMtPnNfcm9vdCkgew0KPiDCoAkJLyogaW5pdGlhbCBzdXBlcmJsb2NrL3Jvb3QgY3Jl
-YXRpb24gKi8NCj4gLQkJbW91bnRfaW5mby0+ZmlsbF9zdXBlcihzLCBtb3VudF9pbmZvKTsNCj4g
-KwkJZXJyb3IgPSBtb3VudF9pbmZvLT5maWxsX3N1cGVyKHMsIG1vdW50X2luZm8pOw0KPiArCQlp
-ZiAoZXJyb3IpDQo+ICsJCQlnb3RvIGVycm9yX3NwbGF0X3N1cGVyOw0KPiDCoAkJbmZzX2dldF9j
-YWNoZV9jb29raWUocywgbW91bnRfaW5mby0+cGFyc2VkLA0KPiBtb3VudF9pbmZvLT5jbG9uZWQp
-Ow0KPiDCoAl9DQo+IMKgDQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93
-cml0ZS5jDQo+IGluZGV4IGFiYjJjOGEzYmU0Mi4uY2MzNDFmYzdmZDQ0IDEwMDY0NA0KPiAtLS0g
-YS9mcy9uZnMvd3JpdGUuYw0KPiArKysgYi9mcy9uZnMvd3JpdGUuYw0KPiBAQCAtMjYzLDE2ICsy
-NjMsMTUgQEAgaW50IG5mc19jb25nZXN0aW9uX2tiOw0KPiDCoA0KPiDCoHN0YXRpYyB2b2lkIG5m
-c19zZXRfcGFnZV93cml0ZWJhY2soc3RydWN0IHBhZ2UgKnBhZ2UpDQo+IMKgew0KPiAtCXN0cnVj
-dCBuZnNfc2VydmVyICpuZnNzID0NCj4gTkZTX1NFUlZFUihwYWdlX2ZpbGVfbWFwcGluZyhwYWdl
-KS0+aG9zdCk7DQo+ICsJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2VfZmlsZV9tYXBwaW5nKHBh
-Z2UpLT5ob3N0Ow0KPiArCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NFUlZFUihpbm9k
-ZSk7DQo+IMKgCWludCByZXQgPSB0ZXN0X3NldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsNCj4gwqAN
-Cj4gwqAJV0FSTl9PTl9PTkNFKHJldCAhPSAwKTsNCj4gwqANCj4gwqAJaWYgKGF0b21pY19sb25n
-X2luY19yZXR1cm4oJm5mc3MtPndyaXRlYmFjaykgPg0KPiAtCQkJTkZTX0NPTkdFU1RJT05fT05f
-VEhSRVNIKSB7DQo+IC0JCXNldF9iZGlfY29uZ2VzdGVkKCZuZnNzLT5iYWNraW5nX2Rldl9pbmZv
-LA0KPiAtCQkJCQlCTEtfUldfQVNZTkMpOw0KPiAtCX0NCj4gKwkJCU5GU19DT05HRVNUSU9OX09O
-X1RIUkVTSCkNCj4gKwkJc2V0X2JkaV9jb25nZXN0ZWQoaW5vZGVfdG9fYmRpKGlub2RlKSwNCj4g
-QkxLX1JXX0FTWU5DKTsNCj4gwqB9DQo+IMKgDQo+IMKgc3RhdGljIHZvaWQgbmZzX2VuZF9wYWdl
-X3dyaXRlYmFjayhzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkNCj4gQEAgLTI4NSw3ICsyODQsNyBAQCBz
-dGF0aWMgdm9pZCBuZnNfZW5kX3BhZ2Vfd3JpdGViYWNrKHN0cnVjdA0KPiBuZnNfcGFnZSAqcmVx
-KQ0KPiDCoA0KPiDCoAllbmRfcGFnZV93cml0ZWJhY2socmVxLT53Yl9wYWdlKTsNCj4gwqAJaWYg
-KGF0b21pY19sb25nX2RlY19yZXR1cm4oJm5mc3MtPndyaXRlYmFjaykgPA0KPiBORlNfQ09OR0VT
-VElPTl9PRkZfVEhSRVNIKQ0KPiAtCQljbGVhcl9iZGlfY29uZ2VzdGVkKCZuZnNzLT5iYWNraW5n
-X2Rldl9pbmZvLA0KPiBCTEtfUldfQVNZTkMpOw0KPiArCQljbGVhcl9iZGlfY29uZ2VzdGVkKGlu
-b2RlX3RvX2JkaShpbm9kZSksDQo+IEJMS19SV19BU1lOQyk7DQo+IMKgfQ0KPiDCoA0KPiDCoA0K
-PiBAQCAtMTgwOCw3ICsxODA3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2NvbW1pdF9yZWxlYXNlX3Bh
-Z2VzKHN0cnVjdA0KPiBuZnNfY29tbWl0X2RhdGEgKmRhdGEpDQo+IMKgCX0NCj4gwqAJbmZzcyA9
-IE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpOw0KPiDCoAlpZiAoYXRvbWljX2xvbmdfcmVhZCgmbmZz
-cy0+d3JpdGViYWNrKSA8DQo+IE5GU19DT05HRVNUSU9OX09GRl9USFJFU0gpDQo+IC0JCWNsZWFy
-X2JkaV9jb25nZXN0ZWQoJm5mc3MtPmJhY2tpbmdfZGV2X2luZm8sDQo+IEJMS19SV19BU1lOQyk7
-DQo+ICsJCWNsZWFyX2JkaV9jb25nZXN0ZWQoaW5vZGVfdG9fYmRpKGRhdGEtPmlub2RlKSwNCj4g
-QkxLX1JXX0FTWU5DKTsNCj4gwqANCj4gwqAJbmZzX2luaXRfY2luZm8oJmNpbmZvLCBkYXRhLT5p
-bm9kZSwgZGF0YS0+ZHJlcSk7DQo+IMKgCW5mc19jb21taXRfZW5kKGNpbmZvLm1kcyk7DQo+IGRp
-ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNf
-ZnNfc2IuaA0KPiBpbmRleCBiMzQwOTdjNjc4NDguLmUxNTAyYzU1NzQxZSAxMDA2NDQNCj4gLS0t
-IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L25mc19m
-c19zYi5oDQo+IEBAIC0xMzMsNyArMTMzLDYgQEAgc3RydWN0IG5mc19zZXJ2ZXIgew0KPiDCoAlz
-dHJ1Y3QgcnBjX2NsbnQgKgljbGllbnRfYWNsOwkvKiBBQ0wgUlBDDQo+IGNsaWVudCBoYW5kbGUg
-Ki8NCj4gwqAJc3RydWN0IG5sbV9ob3N0CQkqbmxtX2hvc3Q7CS8qIE5MTQ0KPiBjbGllbnQgaGFu
-ZGxlICovDQo+IMKgCXN0cnVjdCBuZnNfaW9zdGF0cyBfX3BlcmNwdSAqaW9fc3RhdHM7CS8qIEkv
-Tw0KPiBzdGF0aXN0aWNzICovDQo+IC0Jc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JYmFja2luZ19k
-ZXZfaW5mbzsNCj4gwqAJYXRvbWljX2xvbmdfdAkJd3JpdGViYWNrOwkvKiBudW1iZXIgb2YNCj4g
-d3JpdGViYWNrIHBhZ2VzICovDQo+IMKgCWludAkJCWZsYWdzOwkJLyogdmFyaW91cw0KPiBmbGFn
-cyAqLw0KPiDCoAl1bnNpZ25lZCBpbnQJCWNhcHM7CQkvKiBzZXJ2ZXINCj4gY2FwYWJpbGl0aWVz
-ICovDQoNCkFja2VkLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBwcmltYXJ5
-ZGF0YS5jb20+DQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50
-YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tDQo=
+On Wed, 2017-04-12 at 12:24 +0200, Jan Kara wrote:
+> Allocate struct backing_dev_info separately instead of embedding it
+> inside the superblock. This unifies handling of bdi among users.
+> 
+> CC: Trond Myklebust <trond.myklebust@primarydata.com>
+> CC: Anna Schumaker <anna.schumaker@netapp.com>
+> CC: linux-nfs@vger.kernel.org
+> Reviewed-by: Christoph Hellwig <hch@lst.de>
+> Signed-off-by: Jan Kara <jack@suse.cz>
+> ---
+>  fs/nfs/client.c           | 10 ----------
+>  fs/nfs/internal.h         |  6 +++---
+>  fs/nfs/super.c            | 34 +++++++++++++++++++---------------
+>  fs/nfs/write.c            | 13 ++++++-------
+>  include/linux/nfs_fs_sb.h |  1 -
+>  5 files changed, 28 insertions(+), 36 deletions(-)
+> 
+> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
+> index 390ada8741bc..04d15a0045e3 100644
+> --- a/fs/nfs/client.c
+> +++ b/fs/nfs/client.c
+> @@ -761,9 +761,6 @@ static void nfs_server_set_fsinfo(struct
+> nfs_server *server,
+>  		server->rsize = NFS_MAX_FILE_IO_SIZE;
+>  	server->rpages = (server->rsize + PAGE_SIZE - 1) >>
+> PAGE_SHIFT;
+>  
+> -	server->backing_dev_info.name = "nfs";
+> -	server->backing_dev_info.ra_pages = server->rpages *
+> NFS_MAX_READAHEAD;
+> -
+>  	if (server->wsize > max_rpc_payload)
+>  		server->wsize = max_rpc_payload;
+>  	if (server->wsize > NFS_MAX_FILE_IO_SIZE)
+> @@ -917,12 +914,6 @@ struct nfs_server *nfs_alloc_server(void)
+>  		return NULL;
+>  	}
+>  
+> -	if (bdi_init(&server->backing_dev_info)) {
+> -		nfs_free_iostats(server->io_stats);
+> -		kfree(server);
+> -		return NULL;
+> -	}
+> -
+>  	ida_init(&server->openowner_id);
+>  	ida_init(&server->lockowner_id);
+>  	pnfs_init_server(server);
+> @@ -953,7 +944,6 @@ void nfs_free_server(struct nfs_server *server)
+>  	ida_destroy(&server->lockowner_id);
+>  	ida_destroy(&server->openowner_id);
+>  	nfs_free_iostats(server->io_stats);
+> -	bdi_destroy(&server->backing_dev_info);
+>  	kfree(server);
+>  	nfs_release_automount_timer();
+>  	dprintk("<-- nfs_free_server()\n");
+> diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
+> index 7b38fedb7e03..9dc65d7ae754 100644
+> --- a/fs/nfs/internal.h
+> +++ b/fs/nfs/internal.h
+> @@ -139,7 +139,7 @@ struct nfs_mount_request {
+>  };
+>  
+>  struct nfs_mount_info {
+> -	void (*fill_super)(struct super_block *, struct
+> nfs_mount_info *);
+> +	int (*fill_super)(struct super_block *, struct
+> nfs_mount_info *);
+>  	int (*set_security)(struct super_block *, struct dentry *,
+> struct nfs_mount_info *);
+>  	struct nfs_parsed_mount_data *parsed;
+>  	struct nfs_clone_mount *cloned;
+> @@ -407,7 +407,7 @@ struct dentry *nfs_fs_mount(struct
+> file_system_type *, int, const char *, void *
+>  struct dentry * nfs_xdev_mount_common(struct file_system_type *,
+> int,
+>  		const char *, struct nfs_mount_info *);
+>  void nfs_kill_super(struct super_block *);
+> -void nfs_fill_super(struct super_block *, struct nfs_mount_info *);
+> +int nfs_fill_super(struct super_block *, struct nfs_mount_info *);
+>  
+>  extern struct rpc_stat nfs_rpcstat;
+>  
+> @@ -458,7 +458,7 @@ extern void nfs_read_prepare(struct rpc_task
+> *task, void *calldata);
+>  extern void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor
+> *pgio);
+>  
+>  /* super.c */
+> -void nfs_clone_super(struct super_block *, struct nfs_mount_info *);
+> +int nfs_clone_super(struct super_block *, struct nfs_mount_info *);
+>  void nfs_umount_begin(struct super_block *);
+>  int  nfs_statfs(struct dentry *, struct kstatfs *);
+>  int  nfs_show_options(struct seq_file *, struct dentry *);
+> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
+> index 54e0f9f2dd94..8d97aa70407e 100644
+> --- a/fs/nfs/super.c
+> +++ b/fs/nfs/super.c
+> @@ -2315,18 +2315,17 @@ inline void nfs_initialise_sb(struct
+> super_block *sb)
+>  		sb->s_blocksize = nfs_block_bits(server->wsize,
+>  						 &sb-
+> >s_blocksize_bits);
+>  
+> -	sb->s_bdi = &server->backing_dev_info;
+> -
+>  	nfs_super_set_maxbytes(sb, server->maxfilesize);
+>  }
+>  
+>  /*
+>   * Finish setting up an NFS2/3 superblock
+>   */
+> -void nfs_fill_super(struct super_block *sb, struct nfs_mount_info
+> *mount_info)
+> +int nfs_fill_super(struct super_block *sb, struct nfs_mount_info
+> *mount_info)
+>  {
+>  	struct nfs_parsed_mount_data *data = mount_info->parsed;
+>  	struct nfs_server *server = NFS_SB(sb);
+> +	int ret;
+>  
+>  	sb->s_blocksize_bits = 0;
+>  	sb->s_blocksize = 0;
+> @@ -2344,13 +2343,21 @@ void nfs_fill_super(struct super_block *sb,
+> struct nfs_mount_info *mount_info)
+>  	}
+>  
+>   	nfs_initialise_sb(sb);
+> +
+> +	ret = super_setup_bdi_name(sb, "%u:%u", MAJOR(server-
+> >s_dev),
+> +				   MINOR(server->s_dev));
+> +	if (ret)
+> +		return ret;
+> +	sb->s_bdi->ra_pages = server->rpages * NFS_MAX_READAHEAD;
+> +	return 0;
+> +
+>  }
+>  EXPORT_SYMBOL_GPL(nfs_fill_super);
+>  
+>  /*
+>   * Finish setting up a cloned NFS2/3/4 superblock
+>   */
+> -void nfs_clone_super(struct super_block *sb, struct nfs_mount_info
+> *mount_info)
+> +int nfs_clone_super(struct super_block *sb, struct nfs_mount_info
+> *mount_info)
+>  {
+>  	const struct super_block *old_sb = mount_info->cloned->sb;
+>  	struct nfs_server *server = NFS_SB(sb);
+> @@ -2370,6 +2377,11 @@ void nfs_clone_super(struct super_block *sb,
+> struct nfs_mount_info *mount_info)
+>  	}
+>  
+>   	nfs_initialise_sb(sb);
+> +
+> +	sb->s_bdi = bdi_get(old_sb->s_bdi);
+> +	sb->s_iflags |= SB_I_DYNBDI;
+> +
+> +	return 0;
+>  }
+>  
+>  static int nfs_compare_mount_options(const struct super_block *s,
+> const struct nfs_server *b, int flags)
+> @@ -2522,11 +2534,6 @@ static void nfs_get_cache_cookie(struct
+> super_block *sb,
+>  }
+>  #endif
+>  
+> -static int nfs_bdi_register(struct nfs_server *server)
+> -{
+> -	return bdi_register_dev(&server->backing_dev_info, server-
+> >s_dev);
+> -}
+> -
+>  int nfs_set_sb_security(struct super_block *s, struct dentry
+> *mntroot,
+>  			struct nfs_mount_info *mount_info)
+>  {
+> @@ -2594,17 +2601,14 @@ struct dentry *nfs_fs_mount_common(struct
+> nfs_server *server,
+>  		nfs_free_server(server);
+>  		server = NULL;
+>  	} else {
+> -		error = nfs_bdi_register(server);
+> -		if (error) {
+> -			mntroot = ERR_PTR(error);
+> -			goto error_splat_super;
+> -		}
+>  		server->super = s;
+>  	}
+>  
+>  	if (!s->s_root) {
+>  		/* initial superblock/root creation */
+> -		mount_info->fill_super(s, mount_info);
+> +		error = mount_info->fill_super(s, mount_info);
+> +		if (error)
+> +			goto error_splat_super;
+>  		nfs_get_cache_cookie(s, mount_info->parsed,
+> mount_info->cloned);
+>  	}
+>  
+> diff --git a/fs/nfs/write.c b/fs/nfs/write.c
+> index abb2c8a3be42..cc341fc7fd44 100644
+> --- a/fs/nfs/write.c
+> +++ b/fs/nfs/write.c
+> @@ -263,16 +263,15 @@ int nfs_congestion_kb;
+>  
+>  static void nfs_set_page_writeback(struct page *page)
+>  {
+> -	struct nfs_server *nfss =
+> NFS_SERVER(page_file_mapping(page)->host);
+> +	struct inode *inode = page_file_mapping(page)->host;
+> +	struct nfs_server *nfss = NFS_SERVER(inode);
+>  	int ret = test_set_page_writeback(page);
+>  
+>  	WARN_ON_ONCE(ret != 0);
+>  
+>  	if (atomic_long_inc_return(&nfss->writeback) >
+> -			NFS_CONGESTION_ON_THRESH) {
+> -		set_bdi_congested(&nfss->backing_dev_info,
+> -					BLK_RW_ASYNC);
+> -	}
+> +			NFS_CONGESTION_ON_THRESH)
+> +		set_bdi_congested(inode_to_bdi(inode),
+> BLK_RW_ASYNC);
+>  }
+>  
+>  static void nfs_end_page_writeback(struct nfs_page *req)
+> @@ -285,7 +284,7 @@ static void nfs_end_page_writeback(struct
+> nfs_page *req)
+>  
+>  	end_page_writeback(req->wb_page);
+>  	if (atomic_long_dec_return(&nfss->writeback) <
+> NFS_CONGESTION_OFF_THRESH)
+> -		clear_bdi_congested(&nfss->backing_dev_info,
+> BLK_RW_ASYNC);
+> +		clear_bdi_congested(inode_to_bdi(inode),
+> BLK_RW_ASYNC);
+>  }
+>  
+>  
+> @@ -1808,7 +1807,7 @@ static void nfs_commit_release_pages(struct
+> nfs_commit_data *data)
+>  	}
+>  	nfss = NFS_SERVER(data->inode);
+>  	if (atomic_long_read(&nfss->writeback) <
+> NFS_CONGESTION_OFF_THRESH)
+> -		clear_bdi_congested(&nfss->backing_dev_info,
+> BLK_RW_ASYNC);
+> +		clear_bdi_congested(inode_to_bdi(data->inode),
+> BLK_RW_ASYNC);
+>  
+>  	nfs_init_cinfo(&cinfo, data->inode, data->dreq);
+>  	nfs_commit_end(cinfo.mds);
+> diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
+> index b34097c67848..e1502c55741e 100644
+> --- a/include/linux/nfs_fs_sb.h
+> +++ b/include/linux/nfs_fs_sb.h
+> @@ -133,7 +133,6 @@ struct nfs_server {
+>  	struct rpc_clnt *	client_acl;	/* ACL RPC
+> client handle */
+>  	struct nlm_host		*nlm_host;	/* NLM
+> client handle */
+>  	struct nfs_iostats __percpu *io_stats;	/* I/O
+> statistics */
+> -	struct backing_dev_info	backing_dev_info;
+>  	atomic_long_t		writeback;	/* number of
+> writeback pages */
+>  	int			flags;		/* various
+> flags */
+>  	unsigned int		caps;		/* server
+> capabilities */
+
+Acked-by: Trond Myklebust <trond.myklebust@primarydata.com>
+
+-- 
+Trond Myklebust
+Linux NFS client maintainer, PrimaryData
+trond.myklebust@primarydata.com
diff --git a/a/content_digest b/N1/content_digest
index cb32cf0..068ee85 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -12,167 +12,284 @@
  " linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org>\0"
  "\00:1\0"
  "b\0"
- "T24gV2VkLCAyMDE3LTA0LTEyIGF0IDEyOjI0ICswMjAwLCBKYW4gS2FyYSB3cm90ZToNCj4gQWxs\n"
- "b2NhdGUgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGVtYmVk\n"
- "ZGluZyBpdA0KPiBpbnNpZGUgdGhlIHN1cGVyYmxvY2suIFRoaXMgdW5pZmllcyBoYW5kbGluZyBv\n"
- "ZiBiZGkgYW1vbmcgdXNlcnMuDQo+IA0KPiBDQzogVHJvbmQgTXlrbGVidXN0IDx0cm9uZC5teWts\n"
- "ZWJ1c3RAcHJpbWFyeWRhdGEuY29tPg0KPiBDQzogQW5uYSBTY2h1bWFrZXIgPGFubmEuc2NodW1h\n"
- "a2VyQG5ldGFwcC5jb20+DQo+IENDOiBsaW51eC1uZnNAdmdlci5rZXJuZWwub3JnDQo+IFJldmll\n"
- "d2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCj4gU2lnbmVkLW9mZi1ieTog\n"
- "SmFuIEthcmEgPGphY2tAc3VzZS5jej4NCj4gLS0tDQo+IMKgZnMvbmZzL2NsaWVudC5jwqDCoMKg\n"
- "wqDCoMKgwqDCoMKgwqDCoHwgMTAgLS0tLS0tLS0tLQ0KPiDCoGZzL25mcy9pbnRlcm5hbC5owqDC\n"
- "oMKgwqDCoMKgwqDCoMKgfMKgwqA2ICsrKy0tLQ0KPiDCoGZzL25mcy9zdXBlci5jwqDCoMKgwqDC\n"
- "oMKgwqDCoMKgwqDCoMKgfCAzNCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tDQo+\n"
- "IMKgZnMvbmZzL3dyaXRlLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDEzICsrKysrKy0tLS0t\n"
- "LS0NCj4gwqBpbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIHzCoMKgMSAtDQo+IMKgNSBmaWxlcyBj\n"
- "aGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1n\n"
- "aXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMNCj4gaW5kZXggMzkwYWRhODc0\n"
- "MWJjLi4wNGQxNWEwMDQ1ZTMgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9jbGllbnQuYw0KPiArKysg\n"
- "Yi9mcy9uZnMvY2xpZW50LmMNCj4gQEAgLTc2MSw5ICs3NjEsNiBAQCBzdGF0aWMgdm9pZCBuZnNf\n"
- "c2VydmVyX3NldF9mc2luZm8oc3RydWN0DQo+IG5mc19zZXJ2ZXIgKnNlcnZlciwNCj4gwqAJCXNl\n"
- "cnZlci0+cnNpemUgPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsNCj4gwqAJc2VydmVyLT5ycGFnZXMg\n"
- "PSAoc2VydmVyLT5yc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+DQo+IFBBR0VfU0hJRlQ7DQo+IMKg\n"
- "DQo+IC0Jc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvLm5hbWUgPSAibmZzIjsNCj4gLQlzZXJ2ZXIt\n"
- "PmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSBzZXJ2ZXItPnJwYWdlcyAqDQo+IE5GU19NQVhf\n"
- "UkVBREFIRUFEOw0KPiAtDQo+IMKgCWlmIChzZXJ2ZXItPndzaXplID4gbWF4X3JwY19wYXlsb2Fk\n"
- "KQ0KPiDCoAkJc2VydmVyLT53c2l6ZSA9IG1heF9ycGNfcGF5bG9hZDsNCj4gwqAJaWYgKHNlcnZl\n"
- "ci0+d3NpemUgPiBORlNfTUFYX0ZJTEVfSU9fU0laRSkNCj4gQEAgLTkxNywxMiArOTE0LDYgQEAg\n"
- "c3RydWN0IG5mc19zZXJ2ZXIgKm5mc19hbGxvY19zZXJ2ZXIodm9pZCkNCj4gwqAJCXJldHVybiBO\n"
- "VUxMOw0KPiDCoAl9DQo+IMKgDQo+IC0JaWYgKGJkaV9pbml0KCZzZXJ2ZXItPmJhY2tpbmdfZGV2\n"
- "X2luZm8pKSB7DQo+IC0JCW5mc19mcmVlX2lvc3RhdHMoc2VydmVyLT5pb19zdGF0cyk7DQo+IC0J\n"
- "CWtmcmVlKHNlcnZlcik7DQo+IC0JCXJldHVybiBOVUxMOw0KPiAtCX0NCj4gLQ0KPiDCoAlpZGFf\n"
- "aW5pdCgmc2VydmVyLT5vcGVub3duZXJfaWQpOw0KPiDCoAlpZGFfaW5pdCgmc2VydmVyLT5sb2Nr\n"
- "b3duZXJfaWQpOw0KPiDCoAlwbmZzX2luaXRfc2VydmVyKHNlcnZlcik7DQo+IEBAIC05NTMsNyAr\n"
- "OTQ0LDYgQEAgdm9pZCBuZnNfZnJlZV9zZXJ2ZXIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikN\n"
- "Cj4gwqAJaWRhX2Rlc3Ryb3koJnNlcnZlci0+bG9ja293bmVyX2lkKTsNCj4gwqAJaWRhX2Rlc3Ry\n"
- "b3koJnNlcnZlci0+b3Blbm93bmVyX2lkKTsNCj4gwqAJbmZzX2ZyZWVfaW9zdGF0cyhzZXJ2ZXIt\n"
- "PmlvX3N0YXRzKTsNCj4gLQliZGlfZGVzdHJveSgmc2VydmVyLT5iYWNraW5nX2Rldl9pbmZvKTsN\n"
- "Cj4gwqAJa2ZyZWUoc2VydmVyKTsNCj4gwqAJbmZzX3JlbGVhc2VfYXV0b21vdW50X3RpbWVyKCk7\n"
- "DQo+IMKgCWRwcmludGsoIjwtLSBuZnNfZnJlZV9zZXJ2ZXIoKVxuIik7DQo+IGRpZmYgLS1naXQg\n"
- "YS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oDQo+IGluZGV4IDdiMzhmZWRi\n"
- "N2UwMy4uOWRjNjVkN2FlNzU0IDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvaW50ZXJuYWwuaA0KPiAr\n"
- "KysgYi9mcy9uZnMvaW50ZXJuYWwuaA0KPiBAQCAtMTM5LDcgKzEzOSw3IEBAIHN0cnVjdCBuZnNf\n"
- "bW91bnRfcmVxdWVzdCB7DQo+IMKgfTsNCj4gwqANCj4gwqBzdHJ1Y3QgbmZzX21vdW50X2luZm8g\n"
- "ew0KPiAtCXZvaWQgKCpmaWxsX3N1cGVyKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0DQo+\n"
- "IG5mc19tb3VudF9pbmZvICopOw0KPiArCWludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9i\n"
- "bG9jayAqLCBzdHJ1Y3QNCj4gbmZzX21vdW50X2luZm8gKik7DQo+IMKgCWludCAoKnNldF9zZWN1\n"
- "cml0eSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBkZW50cnkgKiwNCj4gc3RydWN0IG5m\n"
- "c19tb3VudF9pbmZvICopOw0KPiDCoAlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpwYXJz\n"
- "ZWQ7DQo+IMKgCXN0cnVjdCBuZnNfY2xvbmVfbW91bnQgKmNsb25lZDsNCj4gQEAgLTQwNyw3ICs0\n"
- "MDcsNyBAQCBzdHJ1Y3QgZGVudHJ5ICpuZnNfZnNfbW91bnQoc3RydWN0DQo+IGZpbGVfc3lzdGVt\n"
- "X3R5cGUgKiwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKg0KPiDCoHN0cnVjdCBkZW50cnkgKiBu\n"
- "ZnNfeGRldl9tb3VudF9jb21tb24oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwNCj4gaW50LA0K\n"
- "PiDCoAkJY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+IMKgdm9pZCBu\n"
- "ZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7DQo+IC12b2lkIG5mc19maWxsX3N1\n"
- "cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgbmZzX21vdW50X2luZm8gKik7DQo+ICtp\n"
- "bnQgbmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBuZnNfbW91bnRf\n"
- "aW5mbyAqKTsNCj4gwqANCj4gwqBleHRlcm4gc3RydWN0IHJwY19zdGF0IG5mc19ycGNzdGF0Ow0K\n"
- "PiDCoA0KPiBAQCAtNDU4LDcgKzQ1OCw3IEBAIGV4dGVybiB2b2lkIG5mc19yZWFkX3ByZXBhcmUo\n"
- "c3RydWN0IHJwY190YXNrDQo+ICp0YXNrLCB2b2lkICpjYWxsZGF0YSk7DQo+IMKgZXh0ZXJuIHZv\n"
- "aWQgbmZzX3BhZ2Vpb19yZXNldF9yZWFkX21kcyhzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9y\n"
- "DQo+ICpwZ2lvKTsNCj4gwqANCj4gwqAvKiBzdXBlci5jICovDQo+IC12b2lkIG5mc19jbG9uZV9z\n"
- "dXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IG5mc19tb3VudF9pbmZvICopOw0KPiAr\n"
- "aW50IG5mc19jbG9uZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IG5mc19tb3Vu\n"
- "dF9pbmZvICopOw0KPiDCoHZvaWQgbmZzX3Vtb3VudF9iZWdpbihzdHJ1Y3Qgc3VwZXJfYmxvY2sg\n"
- "Kik7DQo+IMKgaW50wqDCoG5mc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRm\n"
- "cyAqKTsNCj4gwqBpbnTCoMKgbmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3Ry\n"
- "dWN0IGRlbnRyeSAqKTsNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1\n"
- "cGVyLmMNCj4gaW5kZXggNTRlMGY5ZjJkZDk0Li44ZDk3YWE3MDQwN2UgMTAwNjQ0DQo+IC0tLSBh\n"
- "L2ZzL25mcy9zdXBlci5jDQo+ICsrKyBiL2ZzL25mcy9zdXBlci5jDQo+IEBAIC0yMzE1LDE4ICsy\n"
- "MzE1LDE3IEBAIGlubGluZSB2b2lkIG5mc19pbml0aWFsaXNlX3NiKHN0cnVjdA0KPiBzdXBlcl9i\n"
- "bG9jayAqc2IpDQo+IMKgCQlzYi0+c19ibG9ja3NpemUgPSBuZnNfYmxvY2tfYml0cyhzZXJ2ZXIt\n"
- "PndzaXplLA0KPiDCoAkJCQkJCcKgJnNiLQ0KPiA+c19ibG9ja3NpemVfYml0cyk7DQo+IMKgDQo+\n"
- "IC0Jc2ItPnNfYmRpID0gJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbzsNCj4gLQ0KPiDCoAluZnNf\n"
- "c3VwZXJfc2V0X21heGJ5dGVzKHNiLCBzZXJ2ZXItPm1heGZpbGVzaXplKTsNCj4gwqB9DQo+IMKg\n"
- "DQo+IMKgLyoNCj4gwqAgKiBGaW5pc2ggc2V0dGluZyB1cCBhbiBORlMyLzMgc3VwZXJibG9jaw0K\n"
- "PiDCoCAqLw0KPiAtdm9pZCBuZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBz\n"
- "dHJ1Y3QgbmZzX21vdW50X2luZm8NCj4gKm1vdW50X2luZm8pDQo+ICtpbnQgbmZzX2ZpbGxfc3Vw\n"
- "ZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG5mc19tb3VudF9pbmZvDQo+ICptb3Vu\n"
- "dF9pbmZvKQ0KPiDCoHsNCj4gwqAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YSA9\n"
- "IG1vdW50X2luZm8tPnBhcnNlZDsNCj4gwqAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5G\n"
- "U19TQihzYik7DQo+ICsJaW50IHJldDsNCj4gwqANCj4gwqAJc2ItPnNfYmxvY2tzaXplX2JpdHMg\n"
- "PSAwOw0KPiDCoAlzYi0+c19ibG9ja3NpemUgPSAwOw0KPiBAQCAtMjM0NCwxMyArMjM0MywyMSBA\n"
- "QCB2b2lkIG5mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsDQo+IHN0cnVjdCBu\n"
- "ZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mbykNCj4gwqAJfQ0KPiDCoA0KPiDCoMKgCW5mc19pbml0\n"
- "aWFsaXNlX3NiKHNiKTsNCj4gKw0KPiArCXJldCA9IHN1cGVyX3NldHVwX2JkaV9uYW1lKHNiLCAi\n"
- "JXU6JXUiLCBNQUpPUihzZXJ2ZXItDQo+ID5zX2RldiksDQo+ICsJCQkJwqDCoMKgTUlOT1Ioc2Vy\n"
- "dmVyLT5zX2RldikpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsJc2ItPnNf\n"
- "YmRpLT5yYV9wYWdlcyA9IHNlcnZlci0+cnBhZ2VzICogTkZTX01BWF9SRUFEQUhFQUQ7DQo+ICsJ\n"
- "cmV0dXJuIDA7DQo+ICsNCj4gwqB9DQo+IMKgRVhQT1JUX1NZTUJPTF9HUEwobmZzX2ZpbGxfc3Vw\n"
- "ZXIpOw0KPiDCoA0KPiDCoC8qDQo+IMKgICogRmluaXNoIHNldHRpbmcgdXAgYSBjbG9uZWQgTkZT\n"
- "Mi8zLzQgc3VwZXJibG9jaw0KPiDCoCAqLw0KPiAtdm9pZCBuZnNfY2xvbmVfc3VwZXIoc3RydWN0\n"
- "IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG5mc19tb3VudF9pbmZvDQo+ICptb3VudF9pbmZvKQ0K\n"
- "PiAraW50IG5mc19jbG9uZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbmZz\n"
- "X21vdW50X2luZm8NCj4gKm1vdW50X2luZm8pDQo+IMKgew0KPiDCoAljb25zdCBzdHJ1Y3Qgc3Vw\n"
- "ZXJfYmxvY2sgKm9sZF9zYiA9IG1vdW50X2luZm8tPmNsb25lZC0+c2I7DQo+IMKgCXN0cnVjdCBu\n"
- "ZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0Ioc2IpOw0KPiBAQCAtMjM3MCw2ICsyMzc3LDExIEBA\n"
- "IHZvaWQgbmZzX2Nsb25lX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsDQo+IHN0cnVjdCBu\n"
- "ZnNfbW91bnRfaW5mbyAqbW91bnRfaW5mbykNCj4gwqAJfQ0KPiDCoA0KPiDCoMKgCW5mc19pbml0\n"
- "aWFsaXNlX3NiKHNiKTsNCj4gKw0KPiArCXNiLT5zX2JkaSA9IGJkaV9nZXQob2xkX3NiLT5zX2Jk\n"
- "aSk7DQo+ICsJc2ItPnNfaWZsYWdzIHw9IFNCX0lfRFlOQkRJOw0KPiArDQo+ICsJcmV0dXJuIDA7\n"
- "DQo+IMKgfQ0KPiDCoA0KPiDCoHN0YXRpYyBpbnQgbmZzX2NvbXBhcmVfbW91bnRfb3B0aW9ucyhj\n"
- "b25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsDQo+IGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpi\n"
- "LCBpbnQgZmxhZ3MpDQo+IEBAIC0yNTIyLDExICsyNTM0LDYgQEAgc3RhdGljIHZvaWQgbmZzX2dl\n"
- "dF9jYWNoZV9jb29raWUoc3RydWN0DQo+IHN1cGVyX2Jsb2NrICpzYiwNCj4gwqB9DQo+IMKgI2Vu\n"
- "ZGlmDQo+IMKgDQo+IC1zdGF0aWMgaW50IG5mc19iZGlfcmVnaXN0ZXIoc3RydWN0IG5mc19zZXJ2\n"
- "ZXIgKnNlcnZlcikNCj4gLXsNCj4gLQlyZXR1cm4gYmRpX3JlZ2lzdGVyX2Rldigmc2VydmVyLT5i\n"
- "YWNraW5nX2Rldl9pbmZvLCBzZXJ2ZXItDQo+ID5zX2Rldik7DQo+IC19DQo+IC0NCj4gwqBpbnQg\n"
- "bmZzX3NldF9zYl9zZWN1cml0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBkZW50cnkN\n"
- "Cj4gKm1udHJvb3QsDQo+IMKgCQkJc3RydWN0IG5mc19tb3VudF9pbmZvICptb3VudF9pbmZvKQ0K\n"
- "PiDCoHsNCj4gQEAgLTI1OTQsMTcgKzI2MDEsMTQgQEAgc3RydWN0IGRlbnRyeSAqbmZzX2ZzX21v\n"
- "dW50X2NvbW1vbihzdHJ1Y3QNCj4gbmZzX3NlcnZlciAqc2VydmVyLA0KPiDCoAkJbmZzX2ZyZWVf\n"
- "c2VydmVyKHNlcnZlcik7DQo+IMKgCQlzZXJ2ZXIgPSBOVUxMOw0KPiDCoAl9IGVsc2Ugew0KPiAt\n"
- "CQllcnJvciA9IG5mc19iZGlfcmVnaXN0ZXIoc2VydmVyKTsNCj4gLQkJaWYgKGVycm9yKSB7DQo+\n"
- "IC0JCQltbnRyb290ID0gRVJSX1BUUihlcnJvcik7DQo+IC0JCQlnb3RvIGVycm9yX3NwbGF0X3N1\n"
- "cGVyOw0KPiAtCQl9DQo+IMKgCQlzZXJ2ZXItPnN1cGVyID0gczsNCj4gwqAJfQ0KPiDCoA0KPiDC\n"
- "oAlpZiAoIXMtPnNfcm9vdCkgew0KPiDCoAkJLyogaW5pdGlhbCBzdXBlcmJsb2NrL3Jvb3QgY3Jl\n"
- "YXRpb24gKi8NCj4gLQkJbW91bnRfaW5mby0+ZmlsbF9zdXBlcihzLCBtb3VudF9pbmZvKTsNCj4g\n"
- "KwkJZXJyb3IgPSBtb3VudF9pbmZvLT5maWxsX3N1cGVyKHMsIG1vdW50X2luZm8pOw0KPiArCQlp\n"
- "ZiAoZXJyb3IpDQo+ICsJCQlnb3RvIGVycm9yX3NwbGF0X3N1cGVyOw0KPiDCoAkJbmZzX2dldF9j\n"
- "YWNoZV9jb29raWUocywgbW91bnRfaW5mby0+cGFyc2VkLA0KPiBtb3VudF9pbmZvLT5jbG9uZWQp\n"
- "Ow0KPiDCoAl9DQo+IMKgDQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93\n"
- "cml0ZS5jDQo+IGluZGV4IGFiYjJjOGEzYmU0Mi4uY2MzNDFmYzdmZDQ0IDEwMDY0NA0KPiAtLS0g\n"
- "YS9mcy9uZnMvd3JpdGUuYw0KPiArKysgYi9mcy9uZnMvd3JpdGUuYw0KPiBAQCAtMjYzLDE2ICsy\n"
- "NjMsMTUgQEAgaW50IG5mc19jb25nZXN0aW9uX2tiOw0KPiDCoA0KPiDCoHN0YXRpYyB2b2lkIG5m\n"
- "c19zZXRfcGFnZV93cml0ZWJhY2soc3RydWN0IHBhZ2UgKnBhZ2UpDQo+IMKgew0KPiAtCXN0cnVj\n"
- "dCBuZnNfc2VydmVyICpuZnNzID0NCj4gTkZTX1NFUlZFUihwYWdlX2ZpbGVfbWFwcGluZyhwYWdl\n"
- "KS0+aG9zdCk7DQo+ICsJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2VfZmlsZV9tYXBwaW5nKHBh\n"
- "Z2UpLT5ob3N0Ow0KPiArCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NFUlZFUihpbm9k\n"
- "ZSk7DQo+IMKgCWludCByZXQgPSB0ZXN0X3NldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsNCj4gwqAN\n"
- "Cj4gwqAJV0FSTl9PTl9PTkNFKHJldCAhPSAwKTsNCj4gwqANCj4gwqAJaWYgKGF0b21pY19sb25n\n"
- "X2luY19yZXR1cm4oJm5mc3MtPndyaXRlYmFjaykgPg0KPiAtCQkJTkZTX0NPTkdFU1RJT05fT05f\n"
- "VEhSRVNIKSB7DQo+IC0JCXNldF9iZGlfY29uZ2VzdGVkKCZuZnNzLT5iYWNraW5nX2Rldl9pbmZv\n"
- "LA0KPiAtCQkJCQlCTEtfUldfQVNZTkMpOw0KPiAtCX0NCj4gKwkJCU5GU19DT05HRVNUSU9OX09O\n"
- "X1RIUkVTSCkNCj4gKwkJc2V0X2JkaV9jb25nZXN0ZWQoaW5vZGVfdG9fYmRpKGlub2RlKSwNCj4g\n"
- "QkxLX1JXX0FTWU5DKTsNCj4gwqB9DQo+IMKgDQo+IMKgc3RhdGljIHZvaWQgbmZzX2VuZF9wYWdl\n"
- "X3dyaXRlYmFjayhzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkNCj4gQEAgLTI4NSw3ICsyODQsNyBAQCBz\n"
- "dGF0aWMgdm9pZCBuZnNfZW5kX3BhZ2Vfd3JpdGViYWNrKHN0cnVjdA0KPiBuZnNfcGFnZSAqcmVx\n"
- "KQ0KPiDCoA0KPiDCoAllbmRfcGFnZV93cml0ZWJhY2socmVxLT53Yl9wYWdlKTsNCj4gwqAJaWYg\n"
- "KGF0b21pY19sb25nX2RlY19yZXR1cm4oJm5mc3MtPndyaXRlYmFjaykgPA0KPiBORlNfQ09OR0VT\n"
- "VElPTl9PRkZfVEhSRVNIKQ0KPiAtCQljbGVhcl9iZGlfY29uZ2VzdGVkKCZuZnNzLT5iYWNraW5n\n"
- "X2Rldl9pbmZvLA0KPiBCTEtfUldfQVNZTkMpOw0KPiArCQljbGVhcl9iZGlfY29uZ2VzdGVkKGlu\n"
- "b2RlX3RvX2JkaShpbm9kZSksDQo+IEJMS19SV19BU1lOQyk7DQo+IMKgfQ0KPiDCoA0KPiDCoA0K\n"
- "PiBAQCAtMTgwOCw3ICsxODA3LDcgQEAgc3RhdGljIHZvaWQgbmZzX2NvbW1pdF9yZWxlYXNlX3Bh\n"
- "Z2VzKHN0cnVjdA0KPiBuZnNfY29tbWl0X2RhdGEgKmRhdGEpDQo+IMKgCX0NCj4gwqAJbmZzcyA9\n"
- "IE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpOw0KPiDCoAlpZiAoYXRvbWljX2xvbmdfcmVhZCgmbmZz\n"
- "cy0+d3JpdGViYWNrKSA8DQo+IE5GU19DT05HRVNUSU9OX09GRl9USFJFU0gpDQo+IC0JCWNsZWFy\n"
- "X2JkaV9jb25nZXN0ZWQoJm5mc3MtPmJhY2tpbmdfZGV2X2luZm8sDQo+IEJMS19SV19BU1lOQyk7\n"
- "DQo+ICsJCWNsZWFyX2JkaV9jb25nZXN0ZWQoaW5vZGVfdG9fYmRpKGRhdGEtPmlub2RlKSwNCj4g\n"
- "QkxLX1JXX0FTWU5DKTsNCj4gwqANCj4gwqAJbmZzX2luaXRfY2luZm8oJmNpbmZvLCBkYXRhLT5p\n"
- "bm9kZSwgZGF0YS0+ZHJlcSk7DQo+IMKgCW5mc19jb21taXRfZW5kKGNpbmZvLm1kcyk7DQo+IGRp\n"
- "ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNf\n"
- "ZnNfc2IuaA0KPiBpbmRleCBiMzQwOTdjNjc4NDguLmUxNTAyYzU1NzQxZSAxMDA2NDQNCj4gLS0t\n"
- "IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L25mc19m\n"
- "c19zYi5oDQo+IEBAIC0xMzMsNyArMTMzLDYgQEAgc3RydWN0IG5mc19zZXJ2ZXIgew0KPiDCoAlz\n"
- "dHJ1Y3QgcnBjX2NsbnQgKgljbGllbnRfYWNsOwkvKiBBQ0wgUlBDDQo+IGNsaWVudCBoYW5kbGUg\n"
- "Ki8NCj4gwqAJc3RydWN0IG5sbV9ob3N0CQkqbmxtX2hvc3Q7CS8qIE5MTQ0KPiBjbGllbnQgaGFu\n"
- "ZGxlICovDQo+IMKgCXN0cnVjdCBuZnNfaW9zdGF0cyBfX3BlcmNwdSAqaW9fc3RhdHM7CS8qIEkv\n"
- "Tw0KPiBzdGF0aXN0aWNzICovDQo+IC0Jc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JYmFja2luZ19k\n"
- "ZXZfaW5mbzsNCj4gwqAJYXRvbWljX2xvbmdfdAkJd3JpdGViYWNrOwkvKiBudW1iZXIgb2YNCj4g\n"
- "d3JpdGViYWNrIHBhZ2VzICovDQo+IMKgCWludAkJCWZsYWdzOwkJLyogdmFyaW91cw0KPiBmbGFn\n"
- "cyAqLw0KPiDCoAl1bnNpZ25lZCBpbnQJCWNhcHM7CQkvKiBzZXJ2ZXINCj4gY2FwYWJpbGl0aWVz\n"
- "ICovDQoNCkFja2VkLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPHRyb25kLm15a2xlYnVzdEBwcmltYXJ5\n"
- "ZGF0YS5jb20+DQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50\n"
- YWluZXIsIFByaW1hcnlEYXRhDQp0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tDQo=
+ "On Wed, 2017-04-12 at 12:24 +0200, Jan Kara wrote:\n"
+ "> Allocate struct backing_dev_info separately instead of embedding it\n"
+ "> inside the superblock. This unifies handling of bdi among users.\n"
+ "> \n"
+ "> CC: Trond Myklebust <trond.myklebust@primarydata.com>\n"
+ "> CC: Anna Schumaker <anna.schumaker@netapp.com>\n"
+ "> CC: linux-nfs@vger.kernel.org\n"
+ "> Reviewed-by: Christoph Hellwig <hch@lst.de>\n"
+ "> Signed-off-by: Jan Kara <jack@suse.cz>\n"
+ "> ---\n"
+ "> \302\240fs/nfs/client.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 10 ----------\n"
+ "> \302\240fs/nfs/internal.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2406 +++---\n"
+ "> \302\240fs/nfs/super.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| 34 +++++++++++++++++++---------------\n"
+ "> \302\240fs/nfs/write.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| 13 ++++++-------\n"
+ "> \302\240include/linux/nfs_fs_sb.h |\302\240\302\2401 -\n"
+ "> \302\2405 files changed, 28 insertions(+), 36 deletions(-)\n"
+ "> \n"
+ "> diff --git a/fs/nfs/client.c b/fs/nfs/client.c\n"
+ "> index 390ada8741bc..04d15a0045e3 100644\n"
+ "> --- a/fs/nfs/client.c\n"
+ "> +++ b/fs/nfs/client.c\n"
+ "> @@ -761,9 +761,6 @@ static void nfs_server_set_fsinfo(struct\n"
+ "> nfs_server *server,\n"
+ "> \302\240\t\tserver->rsize = NFS_MAX_FILE_IO_SIZE;\n"
+ "> \302\240\tserver->rpages = (server->rsize + PAGE_SIZE - 1) >>\n"
+ "> PAGE_SHIFT;\n"
+ "> \302\240\n"
+ "> -\tserver->backing_dev_info.name = \"nfs\";\n"
+ "> -\tserver->backing_dev_info.ra_pages = server->rpages *\n"
+ "> NFS_MAX_READAHEAD;\n"
+ "> -\n"
+ "> \302\240\tif (server->wsize > max_rpc_payload)\n"
+ "> \302\240\t\tserver->wsize = max_rpc_payload;\n"
+ "> \302\240\tif (server->wsize > NFS_MAX_FILE_IO_SIZE)\n"
+ "> @@ -917,12 +914,6 @@ struct nfs_server *nfs_alloc_server(void)\n"
+ "> \302\240\t\treturn NULL;\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> -\tif (bdi_init(&server->backing_dev_info)) {\n"
+ "> -\t\tnfs_free_iostats(server->io_stats);\n"
+ "> -\t\tkfree(server);\n"
+ "> -\t\treturn NULL;\n"
+ "> -\t}\n"
+ "> -\n"
+ "> \302\240\tida_init(&server->openowner_id);\n"
+ "> \302\240\tida_init(&server->lockowner_id);\n"
+ "> \302\240\tpnfs_init_server(server);\n"
+ "> @@ -953,7 +944,6 @@ void nfs_free_server(struct nfs_server *server)\n"
+ "> \302\240\tida_destroy(&server->lockowner_id);\n"
+ "> \302\240\tida_destroy(&server->openowner_id);\n"
+ "> \302\240\tnfs_free_iostats(server->io_stats);\n"
+ "> -\tbdi_destroy(&server->backing_dev_info);\n"
+ "> \302\240\tkfree(server);\n"
+ "> \302\240\tnfs_release_automount_timer();\n"
+ "> \302\240\tdprintk(\"<-- nfs_free_server()\\n\");\n"
+ "> diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h\n"
+ "> index 7b38fedb7e03..9dc65d7ae754 100644\n"
+ "> --- a/fs/nfs/internal.h\n"
+ "> +++ b/fs/nfs/internal.h\n"
+ "> @@ -139,7 +139,7 @@ struct nfs_mount_request {\n"
+ "> \302\240};\n"
+ "> \302\240\n"
+ "> \302\240struct nfs_mount_info {\n"
+ "> -\tvoid (*fill_super)(struct super_block *, struct\n"
+ "> nfs_mount_info *);\n"
+ "> +\tint (*fill_super)(struct super_block *, struct\n"
+ "> nfs_mount_info *);\n"
+ "> \302\240\tint (*set_security)(struct super_block *, struct dentry *,\n"
+ "> struct nfs_mount_info *);\n"
+ "> \302\240\tstruct nfs_parsed_mount_data *parsed;\n"
+ "> \302\240\tstruct nfs_clone_mount *cloned;\n"
+ "> @@ -407,7 +407,7 @@ struct dentry *nfs_fs_mount(struct\n"
+ "> file_system_type *, int, const char *, void *\n"
+ "> \302\240struct dentry * nfs_xdev_mount_common(struct file_system_type *,\n"
+ "> int,\n"
+ "> \302\240\t\tconst char *, struct nfs_mount_info *);\n"
+ "> \302\240void nfs_kill_super(struct super_block *);\n"
+ "> -void nfs_fill_super(struct super_block *, struct nfs_mount_info *);\n"
+ "> +int nfs_fill_super(struct super_block *, struct nfs_mount_info *);\n"
+ "> \302\240\n"
+ "> \302\240extern struct rpc_stat nfs_rpcstat;\n"
+ "> \302\240\n"
+ "> @@ -458,7 +458,7 @@ extern void nfs_read_prepare(struct rpc_task\n"
+ "> *task, void *calldata);\n"
+ "> \302\240extern void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor\n"
+ "> *pgio);\n"
+ "> \302\240\n"
+ "> \302\240/* super.c */\n"
+ "> -void nfs_clone_super(struct super_block *, struct nfs_mount_info *);\n"
+ "> +int nfs_clone_super(struct super_block *, struct nfs_mount_info *);\n"
+ "> \302\240void nfs_umount_begin(struct super_block *);\n"
+ "> \302\240int\302\240\302\240nfs_statfs(struct dentry *, struct kstatfs *);\n"
+ "> \302\240int\302\240\302\240nfs_show_options(struct seq_file *, struct dentry *);\n"
+ "> diff --git a/fs/nfs/super.c b/fs/nfs/super.c\n"
+ "> index 54e0f9f2dd94..8d97aa70407e 100644\n"
+ "> --- a/fs/nfs/super.c\n"
+ "> +++ b/fs/nfs/super.c\n"
+ "> @@ -2315,18 +2315,17 @@ inline void nfs_initialise_sb(struct\n"
+ "> super_block *sb)\n"
+ "> \302\240\t\tsb->s_blocksize = nfs_block_bits(server->wsize,\n"
+ "> \302\240\t\t\t\t\t\t\302\240&sb-\n"
+ "> >s_blocksize_bits);\n"
+ "> \302\240\n"
+ "> -\tsb->s_bdi = &server->backing_dev_info;\n"
+ "> -\n"
+ "> \302\240\tnfs_super_set_maxbytes(sb, server->maxfilesize);\n"
+ "> \302\240}\n"
+ "> \302\240\n"
+ "> \302\240/*\n"
+ "> \302\240 * Finish setting up an NFS2/3 superblock\n"
+ "> \302\240 */\n"
+ "> -void nfs_fill_super(struct super_block *sb, struct nfs_mount_info\n"
+ "> *mount_info)\n"
+ "> +int nfs_fill_super(struct super_block *sb, struct nfs_mount_info\n"
+ "> *mount_info)\n"
+ "> \302\240{\n"
+ "> \302\240\tstruct nfs_parsed_mount_data *data = mount_info->parsed;\n"
+ "> \302\240\tstruct nfs_server *server = NFS_SB(sb);\n"
+ "> +\tint ret;\n"
+ "> \302\240\n"
+ "> \302\240\tsb->s_blocksize_bits = 0;\n"
+ "> \302\240\tsb->s_blocksize = 0;\n"
+ "> @@ -2344,13 +2343,21 @@ void nfs_fill_super(struct super_block *sb,\n"
+ "> struct nfs_mount_info *mount_info)\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> \302\240\302\240\tnfs_initialise_sb(sb);\n"
+ "> +\n"
+ "> +\tret = super_setup_bdi_name(sb, \"%u:%u\", MAJOR(server-\n"
+ "> >s_dev),\n"
+ "> +\t\t\t\t\302\240\302\240\302\240MINOR(server->s_dev));\n"
+ "> +\tif (ret)\n"
+ "> +\t\treturn ret;\n"
+ "> +\tsb->s_bdi->ra_pages = server->rpages * NFS_MAX_READAHEAD;\n"
+ "> +\treturn 0;\n"
+ "> +\n"
+ "> \302\240}\n"
+ "> \302\240EXPORT_SYMBOL_GPL(nfs_fill_super);\n"
+ "> \302\240\n"
+ "> \302\240/*\n"
+ "> \302\240 * Finish setting up a cloned NFS2/3/4 superblock\n"
+ "> \302\240 */\n"
+ "> -void nfs_clone_super(struct super_block *sb, struct nfs_mount_info\n"
+ "> *mount_info)\n"
+ "> +int nfs_clone_super(struct super_block *sb, struct nfs_mount_info\n"
+ "> *mount_info)\n"
+ "> \302\240{\n"
+ "> \302\240\tconst struct super_block *old_sb = mount_info->cloned->sb;\n"
+ "> \302\240\tstruct nfs_server *server = NFS_SB(sb);\n"
+ "> @@ -2370,6 +2377,11 @@ void nfs_clone_super(struct super_block *sb,\n"
+ "> struct nfs_mount_info *mount_info)\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> \302\240\302\240\tnfs_initialise_sb(sb);\n"
+ "> +\n"
+ "> +\tsb->s_bdi = bdi_get(old_sb->s_bdi);\n"
+ "> +\tsb->s_iflags |= SB_I_DYNBDI;\n"
+ "> +\n"
+ "> +\treturn 0;\n"
+ "> \302\240}\n"
+ "> \302\240\n"
+ "> \302\240static int nfs_compare_mount_options(const struct super_block *s,\n"
+ "> const struct nfs_server *b, int flags)\n"
+ "> @@ -2522,11 +2534,6 @@ static void nfs_get_cache_cookie(struct\n"
+ "> super_block *sb,\n"
+ "> \302\240}\n"
+ "> \302\240#endif\n"
+ "> \302\240\n"
+ "> -static int nfs_bdi_register(struct nfs_server *server)\n"
+ "> -{\n"
+ "> -\treturn bdi_register_dev(&server->backing_dev_info, server-\n"
+ "> >s_dev);\n"
+ "> -}\n"
+ "> -\n"
+ "> \302\240int nfs_set_sb_security(struct super_block *s, struct dentry\n"
+ "> *mntroot,\n"
+ "> \302\240\t\t\tstruct nfs_mount_info *mount_info)\n"
+ "> \302\240{\n"
+ "> @@ -2594,17 +2601,14 @@ struct dentry *nfs_fs_mount_common(struct\n"
+ "> nfs_server *server,\n"
+ "> \302\240\t\tnfs_free_server(server);\n"
+ "> \302\240\t\tserver = NULL;\n"
+ "> \302\240\t} else {\n"
+ "> -\t\terror = nfs_bdi_register(server);\n"
+ "> -\t\tif (error) {\n"
+ "> -\t\t\tmntroot = ERR_PTR(error);\n"
+ "> -\t\t\tgoto error_splat_super;\n"
+ "> -\t\t}\n"
+ "> \302\240\t\tserver->super = s;\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> \302\240\tif (!s->s_root) {\n"
+ "> \302\240\t\t/* initial superblock/root creation */\n"
+ "> -\t\tmount_info->fill_super(s, mount_info);\n"
+ "> +\t\terror = mount_info->fill_super(s, mount_info);\n"
+ "> +\t\tif (error)\n"
+ "> +\t\t\tgoto error_splat_super;\n"
+ "> \302\240\t\tnfs_get_cache_cookie(s, mount_info->parsed,\n"
+ "> mount_info->cloned);\n"
+ "> \302\240\t}\n"
+ "> \302\240\n"
+ "> diff --git a/fs/nfs/write.c b/fs/nfs/write.c\n"
+ "> index abb2c8a3be42..cc341fc7fd44 100644\n"
+ "> --- a/fs/nfs/write.c\n"
+ "> +++ b/fs/nfs/write.c\n"
+ "> @@ -263,16 +263,15 @@ int nfs_congestion_kb;\n"
+ "> \302\240\n"
+ "> \302\240static void nfs_set_page_writeback(struct page *page)\n"
+ "> \302\240{\n"
+ "> -\tstruct nfs_server *nfss =\n"
+ "> NFS_SERVER(page_file_mapping(page)->host);\n"
+ "> +\tstruct inode *inode = page_file_mapping(page)->host;\n"
+ "> +\tstruct nfs_server *nfss = NFS_SERVER(inode);\n"
+ "> \302\240\tint ret = test_set_page_writeback(page);\n"
+ "> \302\240\n"
+ "> \302\240\tWARN_ON_ONCE(ret != 0);\n"
+ "> \302\240\n"
+ "> \302\240\tif (atomic_long_inc_return(&nfss->writeback) >\n"
+ "> -\t\t\tNFS_CONGESTION_ON_THRESH) {\n"
+ "> -\t\tset_bdi_congested(&nfss->backing_dev_info,\n"
+ "> -\t\t\t\t\tBLK_RW_ASYNC);\n"
+ "> -\t}\n"
+ "> +\t\t\tNFS_CONGESTION_ON_THRESH)\n"
+ "> +\t\tset_bdi_congested(inode_to_bdi(inode),\n"
+ "> BLK_RW_ASYNC);\n"
+ "> \302\240}\n"
+ "> \302\240\n"
+ "> \302\240static void nfs_end_page_writeback(struct nfs_page *req)\n"
+ "> @@ -285,7 +284,7 @@ static void nfs_end_page_writeback(struct\n"
+ "> nfs_page *req)\n"
+ "> \302\240\n"
+ "> \302\240\tend_page_writeback(req->wb_page);\n"
+ "> \302\240\tif (atomic_long_dec_return(&nfss->writeback) <\n"
+ "> NFS_CONGESTION_OFF_THRESH)\n"
+ "> -\t\tclear_bdi_congested(&nfss->backing_dev_info,\n"
+ "> BLK_RW_ASYNC);\n"
+ "> +\t\tclear_bdi_congested(inode_to_bdi(inode),\n"
+ "> BLK_RW_ASYNC);\n"
+ "> \302\240}\n"
+ "> \302\240\n"
+ "> \302\240\n"
+ "> @@ -1808,7 +1807,7 @@ static void nfs_commit_release_pages(struct\n"
+ "> nfs_commit_data *data)\n"
+ "> \302\240\t}\n"
+ "> \302\240\tnfss = NFS_SERVER(data->inode);\n"
+ "> \302\240\tif (atomic_long_read(&nfss->writeback) <\n"
+ "> NFS_CONGESTION_OFF_THRESH)\n"
+ "> -\t\tclear_bdi_congested(&nfss->backing_dev_info,\n"
+ "> BLK_RW_ASYNC);\n"
+ "> +\t\tclear_bdi_congested(inode_to_bdi(data->inode),\n"
+ "> BLK_RW_ASYNC);\n"
+ "> \302\240\n"
+ "> \302\240\tnfs_init_cinfo(&cinfo, data->inode, data->dreq);\n"
+ "> \302\240\tnfs_commit_end(cinfo.mds);\n"
+ "> diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h\n"
+ "> index b34097c67848..e1502c55741e 100644\n"
+ "> --- a/include/linux/nfs_fs_sb.h\n"
+ "> +++ b/include/linux/nfs_fs_sb.h\n"
+ "> @@ -133,7 +133,6 @@ struct nfs_server {\n"
+ "> \302\240\tstruct rpc_clnt *\tclient_acl;\t/* ACL RPC\n"
+ "> client handle */\n"
+ "> \302\240\tstruct nlm_host\t\t*nlm_host;\t/* NLM\n"
+ "> client handle */\n"
+ "> \302\240\tstruct nfs_iostats __percpu *io_stats;\t/* I/O\n"
+ "> statistics */\n"
+ "> -\tstruct backing_dev_info\tbacking_dev_info;\n"
+ "> \302\240\tatomic_long_t\t\twriteback;\t/* number of\n"
+ "> writeback pages */\n"
+ "> \302\240\tint\t\t\tflags;\t\t/* various\n"
+ "> flags */\n"
+ "> \302\240\tunsigned int\t\tcaps;\t\t/* server\n"
+ "> capabilities */\n"
+ "\n"
+ "Acked-by: Trond Myklebust <trond.myklebust@primarydata.com>\n"
+ "\n"
+ "-- \n"
+ "Trond Myklebust\n"
+ "Linux NFS client maintainer, PrimaryData\n"
+ trond.myklebust@primarydata.com
 
-539aeff08fd92a9d7a57fadebb501847212beefd5ca71419e95ed919efe9e342
+973f959e5d5191d500edbb9dba8aed32353fb0f1bb7332c5adb6c26a0f308fa5

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.