mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
[PATCH] add AOP_TRUNCATED_PAGE, prepend AOP_ to WRITEPAGE_ACTIVATE
readpage(), prepare_write(), and commit_write() callers are updated to understand the special return code AOP_TRUNCATED_PAGE in the style of writepage() and WRITEPAGE_ACTIVATE. AOP_TRUNCATED_PAGE tells the caller that the callee has unlocked the page and that the operation should be tried again with a new page. OCFS2 uses this to detect and work around a lock inversion in its aop methods. There should be no change in behaviour for methods that don't return AOP_TRUNCATED_PAGE. WRITEPAGE_ACTIVATE is also prepended with AOP_ for consistency and they are made enums so that kerneldoc can be used to document their semantics. Signed-off-by: Zach Brown <[email protected]>
This commit is contained in:
parent
7063fbf226
commit
994fc28c7b
9 changed files with 113 additions and 45 deletions
|
|
@ -158,7 +158,7 @@ static int read_pages(struct address_space *mapping, struct file *filp,
|
|||
{
|
||||
unsigned page_idx;
|
||||
struct pagevec lru_pvec;
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
if (mapping->a_ops->readpages) {
|
||||
ret = mapping->a_ops->readpages(filp, mapping, pages, nr_pages);
|
||||
|
|
@ -171,14 +171,17 @@ static int read_pages(struct address_space *mapping, struct file *filp,
|
|||
list_del(&page->lru);
|
||||
if (!add_to_page_cache(page, mapping,
|
||||
page->index, GFP_KERNEL)) {
|
||||
mapping->a_ops->readpage(filp, page);
|
||||
if (!pagevec_add(&lru_pvec, page))
|
||||
__pagevec_lru_add(&lru_pvec);
|
||||
} else {
|
||||
page_cache_release(page);
|
||||
ret = mapping->a_ops->readpage(filp, page);
|
||||
if (ret != AOP_TRUNCATED_PAGE) {
|
||||
if (!pagevec_add(&lru_pvec, page))
|
||||
__pagevec_lru_add(&lru_pvec);
|
||||
continue;
|
||||
} /* else fall through to release */
|
||||
}
|
||||
page_cache_release(page);
|
||||
}
|
||||
pagevec_lru_add(&lru_pvec);
|
||||
ret = 0;
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue