|
@@ -564,6 +564,24 @@ void wait_on_page_bit(struct page *page, int bit_nr)
|
|
|
}
|
|
|
EXPORT_SYMBOL(wait_on_page_bit);
|
|
|
|
|
|
+/**
|
|
|
+ * add_page_wait_queue - Add an arbitrary waiter to a page's wait queue
|
|
|
+ * @page - Page defining the wait queue of interest
|
|
|
+ * @waiter - Waiter to add to the queue
|
|
|
+ *
|
|
|
+ * Add an arbitrary @waiter to the wait queue for the nominated @page.
|
|
|
+ */
|
|
|
+void add_page_wait_queue(struct page *page, wait_queue_t *waiter)
|
|
|
+{
|
|
|
+ wait_queue_head_t *q = page_waitqueue(page);
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&q->lock, flags);
|
|
|
+ __add_wait_queue(q, waiter);
|
|
|
+ spin_unlock_irqrestore(&q->lock, flags);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(add_page_wait_queue);
|
|
|
+
|
|
|
/**
|
|
|
* unlock_page - unlock a locked page
|
|
|
* @page: the page
|