Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 115864
b: refs/heads/master
c: 8413ac9
h: refs/heads/master
v: v3
  • Loading branch information
Nick Piggin authored and Linus Torvalds committed Oct 20, 2008
1 parent 54c5a8d commit 1d89ad2
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a978d6f521063514812a7094dbe5036e056e4de3
refs/heads/master: 8413ac9d8c9a1366a4f57880723126cd24e5a5c3
2 changes: 1 addition & 1 deletion trunk/include/linux/pagemap.h
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ static inline void __clear_page_locked(struct page *page)

static inline int trylock_page(struct page *page)
{
return !test_and_set_bit(PG_locked, &page->flags);
return (likely(!test_and_set_bit_lock(PG_locked, &page->flags)));
}

/*
Expand Down
13 changes: 5 additions & 8 deletions trunk/mm/filemap.c
Original file line number Diff line number Diff line change
Expand Up @@ -573,17 +573,14 @@ EXPORT_SYMBOL(wait_on_page_bit);
* 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()).
* The 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()).
*/
void unlock_page(struct page *page)
{
smp_mb__before_clear_bit();
if (!test_and_clear_bit(PG_locked, &page->flags))
BUG();
smp_mb__after_clear_bit();
VM_BUG_ON(!PageLocked(page));
clear_bit_unlock(PG_locked, &page->flags);
smp_mb__after_clear_bit();
wake_up_page(page, PG_locked);
}
EXPORT_SYMBOL(unlock_page);
Expand Down
2 changes: 1 addition & 1 deletion trunk/mm/swapfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ void free_swap_and_cache(swp_entry_t entry)
if (p) {
if (swap_entry_free(p, swp_offset(entry)) == 1) {
page = find_get_page(&swapper_space, entry.val);
if (page && unlikely(!trylock_page(page))) {
if (page && !trylock_page(page)) {
page_cache_release(page);
page = NULL;
}
Expand Down

0 comments on commit 1d89ad2

Please sign in to comment.