Skip to contentSkip to conversation

btrfs: Add error check for add_to_page_cache_lru

PATCH In review Miao Xie 3 participants 3 messages May 20, 2010 – May 24, 2010 Btrfs file system

lore
Share & tools
lore

Miao Xie

author
#0 lore raw

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
index 1d54c53..1bd4d92 100644
@@ -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
#1 lore raw

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==

#2 lore raw
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