diff options
author | Matthew Wilcox (Oracle) <willy@infradead.org> | 2019-07-03 23:21:25 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2019-07-16 19:30:59 -0700 |
commit | 23c84eb7837514e16d79ed6d849b13745e0ce688 (patch) | |
tree | 001b98406a81d04bb1327949a46a42a71b6c5eb2 /drivers | |
parent | 40cdc60ac16a42eb4e013f84d0e7aa1d6ee060d3 (diff) |
dax: Fix missed wakeup with PMD faults
RocksDB can hang indefinitely when using a DAX file. This is due to
a bug in the XArray conversion when handling a PMD fault and finding a
PTE entry. We use the wrong index in the hash and end up waiting on
the wrong waitqueue.
There's actually no need to wait; if we find a PTE entry while looking
for a PMD entry, we can return immediately as we know we should fall
back to a PTE fault (which may not conflict with the lock held).
We reuse the XA_RETRY_ENTRY to signal a conflicting entry was found.
This value can never be found in an XArray while holding its lock, so
it does not create an ambiguity.
Cc: <stable@vger.kernel.org>
Link: http://lkml.kernel.org/r/CAPcyv4hwHpX-MkUEqxwdTj7wCCZCN4RV-L4jsnuwLGyL_UEG4A@mail.gmail.com
Fixes: b15cd800682f ("dax: Convert page fault handlers to XArray")
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Tested-by: Dan Williams <dan.j.williams@intel.com>
Reported-by: Robert Barror <robert.barror@intel.com>
Reported-by: Seema Pandit <seema.pandit@intel.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers')
0 files changed, 0 insertions, 0 deletions