diff options
Diffstat (limited to 'mm/filemap.c')
-rw-r--r-- | mm/filemap.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index 8554d20b3523..0ab0a3ea5721 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
@@ -670,17 +670,13 @@ EXPORT_SYMBOL(__page_cache_alloc); | |||
670 | * at a cost of "thundering herd" phenomena during rare hash | 670 | * at a cost of "thundering herd" phenomena during rare hash |
671 | * collisions. | 671 | * collisions. |
672 | */ | 672 | */ |
673 | static wait_queue_head_t *page_waitqueue(struct page *page) | 673 | wait_queue_head_t *page_waitqueue(struct page *page) |
674 | { | 674 | { |
675 | const struct zone *zone = page_zone(page); | 675 | const struct zone *zone = page_zone(page); |
676 | 676 | ||
677 | return &zone->wait_table[hash_ptr(page, zone->wait_table_bits)]; | 677 | return &zone->wait_table[hash_ptr(page, zone->wait_table_bits)]; |
678 | } | 678 | } |
679 | 679 | EXPORT_SYMBOL(page_waitqueue); | |
680 | static inline void wake_up_page(struct page *page, int bit) | ||
681 | { | ||
682 | __wake_up_bit(page_waitqueue(page), &page->flags, bit); | ||
683 | } | ||
684 | 680 | ||
685 | void wait_on_page_bit(struct page *page, int bit_nr) | 681 | void wait_on_page_bit(struct page *page, int bit_nr) |
686 | { | 682 | { |
@@ -703,6 +699,19 @@ int wait_on_page_bit_killable(struct page *page, int bit_nr) | |||
703 | bit_wait_io, TASK_KILLABLE); | 699 | bit_wait_io, TASK_KILLABLE); |
704 | } | 700 | } |
705 | 701 | ||
702 | int wait_on_page_bit_killable_timeout(struct page *page, | ||
703 | int bit_nr, unsigned long timeout) | ||
704 | { | ||
705 | DEFINE_WAIT_BIT(wait, &page->flags, bit_nr); | ||
706 | |||
707 | wait.key.timeout = jiffies + timeout; | ||
708 | if (!test_bit(bit_nr, &page->flags)) | ||
709 | return 0; | ||
710 | return __wait_on_bit(page_waitqueue(page), &wait, | ||
711 | bit_wait_io_timeout, TASK_KILLABLE); | ||
712 | } | ||
713 | EXPORT_SYMBOL_GPL(wait_on_page_bit_killable_timeout); | ||
714 | |||
706 | /** | 715 | /** |
707 | * add_page_wait_queue - Add an arbitrary waiter to a page's wait queue | 716 | * add_page_wait_queue - Add an arbitrary waiter to a page's wait queue |
708 | * @page: Page defining the wait queue of interest | 717 | * @page: Page defining the wait queue of interest |