unlock_page — unlock a locked page
void unlock_page ( | struct page * page) ; |
Unlocks the page and wakes up sleepers in ___wait_on_page_locked
.
Also wakes sleepers in wait_on_page_writeback
because the wakeup
mechananism between PageLocked pages and PageWriteback pages is shared.
But that's OK - sleepers in wait_on_page_writeback
just go back to sleep.
The first mb is necessary to safely close the critical section opened by the
test_and_set_bit
to lock the page; the second mb is necessary to enforce
ordering between the clear_bit and the read of the waitqueue (to avoid SMP
races with a parallel wait_on_page_locked
).