diff options
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 12 |
1 files changed, 4 insertions, 8 deletions
@@ -216,9 +216,8 @@ static void *get_unlocked_entry(struct xa_state *xas) | |||
216 | ewait.wait.func = wake_exceptional_entry_func; | 216 | ewait.wait.func = wake_exceptional_entry_func; |
217 | 217 | ||
218 | for (;;) { | 218 | for (;;) { |
219 | entry = xas_load(xas); | 219 | entry = xas_find_conflict(xas); |
220 | if (!entry || xa_is_internal(entry) || | 220 | if (!entry || WARN_ON_ONCE(!xa_is_value(entry)) || |
221 | WARN_ON_ONCE(!xa_is_value(entry)) || | ||
222 | !dax_is_locked(entry)) | 221 | !dax_is_locked(entry)) |
223 | return entry; | 222 | return entry; |
224 | 223 | ||
@@ -458,11 +457,9 @@ static void *grab_mapping_entry(struct xa_state *xas, | |||
458 | retry: | 457 | retry: |
459 | xas_lock_irq(xas); | 458 | xas_lock_irq(xas); |
460 | entry = get_unlocked_entry(xas); | 459 | entry = get_unlocked_entry(xas); |
461 | if (xa_is_internal(entry)) | ||
462 | goto fallback; | ||
463 | 460 | ||
464 | if (entry) { | 461 | if (entry) { |
465 | if (WARN_ON_ONCE(!xa_is_value(entry))) { | 462 | if (!xa_is_value(entry)) { |
466 | xas_set_err(xas, EIO); | 463 | xas_set_err(xas, EIO); |
467 | goto out_unlock; | 464 | goto out_unlock; |
468 | } | 465 | } |
@@ -1641,8 +1638,7 @@ dax_insert_pfn_mkwrite(struct vm_fault *vmf, pfn_t pfn, unsigned int order) | |||
1641 | /* Did we race with someone splitting entry or so? */ | 1638 | /* Did we race with someone splitting entry or so? */ |
1642 | if (!entry || | 1639 | if (!entry || |
1643 | (order == 0 && !dax_is_pte_entry(entry)) || | 1640 | (order == 0 && !dax_is_pte_entry(entry)) || |
1644 | (order == PMD_ORDER && (xa_is_internal(entry) || | 1641 | (order == PMD_ORDER && !dax_is_pmd_entry(entry))) { |
1645 | !dax_is_pmd_entry(entry)))) { | ||
1646 | put_unlocked_entry(&xas, entry); | 1642 | put_unlocked_entry(&xas, entry); |
1647 | xas_unlock_irq(&xas); | 1643 | xas_unlock_irq(&xas); |
1648 | trace_dax_insert_pfn_mkwrite_no_entry(mapping->host, vmf, | 1644 | trace_dax_insert_pfn_mkwrite_no_entry(mapping->host, vmf, |