From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============3490300195346147134==" MIME-Version: 1.0 From: Mark Wielaard To: elfutils-devel@lists.fedorahosted.org Subject: Re: [PATCH] libelf: Only use posix_fallocate when using mmap. Ignore unsupported errno. Date: Wed, 07 Oct 2015 16:57:02 +0200 Message-ID: <1444229822.25287.94.camel@bordewijk.wildebeest.org> In-Reply-To: 1444059574-31136-1-git-send-email-mjw@redhat.com --===============3490300195346147134== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On Mon, 2015-10-05 at 17:39 +0200, Mark Wielaard wrote: > When not using mmap it is enough the just ftruncate the file to the right > size. pwrite will report an error if there is no disk space left. And on > file systems that don't support fallocate it might duplicate writes. When > using posix_fallocate do ignore errors indicating the file system doesn't > support fallocate. These will never happen with glibc, but might on some > other implementations. That is pretty nasty since we might get a SIGBUS > in that case when writing to the mmapped memory. But the chance of that > happening is very small and people using such a libc implementation are > on their own. Sigh. Another issue with posix_fallocate was pointed out, this time in the glibc fallback code, which introduces yet another failure mode/errno to consider... I am starting to be a little less enthusiastic about this function... If the original fd underlying the ELF file is opened O_WRONLY then posix_fallocate might fail with EBADF if the glibc fallback code is triggered. This doesn't actually happen right now in our code, since if elf_begin is called with ELF_C_WRITE_MMAP (and not ELF_C_RDWR_MMAP) we don't actually mmap the underlying file (yes, I was surprised too, but ELF_C_WRITE and ELF_C_WRITE_MMAP both go through write_file, which doesn't do mmap). But in case we ever change that for some reason then having to handle yet another errno/failure case in some obscure situations will be a pain. So I changed the code again, now we just ignore all errors, except for ENOSPC since that is the only real thing we are interested in. Cheers, Mark --===============3490300195346147134== Content-Type: text/x-patch MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-libelf-Only-use-posix_fallocate-when-using-mmap.-Ign.patch" RnJvbSBlNTg5YTExMzIxZWMxOTA2ZGUwZTk0YWU3ZjlkZjVkMTgwZTg3M2Q5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogTWFyayBXaWVsYWFyZCA8bWp3QHJlZGhhdC5jb20+DQpEYXRl OiBNb24sIDUgT2N0IDIwMTUgMTc6MzI6MjkgKzAyMDANClN1YmplY3Q6IFtQQVRDSF0gbGliZWxm OiBPbmx5IHVzZSBwb3NpeF9mYWxsb2NhdGUgd2hlbiB1c2luZyBtbWFwLiBJZ25vcmUNCiB1bnN1 cHBvcnRlZCBlcnJvcnMuDQoNCkRvbid0IHVzZSBwb3NpeF9mYWxsb2NhdGUgd2hlbiBub3QgdXNp bmcgbW1hcC4gSXQgaXMgZW5vdWdoIHRvIGZ0cnVuY2F0ZQ0KdGhlIGZpbGUgdG8gdGhlIHJpZ2h0 IHNpemUuIHB3cml0ZSB3aWxsIHJlcG9ydCBhbiBlcnJvciBpZiB0aGVyZSBpcyBubw0KZGlzayBz cGFjZSBsZWZ0LiBBbmQgb24gZmlsZSBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBmYWxsb2Nh dGUgaXQNCm1pZ2h0IGR1cGxpY2F0ZSB3cml0ZXMgaW4gdGhhdCBjYXNlLiBXaGVuIHVzaW5nIHBv c2l4X2ZhbGxvY2F0ZSBkbyBpZ25vcmUNCm1vc3QgZXJyb3JzLiBPdGhlciBsaWJjIGltcGxlbWVu dGF0aW9ucyBkb24ndCBndWFyYW50ZWUgdGhlIGNhbGwgYWN0dWFsbHkNCndvcmtzIGFsd2F5cyBh bmQgZXZlbiB3aXRoIGdsaWJjIHRoZXJlIG1pZ2h0IGJlIGFuIHVuZXhwZWN0ZWQgZXJyb3IgZnJv bQ0KdGhlIGZhbGxiYWNrIGNvZGUgd2hlbiB0aGUgZmlsZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0 IGZhbGxvY2F0ZS4gVGhhdCBpcw0KcHJldHR5IG5hc3R5IHNpbmNlIHdlIG1pZ2h0IGdldCBhIFNJ R0JVUyBpbiB0aGF0IGNhc2Ugd2hlbiB3cml0aW5nIHRvIHRoZQ0KbW1hcHBlZCBtZW1vcnkuIEJ1 dCB0aGUgY2hhbmNlIG9mIHRoYXQgaGFwcGVuaW5nIGlzIHZlcnkgc21hbGwuICBBbmQgd2lsbA0K bm9ybWFsbHkgbmV2ZXIgaGFwcGVuIHdpdGggZ2xpYmMuIFNvIG9ubHkgcmVwb3J0IGFuIGVycm9y IHdoZW4NCnBvc2l4X2ZhbGxvY2F0ZSByZXBvcnRzIEVOT1NQQy4NCg0KU2lnbmVkLW9mZi1ieTog TWFyayBXaWVsYWFyZCA8bWp3QHJlZGhhdC5jb20+DQotLS0NCiBsaWJlbGYvQ2hhbmdlTG9nICAg IHwgIDUgKysrKysNCiBsaWJlbGYvZWxmX3VwZGF0ZS5jIHwgMzYgKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tDQogMiBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAx MyBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2xpYmVsZi9DaGFuZ2VMb2cgYi9saWJlbGYv Q2hhbmdlTG9nDQppbmRleCAxZmFhOWMyLi41NmFkYzlmIDEwMDY0NA0KLS0tIGEvbGliZWxmL0No YW5nZUxvZw0KKysrIGIvbGliZWxmL0NoYW5nZUxvZw0KQEAgLTEsMyArMSw4IEBADQorMjAxNS0x MC0wNSAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPg0KKw0KKwkqIGVsZl91cGRhdGUu YyAod3JpdGVfZmlsZSk6IE9ubHkgdXNlIHBvc2l4X2ZhbGxvY2F0ZSB3aGVuIHVzaW5nDQorCW1t YXAuIE9ubHkgcmVwb3J0IGZhaWx1cmUgd2hlbiBlcnJubyBpcyBFTk9TUEMuDQorDQogMjAxNS0x MC0wNSAgSm9zaCBTdG9uZSAgPGppc3RvbmVAcmVkaGF0LmNvbT4NCiANCiAJKiBNYWtlZmlsZS5h bSAobGliZWxmLnNvKTogQWRkIEFNX1ZfQ0NMRCBhbmQgQU1fVl9hdCBzaWxlbmNlcnMuDQpkaWZm IC0tZ2l0IGEvbGliZWxmL2VsZl91cGRhdGUuYyBiL2xpYmVsZi9lbGZfdXBkYXRlLmMNCmluZGV4 IDAwZjdhMDEuLmM2MzVlYjMgMTAwNjQ0DQotLS0gYS9saWJlbGYvZWxmX3VwZGF0ZS5jDQorKysg Yi9saWJlbGYvZWxmX3VwZGF0ZS5jDQpAQCAtNTcsMjIgKzU3LDExIEBAIHdyaXRlX2ZpbGUgKEVs ZiAqZWxmLCBvZmZfdCBzaXplLCBpbnQgY2hhbmdlX2JvLCBzaXplX3Qgc2hudW0pDQogICAgICBX ZSBjYW5ub3QgZG8gdGhpcyBpZiB0aGlzIGZpbGUgaXMgaW4gYW4gYXJjaGl2ZS4gIFdlIGFsc28g ZG9uJ3QNCiAgICAgIGRvIGl0ICpub3cqIGlmIHdlIGFyZSBzaG9ydGVuaW5nIHRoZSBmaWxlIHNp bmNlIHRoaXMgd291bGQNCiAgICAgIHByZXZlbnQgcHJvZ3JhbXMgdG8gdXNlIHRoZSBkYXRhIG9m IHRoZSBmaWxlIGluIGdlbmVyYXRpbmcgdGhlDQotICAgICBuZXcgZmlsZS4gIFdlIHRydW5jYXRl IHRoZSBmaWxlIGxhdGVyIGluIHRoaXMgY2FzZS4NCi0NCi0gICAgIE5vdGUgd2UgdXNlIHBvc2l4 X2ZhbGxvY2F0ZSB0byBtYWtlIHN1cmUgdGhlIGZpbGUgY29udGVudCBpcyByZWFsbHkNCi0gICAg IHRoZXJlLiBPbmx5IHVzaW5nIGZ0cnVuY2F0ZSBtaWdodCBtZWFuIHRoZSBmaWxlIGlzIGV4dGVu ZGVkLCBidXQgc3BhY2UNCi0gICAgIGlzbid0IGFsbG9jYXRlZCB5ZXQuIFRoaXMgbWlnaHQgY2F1 c2UgYSBTSUdCVVMgb25jZSB3ZSB3cml0ZSBpbnRvDQotICAgICB0aGUgbW1hcHBlZCBzcGFjZSBh bmQgdGhlIGRpc2sgaXMgZnVsbC4gVXNpbmcgZmFsbG9jYXRlIG1pZ2h0IGZhaWwNCi0gICAgIG9u IHNvbWUgZmlsZSBzeXN0ZW1zLiBwb3NpeF9mYWxsb2NhdGUgaXMgcmVxdWlyZWQgdG8gZXh0ZW5k IHRoZSBmaWxlDQotICAgICBhbmQgYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGV2ZW4gaWYgdGhlIHVu ZGVybHlpbmcgZmlsZXN5c3RlbSB3b3VsZA0KLSAgICAgbm9ybWFsbHkgcmV0dXJuIEVPUE5PVFNV UFAuICBOb3RlIHRoYXQgd2UgZG8gYWxzbyBuZWVkIHRvIGZ0cnVuY2F0ZQ0KLSAgICAgaW4gY2Fz ZSB0aGUgbWF4aW11bV9zaXplIGlzbid0IGtub3duIGFuZCB0aGUgZmlsZSBuZWVkcyB0byBiZSBz aG9ydGVyDQotICAgICBiZWNhdXNlIHBvc2l4X2ZhbGxvY2F0ZSBjYW4gb25seSBleHRlbmQuICAq Lw0KKyAgICAgbmV3IGZpbGUuICBXZSB0cnVuY2F0ZSB0aGUgZmlsZSBsYXRlciBpbiB0aGlzIGNh c2UuICAqLw0KICAgaWYgKGVsZi0+cGFyZW50ID09IE5VTEwNCiAgICAgICAmJiAoZWxmLT5tYXhp bXVtX3NpemUgPT0gfigoc2l6ZV90KSAwKQ0KIAkgIHx8IChzaXplX3QpIHNpemUgPiBlbGYtPm1h eGltdW1fc2l6ZSkNCi0gICAgICAmJiB1bmxpa2VseSAoZnRydW5jYXRlIChlbGYtPmZpbGRlcywg c2l6ZSkgIT0gMCkNCi0gICAgICAmJiB1bmxpa2VseSAocG9zaXhfZmFsbG9jYXRlIChlbGYtPmZp bGRlcywgMCwgc2l6ZSkgIT0gMCkpDQorICAgICAgJiYgdW5saWtlbHkgKGZ0cnVuY2F0ZSAoZWxm LT5maWxkZXMsIHNpemUpICE9IDApKQ0KICAgICB7DQogICAgICAgX19saWJlbGZfc2V0ZXJybm8g KEVMRl9FX1dSSVRFX0VSUk9SKTsNCiAgICAgICByZXR1cm4gLTE7DQpAQCAtODksNiArNzgsMjcg QEAgd3JpdGVfZmlsZSAoRWxmICplbGYsIG9mZl90IHNpemUsIGludCBjaGFuZ2VfYm8sIHNpemVf dCBzaG51bSkNCiANCiAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwpDQogICAgIHsNCisg ICAgICAvKiBXaGVuIHVzaW5nIG1tYXAgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGZpbGUgY29u dGVudCBpcw0KKwkgcmVhbGx5IHRoZXJlLiBPbmx5IHVzaW5nIGZ0cnVuY2F0ZSBtaWdodCBtZWFu IHRoZSBmaWxlIGlzDQorCSBleHRlbmRlZCwgYnV0IHNwYWNlIGlzbid0IGFsbG9jYXRlZCB5ZXQu ICBUaGlzIG1pZ2h0IGNhdXNlIGENCisJIFNJR0JVUyBvbmNlIHdlIHdyaXRlIGludG8gdGhlIG1t YXBwZWQgc3BhY2UgYW5kIHRoZSBkaXNrIGlzDQorCSBmdWxsLiAgSW4gZ2xpYmMgcG9zaXhfZmFs bG9jYXRlIGlzIHJlcXVpcmVkIHRvIGV4dGVuZCB0aGUNCisJIGZpbGUgYW5kIGFsbG9jYXRlIGVu b3VnaCBzcGFjZSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nDQorCSBmaWxlc3lzdGVtIHdvdWxkIG5v cm1hbGx5IHJldHVybiBFT1BOT1RTVVBQLiAgQnV0IG90aGVyDQorCSBpbXBsZW1lbnRhdGlvbnMg bWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuICBBbmQgdGhlIGdsaWJjDQorCSBmYWxsYmFjayBj YXNlIG1pZ2h0IGZhaWwgKHdpdGggdW5leHBlY3RlZCBlcnJub3MpIGluIHNvbWUgY2FzZXMuDQor CSBTbyB3ZSBvbmx5IHJlcG9ydCBhbiBlcnJvciB3aGVuIHRoZSBjYWxsIGZhaWxzIGFuZCBlcnJu byBpcw0KKwkgRU5PU1BDLiBPdGhlcndpc2Ugd2UgaWdub3JlIHRoZSBlcnJvciBhbmQgdHJlYXQg aXQgYXMganVzdCBoaW50LiAgKi8NCisgICAgICBpZiAoZWxmLT5wYXJlbnQgPT0gTlVMTA0KKwkg ICYmIChlbGYtPm1heGltdW1fc2l6ZSA9PSB+KChzaXplX3QpIDApDQorCSAgICAgIHx8IChzaXpl X3QpIHNpemUgPiBlbGYtPm1heGltdW1fc2l6ZSkNCisJICAmJiB1bmxpa2VseSAocG9zaXhfZmFs bG9jYXRlIChlbGYtPmZpbGRlcywgMCwgc2l6ZSkgIT0gMCkpDQorCWlmIChlcnJubyA9PSBFTk9T UEMpDQorCSAgew0KKwkgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX1dSSVRFX0VSUk9SKTsN CisJICAgIHJldHVybiAtMTsNCisJICB9DQorDQogICAgICAgLyogVGhlIGZpbGUgaXMgbW1hcGVk LiAgKi8NCiAgICAgICBpZiAoKGNsYXNzID09IEVMRkNMQVNTMzINCiAJICAgPyBfX2VsZjMyX3Vw ZGF0ZW1tYXAgKGVsZiwgY2hhbmdlX2JvLCBzaG51bSkNCi0tIA0KMS44LjMuMQ0KDQo= --===============3490300195346147134==--