Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 632
b: refs/heads/master
c: dd1d5af
h: refs/heads/master
v: v3
  • Loading branch information
William Lee Irwin III authored and Linus Torvalds committed May 1, 2005
1 parent 581871a commit e67156c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 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: 93ea1d0a12623dc1a693642b5758261f35f9bf96
refs/heads/master: dd1d5afca8d3bda7ff9db773fc08e648d2503dc6
20 changes: 19 additions & 1 deletion trunk/mm/filemap.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,25 @@ static int sync_page(void *word)
page = container_of((page_flags_t *)word, struct page, flags);

/*
* FIXME, fercrissake. What is this barrier here for?
* page_mapping() is being called without PG_locked held.
* Some knowledge of the state and use of the page is used to
* reduce the requirements down to a memory barrier.
* The danger here is of a stale page_mapping() return value
* indicating a struct address_space different from the one it's
* associated with when it is associated with one.
* After smp_mb(), it's either the correct page_mapping() for
* the page, or an old page_mapping() and the page's own
* page_mapping() has gone NULL.
* The ->sync_page() address_space operation must tolerate
* page_mapping() going NULL. By an amazing coincidence,
* this comes about because none of the users of the page
* in the ->sync_page() methods make essential use of the
* page_mapping(), merely passing the page down to the backing
* device's unplug functions when it's non-NULL, which in turn
* ignore it for all cases but swap, where only page->private is
* of interest. When page_mapping() does go NULL, the entire
* call stack gracefully ignores the page and returns.
* -- wli
*/
smp_mb();
mapping = page_mapping(page);
Expand Down

0 comments on commit e67156c

Please sign in to comment.