btrfs: Add error check for add_to_page_cache_lru
PATCH 4/10 btrfs: Add error check for add_to_page_cache_lru
From: Liu Bo <[email protected]>
If add_to_page_cache_lru() returns -EEXIST, it indicates the page that belongs to this page_index has been added and this readahead action can go on to next page.
If add_to_page_cache_lru() returns -ENOMEM, it should break for no memory left.
--- fs/btrfs/compression.c | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-)
fs/btrfs/compression.c +16 -3
@@ -480,10 +480,23 @@ static noinline int add_ra_bio_pages(struct inode *inode,if (!page)break ; -if (add_to_page_cache_lru (page, mapping, page_index, -GFP_NOFS )) { + ret =add_to_page_cache_lru (page, mapping, page_index, +GFP_NOFS ); +if (ret) {page_cache_release (page); - goto next; + +/* +* -EEXIST indicates the page has been added, so +* it can move on to next page. +*/ +if (ret == -EEXIST ) { + misses++; +if (misses >4 ) +break ; + goto next; + } + +break ; } end = last_offset +PAGE_CACHE_SIZE -1 ;
Signature · 1 line
1.6.5.2
T24gVGh1LCBNYXkgMjAsIDIwMTAgYXQgMTI6MTggQU0sIE1pYW8gWGllIDxtaWFveEBjbi5mdWpp dHN1LmNvbT4gd3JvdGU6Cj4gRnJvbTogTGl1IEJvIDxsaXVibzIwMDlAY24uZnVqaXRzdS5jb20+ Cj4KPiBJZiBhZGRfdG9fcGFnZV9jYWNoZV9scnUoKSByZXR1cm5zIC1FRVhJU1QsIGl0IGluZGlj YXRlcyB0aGUgcGFnZQo+IHRoYXQgYmVsb25ncyB0byB0aGlzIHBhZ2VfaW5kZXggaGFzIGJlZW4g YWRkZWQgYW5kIHRoaXMgcmVhZGFoZWFkCj4gYWN0aW9uIGNhbiBnbyBvbiB0byBuZXh0IHBhZ2Uu Cj4KPiBJZiBhZGRfdG9fcGFnZV9jYWNoZV9scnUoKSByZXR1cm5zIC1FTk9NRU0sIGl0IHNob3Vs ZCBicmVhayBmb3IKPiBubyBtZW1vcnkgbGVmdC4KPgo+IFNpZ25lZC1vZmYtYnk6IExpdSBCbyA8 bGl1Ym8yMDA5QGNuLmZ1aml0c3UuY29tPgo+IFNpZ25lZC1vZmYtYnk6IE1pYW8gWGllIDxtaWFv eEBjbi5mdWppdHN1LmNvbT4KPiAtLS0KPiDCoGZzL2J0cmZzL2NvbXByZXNzaW9uLmMgfCDCoCAx OSArKysrKysrKysrKysrKysrLS0tCj4gwqAxIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMo KyksIDMgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY29tcHJlc3Npb24u YyBiL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKPiBpbmRleCAxZDU0YzUzLi4xYmQ0ZDkyIDEwMDY0 NAo+IC0tLSBhL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKPiArKysgYi9mcy9idHJmcy9jb21wcmVz c2lvbi5jCj4gQEAgLTQ4MCwxMCArNDgwLDIzIEBAIHN0YXRpYyBub2lubGluZSBpbnQgYWRkX3Jh X2Jpb19wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg aWYgKCFwYWdlKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4K PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwg bWFwcGluZywgcGFnZV9pbmRleCwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIEdGUF9OT0ZTKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0ID0gYWRkX3RvX3Bh Z2VfY2FjaGVfbHJ1KHBhZ2UsIG1hcHBpbmcsIHBhZ2VfaW5kZXgsCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBHRlBfTk9GUyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpZiAocmV0KSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwYWdlX2Nh Y2hlX3JlbGVhc2UocGFnZSk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBn b3RvIG5leHQ7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyoKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiAtRUVYSVNUIGluZGljYXRlcyB0 aGUgcGFnZSBoYXMgYmVlbiBhZGRlZCwgc28KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgKiBpdCBjYW4gbW92ZSBvbiB0byBuZXh0IHBhZ2UuCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCovCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBpZiAocmV0ID09IC1FRVhJU1QpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIG1pc3NlcysrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKG1pc3NlcyA+IDQpCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKClNob3VsZG4n dCB0aGlzIHVzZSBhIHByZS1wcm9jZXNzb3IgbGFiZWwgaW5zdGVhZCBvZiBoYXJkIGNvZGluZwpj b21wcmVzc2lvbiBzZW5zaXRpdml0eSBvciByZWFkYWhlYWQgdHVuaW5nPyAgdGhpcyB3YXkgaXQn bGwgYmUgc2V0IGluCm9uZSBwbGFjZS4KCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBnb3RvIG5leHQ7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9Cj4KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVu ZCA9IGxhc3Rfb2Zmc2V0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMTsKPiAtLQo+IDEuNi41LjIKPgo+ IC0tCj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vi c2NyaWJlIGxpbnV4LWJ0cmZzIiBpbgo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRv bW9Admdlci5rZXJuZWwub3JnCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCDCoGh0dHA6Ly92Z2Vy Lmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAo+Cg==
Quoted 5 lines · Mike Fedyk
Shouldn't this use a pre-processor label instead of hard coding compression sensitivity or readahead tuning? this way it'll be set in one place.
All right.
Since Adding a macro may make the whole code harder to read, I add a "goto" to avoid this kind of hard coding style instead.
Thanks.
Signature · 1 line
Liubo