mm: add support for async page locking
authorJens Axboe <axboe@kernel.dk>
Fri, 22 May 2020 15:12:09 +0000 (09:12 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 26 May 2020 22:01:57 +0000 (16:01 -0600)
commit629a18c5e47fd8159afd2196fcb6296605e94ca9
tree3bdb0c0449474d95de00fb97aa609c176274630f
parent52cd3228ee2a957c2101ba682d97f565efe9e4b3
mm: add support for async page locking

Normally waiting for a page to become unlocked, or locking the page,
requires waiting for IO to complete. Add support for lock_page_async()
and wait_on_page_locked_async(), which are callback based instead. This
allows a caller to get notified when a page becomes unlocked, rather
than wait for it.

We add a new iocb field, ki_waitq, to pass in the necessary data for this
to happen. We can unionize this with ki_cookie, since that is only used
for polled IO. Polled IO can never co-exist with async callbacks, as it is
(by definition) polled completions. struct wait_page_key is made public,
and we define struct wait_page_async as the interface between the caller
and the core.

Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/fs.h
include/linux/pagemap.h
mm/filemap.c