From c2d659bf38149cc2dd89463c722d6465644ac611 Mon Sep 17 00:00:00 2001 From: KOSAKI Motohiro Date: Tue, 24 May 2011 17:11:29 -0700 Subject: [PATCH] --- yaml --- r: 250871 b: refs/heads/master c: f62e00cc3a00bfbd394a79fc22b334c31f91bd5f h: refs/heads/master i: 250869: 7b6d1f579bc656e6f138da03b66ee5e8cdcc2f90 250867: 8c2e73ba4c5cc1cfcd8bdd9ae178a47085da3e05 250863: 42ff1ce5a412c780c07b95bc038a50ab9da67a77 v: v3 --- [refs] | 2 +- trunk/include/linux/pagemap.h | 9 +++++++++ trunk/mm/filemap.c | 11 +++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index e4dcbfbe3052..623729e03c76 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fa25c503dfa203b921199ea42c0046c89f2ed49f +refs/heads/master: f62e00cc3a00bfbd394a79fc22b334c31f91bd5f diff --git a/trunk/include/linux/pagemap.h b/trunk/include/linux/pagemap.h index c11950652646..ea268080380d 100644 --- a/trunk/include/linux/pagemap.h +++ b/trunk/include/linux/pagemap.h @@ -357,6 +357,15 @@ static inline int lock_page_or_retry(struct page *page, struct mm_struct *mm, */ extern void wait_on_page_bit(struct page *page, int bit_nr); +extern int wait_on_page_bit_killable(struct page *page, int bit_nr); + +static inline int wait_on_page_locked_killable(struct page *page) +{ + if (PageLocked(page)) + return wait_on_page_bit_killable(page, PG_locked); + return 0; +} + /* * Wait for a page to be unlocked. * diff --git a/trunk/mm/filemap.c b/trunk/mm/filemap.c index c641edf553a9..dea8a38bb2bb 100644 --- a/trunk/mm/filemap.c +++ b/trunk/mm/filemap.c @@ -562,6 +562,17 @@ void wait_on_page_bit(struct page *page, int bit_nr) } EXPORT_SYMBOL(wait_on_page_bit); +int wait_on_page_bit_killable(struct page *page, int bit_nr) +{ + DEFINE_WAIT_BIT(wait, &page->flags, bit_nr); + + if (!test_bit(bit_nr, &page->flags)) + return 0; + + return __wait_on_bit(page_waitqueue(page), &wait, + sleep_on_page_killable, TASK_KILLABLE); +} + /** * add_page_wait_queue - Add an arbitrary waiter to a page's wait queue * @page: Page defining the wait queue of interest