From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: Re: [BUG] On x86_32 system, handle block-device which size is larger than 16TB. Date: Tue, 17 Sep 2013 11:26:09 +0800 Message-ID: <201309171126070266609@gmail.com> References: <5178E4B4.4060308@gmail.com> Reply-To: majianpeng Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: base64 Cc: "Andi Kleen" , linux-fsdevel , LKML To: viro Return-path: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org SGkgYWxsLA0KCVRoaXMgcGF0Y2ggaGFzIGEgbG9uZyBsb25nIHRpbWUuSG93IGFib3V0IHRoaXMg cGF0Y2g/DQoNClRoYW5rcyENCkppYW5wZW5nIE1hDQo+SGkgYWxsLA0KPiAgICBTb21lIHRpbWUg YWdvLCBJIG1lbnRpb25lZCB0aGVyZSBhcmUgc29tZSBwcm9ibGVtcyBvbiB4ODYtMzIgc3lzdGVt IGFib3V0IGhhbmRsaW5nIG1kLWJsb2NrLWRldmljZSB3aGljaCBzaXplIGlzIGxhcmdlciB0aGFu IDE2VEIuDQo+QW5kIGkgc2VuZCBhIHBhdGNoLkJ1dCB0aGVyZSBhcmUgbm8gY29uY2VybiB3aXRo IGl0Lg0KPlRoZSB3ZWJzaXRlIG9mICBpczogIGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMv bGludXgtZnNkZXZlbC9tc2c1NTY3Mi5odG1sLg0KPg0KPkV4Y2VwdCB0aGUgd3JhcHBpbmcgcHJv YmxlbSwgcmVjZW50bHkgaSBmb3VuZCBhbm90aGVyIHByb2JsZW0uSXQgd2lsbCBjYXVzZSBpbmZp bml0ZSBsb29wLkF0IGxlYXNlIGkgd2F0Y2hlZCBvbmUgaG91ciwgdGhlIHByb2dyYW1zIGRvbid0 IGVuZC4NCj4NCj5PbiB4ODYtMzIgc3lzdGVtLCB0aGUgdmVyc2lvbiBvZiBrZXJuZWwgaXMgMy45 LXJjOC4gRGlzayBpcyByYWlkMCAgd2hpY2ggc2l6ZSBpcyBhYm91dCAxN1RCLg0KPlRoZSB0ZXN0 IHByb2dyYW0gaXM6DQo+IGludCBtYWluKCkNCj57DQo+ICAgICAgICBsb25nIGxvbmcgbWF4X3Np emUgPSAoNDA5NkxMIDw8IDMyKTsNCj4gICAgICAgIGludCBmZCA9IG9wZW4oIi9kZXYvbWQwIiwg T19SRFdSKTsNCj4gICAgICAgIG9mZjY0X3Qgb2ZmOw0KPiAgICAgICAgaW50IHJldDsNCj4gICAg ICAgIGNoYXIgKmJ1ZmYgPSBtZW1hbGlnbig1MTIsIDQwOTYpOw0KPg0KPiAgICAgICAgaWYgKGJ1 ZmYgPT0gTlVMTCkgew0KPiAgICAgICAgICAgICAgICBwcmludGYoIm1lbWFsaWduIGVycm9yICVz XG4iLCBzdHJlcnJvcihlcnJubykpOw0KPiAgICAgICAgICAgICAgICBleGl0KC0xKTsNCj4gICAg ICAgIH0NCj4gICAgICAgIGlmIChmZCA8IDApIHsNCj4gICAgICAgICAgICAgICAgcHJpbnRmKCJv cGVuIGVycm9yICVzXG4iLCBzdHJlcnJvcihlcnJubykpOw0KPiAgICAgICAgICAgICAgICByZXR1 cm4gLWVycm5vOw0KPiAgICAgICAgfQ0KPg0KPiAgICAgICAgaWYgKChvZmYgPSBsc2VlazY0KGZk LCBtYXhfc2l6ZSAtIDIwMDAsIFNFRUtfU0VUKSkgPCAwKQ0KPiAgICAgICAgICAgICAgICBwcmlu dGYoImxzZWVrNjQgZXJyb3IgJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQo+ICAgICAgICBlbHNl DQo+ICAgICAgICAgICAgICAgIHByaW50Zigib2ZmIDB4JWxseFxuIiwgb2ZmKTsNCj4gICAgICAg IGlmICgocmV0ID0gd3JpdGUoZmQsIGJ1ZmYsIDQwOTYpKSA8IDApDQo+ICAgICAgICAgICAgICAg IHByaW50Zigid3JpdGUgZXJyb3IgJXNcbiIsICBzdHJlcnJvcihlcnJubykpOw0KPiAgICAgICAg ZWxzZQ0KPiAgICAgICAgICAgICAgICBwcmludGYoIndyaXRlIHJldHVybiAlZFxuIiwgcmV0KTsN Cj4gICAgICAgIGNsb3NlKGZkKTsNCj4gICAgICAgIHJldHVybiAwOw0KPn0NCj4NCj5JZiBydW4g dGhpcyBwcm9ibGVtLCBpdCB3aWxsIG5vdCBiZSBlbmQgdXAuQmVjYXVzZSB0aGUgY2xvc2UoZmQp IG9wZXJhdGlvbi4NCj5UaGUgcmVhc29uIGlzOg0KPmNsb3NlKGZkKS0tLS0+YmxrZGV2X2Nsb3Nl LS0+c3luY19ibG9ja2Rldi0tLT5maWxlbWFwX3dyaXRlX2FuZF93YWl0LS0tPl9fZmlsZW1hcF9m ZGF0YXdyaXRlX3JhbmdlLS0tPmRvX3dyaXRlcGFnZXMtLT53cml0ZV9jYWNoZV9wYWdlcy4NCj5J biBmdW5jdGlvbiB3cml0ZV9jYWNoZV9wYWdlczoNCj4gPiAgICAgICAgICAgICAgIG5yX3BhZ2Vz ID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsIHRhZywNCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluKGVuZCAtIGluZGV4LCAocGdvZmZfdClQQUdF VkVDX1NJWkUtMSkgKyAxKTsNCj4gPiAgICAgICAgICAgICAgIGlmIChucl9wYWdlcyA9PSAwKQ0K PiA+ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj5CZWNhdXNlIHRoZXJlIGlzIG9ubHkg b24gZGlydHkgcGFnZSB3aGljaCBpbmRleCBpcyAweEZGRkZGRkZGLg0KPj4gICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsNCj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgLi4uLi4uLi4uLg0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g KCp3cml0ZXBhZ2UpKHBhZ2UsIHdiYywgZGF0YSk7DQo+U28gdGhlIGZ1bmN0aW9uIGJsa2Rldl93 cml0ZXBhZ2Ugd2lsbCBiZSBjYWxsZWQuDQo+YmxrZGV2X3dyaXRlcGFnZS0tLS0+YmxvY2tfd3Jp dGVfZnVsbF9wYWdlLS0tLT5ibG9ja193cml0ZV9mdWxsX3BhZ2VfZW5kaW8uDQo+SW4gZnVuY3Rp b24gYmxvY2tfd3JpdGVfZnVsbF9wYWdlX2VuZGlvOg0KPj4gICAgICAgc3RydWN0IGlub2RlICog Y29uc3QgaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0Ow0KPj4gICAgICAgIGxvZmZfdCBpX3Np emUgPSBpX3NpemVfcmVhZChpbm9kZSk7DQo+PiAgICAgICAgY29uc3QgcGdvZmZfdCBlbmRfaW5k ZXggPSBpX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVDsNCj4+ICAgICAgICB1bnNpZ25lZCBvZmZz ZXQ7DQo+DQo+PiAgICAgICAgLyogSXMgdGhlIHBhZ2UgZnVsbHkgaW5zaWRlIGlfc2l6ZT8gKi8N Cj4+ICAgICAgICBpZiAocGFnZS0+aW5kZXggPCBlbmRfaW5kZXgpDQo+ICAgICAgICAgICAgICAg IHJldHVybiBfX2Jsb2NrX3dyaXRlX2Z1bGxfcGFnZShpbm9kZSwgcGFnZSwgZ2V0X2Jsb2NrLCB3 YmMsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k bGVyKTsNCj5CZWNhdXNlIHBhZ2UtPmluZGV4IGlzIDB4ZmZmZmZmZixidXQgdGhlIGVuZF9pbmRl eCBpcyB2ZXJ5IGxpdHRlciBiZWNhdXNlIHRoZSB3cmFwcGluZy4NCj5PbiB4ODYtMzJvcywgcGdv ZmZfdCBpcyB1bnNpZ25lZCBsb25nIC5TbyAxN1RCID4+IFBBR0VfQ0FDSEVfU0hJRlQgd2lsbCBi ZSBvdmVyZmxvdy4NCj4+ICAgICAgICAvKiBJcyB0aGUgcGFnZSBmdWxseSBvdXRzaWRlIGlfc2l6 ZT8gKHRydW5jYXRlIGluIHByb2dyZXNzKSAqLw0KPj4gICAgICAgIG9mZnNldCA9IGlfc2l6ZSAm IChQQUdFX0NBQ0hFX1NJWkUtMSk7DQo+PiAgICAgICAgaWYgKHBhZ2UtPmluZGV4ID49IGVuZF9p bmRleCsxIHx8ICFvZmZzZXQpIHsNCj5CZWNhdXNlIGVuZF9pbmRleCBpcyBsZXNzIHRoYW4gcGFn ZS0+aW5kZXguU28gaXQgd2lsbCBiZSByZXR1cm4gdGhlcmUuU28gdGhlIFBBR0VDQUNIRV9UQUdf VE9XUklURSB3aWxsIG5vdCBiZSBjbGVhci4NCj5TbyBpdCB3aWxsIGNvbnRpbnVlIHRvIGRvLg0K Pj4gICAgICAgICAgICAgICAgLyoNCj4+ICAgICAgICAgICAgICAgICAqIFRoZSBwYWdlIG1heSBo YXZlIGRpcnR5LCB1bm1hcHBlZCBidWZmZXJzLiAgRm9yIGV4YW1wbGUsDQo+PiAgICAgICAgICAg ICAgICAgKiB0aGV5IG1heSBoYXZlIGJlZW4gYWRkZWQgaW4gZXh0M193cml0ZXBhZ2UoKS4gIE1h a2UgdGhlbQ0KPj4gICAgICAgICAgICAgICAgICogZnJlZWFibGUgaGVyZSwgc28gdGhlIHBhZ2Ug ZG9lcyBub3QgbGVhay4NCj4+ICAgICAgICAgICAgICAgICAqLw0KPj4gICAgICAgICAgICAgICAg ZG9faW52YWxpZGF0ZXBhZ2UocGFnZSwgMCk7DQo+PiAgICAgICAgICAgICAgICB1bmxvY2tfcGFn ZShwYWdlKTsNCj4+ICAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBkb24ndCBjYXJlICovDQo+ PiAgICAgICAgfQ0KPg0KPlRoZSBpbmZpbml0ZSBsb29wIHdpbGwgY2F1c2UgaHVuZy10YXNrIGJl Y2F1c2UgdGhlIG11dGV4X2xvY2sgZG9uJ3QgcmVsZWFzZS4NCj4NCj5NeSBwcmV2aW91cyBwYXRj aCBpcyB0cnkgdG8gcmVzb2x2ZSB0aGlzIHByb2JsZW0gYnkgYWRkIHNvbWUganVkZ2VtZW50IG9u IGxzZWVrL3JlYWQvd3JpdGUgb3BlcmF0aW9uIG9uIGJsb2NrLWRldmljZS4NCj5JIHRoaW5rIHRo ZXJlIGFyZSBzb21lIHBsYWNlIHRvIGRlYWwgd2l0aC4NCj5TbyBpIHRoaW5rIHdlIGNhbiB1c2lu ZyBMRlMgcnVsZSBvbiB0aGlzLg0KPlRoZSBmb2xsb3dpbmcgaXMgbXkgbmV3IHBhdGNoIHdoaWNo IGFkZGluZyBMRlMgcnVsZSBvbiBibG9jayBkZXZpY2UuQmVjYXVzZSBhdCBwcmVzZW50IE1BWF9M RlNfRklMRVNJWkUgaXMgZXF1YWwgOEdCIC0xLg0KPkJ1dCBhdCBwcmVzZW50IHRoZSBwZ29mZl90 IGlzIHRoZSB0eXBlIG9mIHVuc2lnbmVkIGxvbmcuU28gaSB1cGRhdGUgdGhlIGRlZmluaXRpb24g b2YgTUFYX0xGU19GSUxFU0laRS4NCj4NCj5kaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9m cy9ibG9ja19kZXYuYw0KPmluZGV4IGFhZTE4N2EuLmY1ZWNkNjQgMTAwNjQ0DQo+LS0tIGEvZnMv YmxvY2tfZGV2LmMNCj4rKysgYi9mcy9ibG9ja19kZXYuYw0KPkBAIC05NjAsNiArOTYwLDggQEAg dm9pZCBjaGVja19kaXNrX3NpemVfY2hhbmdlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3Qg YmxvY2tfZGV2aWNlICpiZGV2KQ0KPiANCj4gICAgIGRpc2tfc2l6ZSA9IChsb2ZmX3QpZ2V0X2Nh cGFjaXR5KGRpc2spIDw8IDk7DQo+ICAgICBiZGV2X3NpemUgPSBpX3NpemVfcmVhZChiZGV2LT5i ZF9pbm9kZSk7DQo+KyAgICBpZiAoYmRldl9zaXplID4gYmRldi0+YmRfaW5vZGUtPmlfc2ItPnNf bWF4Ynl0ZXMpDQo+KyAgICAgICAgYmRldl9zaXplID0gYmRldi0+YmRfaW5vZGUtPmlfc2ItPnNf bWF4Ynl0ZXM7DQo+ICAgICBpZiAoZGlza19zaXplICE9IGJkZXZfc2l6ZSkgew0KPiAgICAgICAg IGNoYXIgbmFtZVtCREVWTkFNRV9TSVpFXTsNCj4gDQo+QEAgLTEwMzQsNiArMTAzNiw4IEBAIHZv aWQgYmRfc2V0X3NpemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgbG9mZl90IHNpemUpDQo+ IHsNCj4gICAgIHVuc2lnbmVkIGJzaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7 DQo+IA0KPisgICAgaWYgKHNpemUgPiBiZGV2LT5iZF9pbm9kZS0+aV9zYi0+c19tYXhieXRlcykN Cj4rICAgICAgICBzaXplID0gYmRldi0+YmRfaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXM7DQo+ICAg ICBtdXRleF9sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7DQo+ICAgICBpX3NpemVfd3Jp dGUoYmRldi0+YmRfaW5vZGUsIHNpemUpOw0KPiAgICAgbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9p bm9kZS0+aV9tdXRleCk7DQo+ZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jDQo+ aW5kZXggOTE2ZGE4Yy4uNjJhYWI5ZiAxMDA2NDQNCj4tLS0gYS9mcy9saWJmcy5jDQo+KysrIGIv ZnMvbGliZnMuYw0KPkBAIC0xMyw2ICsxMyw3IEBADQo+ICNpbmNsdWRlIDxsaW51eC9leHBvcnRm cy5oPg0KPiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+DQo+ICNpbmNsdWRlIDxsaW51eC9i dWZmZXJfaGVhZC5oPiAvKiBzeW5jX21hcHBpbmdfYnVmZmVycyAqLw0KPisjaW5jbHVkZSA8bGlu dXgvbWFnaWMuaD4NCj4gDQo+ICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPg0KPiANCj5AQCAtMjMw LDggKzIzMSwxMCBAQCBzdHJ1Y3QgZGVudHJ5ICptb3VudF9wc2V1ZG8oc3RydWN0IGZpbGVfc3lz dGVtX3R5cGUgKmZzX3R5cGUsIGNoYXIgKm5hbWUsDQo+ICAgICBzID0gc2dldChmc190eXBlLCBO VUxMLCBzZXRfYW5vbl9zdXBlciwgTVNfTk9VU0VSLCBOVUxMKTsNCj4gICAgIGlmIChJU19FUlIo cykpDQo+ICAgICAgICAgcmV0dXJuIEVSUl9DQVNUKHMpOw0KPi0NCj4tICAgIHMtPnNfbWF4Ynl0 ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOw0KPisgICAgaWYgKG1hZ2ljID09IEJERVZGU19NQUdJQykN Cj4rICAgICAgICBzLT5zX21heGJ5dGVzID0gKChNQVhfTEZTX0ZJTEVTSVpFID4+IDkpIDw8IDkp Ow0KPisgICAgZWxzZQ0KPisgICAgICAgIHMtPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpF Ow0KPiAgICAgcy0+c19ibG9ja3NpemUgPSBQQUdFX1NJWkU7DQo+ICAgICBzLT5zX2Jsb2Nrc2l6 ZV9iaXRzID0gUEFHRV9TSElGVDsNCj4gICAgIHMtPnNfbWFnaWMgPSBtYWdpYzsNCj5kaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oDQo+aW5kZXggMmMy ODI3MS4uMjg4OGM0ZSAxMDA2NDQNCj4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgNCj4rKysgYi9p bmNsdWRlL2xpbnV4L2ZzLmgNCj5AQCAtODY5LDcgKzg2OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50 IGZpbGVfY2hlY2tfd3JpdGVhYmxlKHN0cnVjdCBmaWxlICpmaWxwKQ0KPiAvKiBQYWdlIGNhY2hl IGxpbWl0LiBUaGUgZmlsZXN5c3RlbXMgc2hvdWxkIHB1dCB0aGF0IGludG8gdGhlaXIgc19tYXhi eXRlcw0KPiAgICBsaW1pdHMsIG90aGVyd2lzZSBiYWQgdGhpbmdzIGNhbiBoYXBwZW4gaW4gVk0u ICovDQo+ICNpZiBCSVRTX1BFUl9MT05HPT0zMg0KPi0jZGVmaW5lIE1BWF9MRlNfRklMRVNJWkUg ICAgKCgobG9mZl90KVBBR0VfQ0FDSEVfU0laRSA8PCAoQklUU19QRVJfTE9ORy0xKSktMSkNCj4r I2RlZmluZSBNQVhfTEZTX0ZJTEVTSVpFICAgICgoKGxvZmZfdClQQUdFX0NBQ0hFX1NJWkUgPDwg KEJJVFNfUEVSX0xPTkcpKS0xKQ0KPiAjZWxpZiBCSVRTX1BFUl9MT05HPT02NA0KPiAjZGVmaW5l IE1BWF9MRlNfRklMRVNJWkUgICAgICgobG9mZl90KTB4N2ZmZmZmZmZmZmZmZmZmZkxMKQ0KPiAj ZW5kaWYNCj4NCj4NCj5UaGFua3MNCj5KaWFucGVuZyBNYQ0KPg0KPg0KPg0KPg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752136Ab3IQD0Z (ORCPT ); Mon, 16 Sep 2013 23:26:25 -0400 Received: from mail-pb0-f54.google.com ([209.85.160.54]:47105 "EHLO mail-pb0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751839Ab3IQD0U (ORCPT ); Mon, 16 Sep 2013 23:26:20 -0400 Date: Tue, 17 Sep 2013 11:26:09 +0800 From: majianpeng To: viro Cc: "Andi Kleen" , linux-fsdevel , LKML Reply-To: majianpeng Subject: Re: [BUG] On x86_32 system, handle block-device which size is larger than 16TB. References: <5178E4B4.4060308@gmail.com> X-Priority: 3 X-GUID: FDAA4334-950E-40EC-B3CF-E936E50ABD76 X-Has-Attach: no X-Mailer: Foxmail 7.0.1.93[cn] Mime-Version: 1.0 Message-ID: <201309171126070266609@gmail.com> Content-Type: text/plain; charset="iso-8859-1" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id r8H3QUo2008963 Hi all, This patch has a long long time.How about this patch? Thanks! Jianpeng Ma >Hi all, > Some time ago, I mentioned there are some problems on x86-32 system about handling md-block-device which size is larger than 16TB. >And i send a patch.But there are no concern with it. >The website of is: http://www.spinics.net/lists/linux-fsdevel/msg55672.html. > >Except the wrapping problem, recently i found another problem.It will cause infinite loop.At lease i watched one hour, the programs don't end. > >On x86-32 system, the version of kernel is 3.9-rc8. Disk is raid0 which size is about 17TB. >The test program is: > int main() >{ > long long max_size = (4096LL << 32); > int fd = open("/dev/md0", O_RDWR); > off64_t off; > int ret; > char *buff = memalign(512, 4096); > > if (buff == NULL) { > printf("memalign error %s\n", strerror(errno)); > exit(-1); > } > if (fd < 0) { > printf("open error %s\n", strerror(errno)); > return -errno; > } > > if ((off = lseek64(fd, max_size - 2000, SEEK_SET)) < 0) > printf("lseek64 error %s\n", strerror(errno)); > else > printf("off 0x%llx\n", off); > if ((ret = write(fd, buff, 4096)) < 0) > printf("write error %s\n", strerror(errno)); > else > printf("write return %d\n", ret); > close(fd); > return 0; >} > >If run this problem, it will not be end up.Because the close(fd) operation. >The reason is: >close(fd)---->blkdev_close-->sync_blockdev--->filemap_write_and_wait--->__filemap_fdatawrite_range--->do_writepages-->write_cache_pages. >In function write_cache_pages: > > nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, tag, > > min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1); > > if (nr_pages == 0) > > break; >Because there is only on dirty page which index is 0xFFFFFFFF. >> for (i = 0; i < nr_pages; i++) { > .......... >> ret = (*writepage)(page, wbc, data); >So the function blkdev_writepage will be called. >blkdev_writepage---->block_write_full_page---->block_write_full_page_endio. >In function block_write_full_page_endio: >> struct inode * const inode = page->mapping->host; >> loff_t i_size = i_size_read(inode); >> const pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT; >> unsigned offset; > >> /* Is the page fully inside i_size? */ >> if (page->index < end_index) > return __block_write_full_page(inode, page, get_block, wbc, > handler); >Because page->index is 0xfffffff,but the end_index is very litter because the wrapping. >On x86-32os, pgoff_t is unsigned long .So 17TB >> PAGE_CACHE_SHIFT will be overflow. >> /* Is the page fully outside i_size? (truncate in progress) */ >> offset = i_size & (PAGE_CACHE_SIZE-1); >> if (page->index >= end_index+1 || !offset) { >Because end_index is less than page->index.So it will be return there.So the PAGECACHE_TAG_TOWRITE will not be clear. >So it will continue to do. >> /* >> * The page may have dirty, unmapped buffers. For example, >> * they may have been added in ext3_writepage(). Make them >> * freeable here, so the page does not leak. >> */ >> do_invalidatepage(page, 0); >> unlock_page(page); >> return 0; /* don't care */ >> } > >The infinite loop will cause hung-task because the mutex_lock don't release. > >My previous patch is try to resolve this problem by add some judgement on lseek/read/write operation on block-device. >I think there are some place to deal with. >So i think we can using LFS rule on this. >The following is my new patch which adding LFS rule on block device.Because at present MAX_LFS_FILESIZE is equal 8GB -1. >But at present the pgoff_t is the type of unsigned long.So i update the definition of MAX_LFS_FILESIZE. > >diff --git a/fs/block_dev.c b/fs/block_dev.c >index aae187a..f5ecd64 100644 >--- a/fs/block_dev.c >+++ b/fs/block_dev.c >@@ -960,6 +960,8 @@ void check_disk_size_change(struct gendisk *disk, struct block_device *bdev) > > disk_size = (loff_t)get_capacity(disk) << 9; > bdev_size = i_size_read(bdev->bd_inode); >+ if (bdev_size > bdev->bd_inode->i_sb->s_maxbytes) >+ bdev_size = bdev->bd_inode->i_sb->s_maxbytes; > if (disk_size != bdev_size) { > char name[BDEVNAME_SIZE]; > >@@ -1034,6 +1036,8 @@ void bd_set_size(struct block_device *bdev, loff_t size) > { > unsigned bsize = bdev_logical_block_size(bdev); > >+ if (size > bdev->bd_inode->i_sb->s_maxbytes) >+ size = bdev->bd_inode->i_sb->s_maxbytes; > mutex_lock(&bdev->bd_inode->i_mutex); > i_size_write(bdev->bd_inode, size); > mutex_unlock(&bdev->bd_inode->i_mutex); >diff --git a/fs/libfs.c b/fs/libfs.c >index 916da8c..62aab9f 100644 >--- a/fs/libfs.c >+++ b/fs/libfs.c >@@ -13,6 +13,7 @@ > #include > #include > #include /* sync_mapping_buffers */ >+#include > > #include > >@@ -230,8 +231,10 @@ struct dentry *mount_pseudo(struct file_system_type *fs_type, char *name, > s = sget(fs_type, NULL, set_anon_super, MS_NOUSER, NULL); > if (IS_ERR(s)) > return ERR_CAST(s); >- >- s->s_maxbytes = MAX_LFS_FILESIZE; >+ if (magic == BDEVFS_MAGIC) >+ s->s_maxbytes = ((MAX_LFS_FILESIZE >> 9) << 9); >+ else >+ s->s_maxbytes = MAX_LFS_FILESIZE; > s->s_blocksize = PAGE_SIZE; > s->s_blocksize_bits = PAGE_SHIFT; > s->s_magic = magic; >diff --git a/include/linux/fs.h b/include/linux/fs.h >index 2c28271..2888c4e 100644 >--- a/include/linux/fs.h >+++ b/include/linux/fs.h >@@ -869,7 +869,7 @@ static inline int file_check_writeable(struct file *filp) > /* Page cache limit. The filesystems should put that into their s_maxbytes > limits, otherwise bad things can happen in VM. */ > #if BITS_PER_LONG==32 >-#define MAX_LFS_FILESIZE (((loff_t)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1) >+#define MAX_LFS_FILESIZE (((loff_t)PAGE_CACHE_SIZE << (BITS_PER_LONG))-1) > #elif BITS_PER_LONG==64 > #define MAX_LFS_FILESIZE ((loff_t)0x7fffffffffffffffLL) > #endif > > >Thanks >Jianpeng Ma > > > >{.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I