aboutsummaryrefslogtreecommitdiffstats
path: root/mm/filemap.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/filemap.c')
-rw-r--r--mm/filemap.c21
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 */
673static wait_queue_head_t *page_waitqueue(struct page *page) 673wait_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 679EXPORT_SYMBOL(page_waitqueue);
680static inline void wake_up_page(struct page *page, int bit)
681{
682 __wake_up_bit(page_waitqueue(page), &page->flags, bit);
683}
684 680
685void wait_on_page_bit(struct page *page, int bit_nr) 681void 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
702int 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}
713EXPORT_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