diff options
-rw-r--r-- | mm/workingset.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/mm/workingset.c b/mm/workingset.c index ed8151180899..529480c21f93 100644 --- a/mm/workingset.c +++ b/mm/workingset.c | |||
@@ -431,7 +431,7 @@ static enum lru_status shadow_lru_isolate(struct list_head *item, | |||
431 | 431 | ||
432 | /* Coming from the list, invert the lock order */ | 432 | /* Coming from the list, invert the lock order */ |
433 | if (!xa_trylock(&mapping->i_pages)) { | 433 | if (!xa_trylock(&mapping->i_pages)) { |
434 | spin_unlock(lru_lock); | 434 | spin_unlock_irq(lru_lock); |
435 | ret = LRU_RETRY; | 435 | ret = LRU_RETRY; |
436 | goto out; | 436 | goto out; |
437 | } | 437 | } |
@@ -469,13 +469,11 @@ static enum lru_status shadow_lru_isolate(struct list_head *item, | |||
469 | workingset_lookup_update(mapping)); | 469 | workingset_lookup_update(mapping)); |
470 | 470 | ||
471 | out_invalid: | 471 | out_invalid: |
472 | xa_unlock(&mapping->i_pages); | 472 | xa_unlock_irq(&mapping->i_pages); |
473 | ret = LRU_REMOVED_RETRY; | 473 | ret = LRU_REMOVED_RETRY; |
474 | out: | 474 | out: |
475 | local_irq_enable(); | ||
476 | cond_resched(); | 475 | cond_resched(); |
477 | local_irq_disable(); | 476 | spin_lock_irq(lru_lock); |
478 | spin_lock(lru_lock); | ||
479 | return ret; | 477 | return ret; |
480 | } | 478 | } |
481 | 479 | ||