On Wed, Nov 10, 2010 at 1:00 AM, Bob Liu <lliubbo@xxxxxxxxx> wrote: > Use TestSetPageDirty() to clean up set_page_dirty(). > > Signed-off-by: Bob Liu <lliubbo@xxxxxxxxx> > --- > mm/page-writeback.c | 7 ++----- > 1 files changed, 2 insertions(+), 5 deletions(-) > > diff --git a/mm/page-writeback.c b/mm/page-writeback.c > index e8f5f06..da86224 100644 > --- a/mm/page-writeback.c > +++ b/mm/page-writeback.c > @@ -1268,11 +1268,8 @@ int set_page_dirty(struct page *page) > #endif > return (*spd)(page); > } > - if (!PageDirty(page)) { > - if (!TestSetPageDirty(page)) > - return 1; > - } > - return 0; > + > + return !TestSetPageDirty(page); > } > EXPORT_SYMBOL(set_page_dirty); TestSetPageDirty compiles to a locked bts instruction (on x86). This will acquire the cache line for exclusive access, even when the bit is already set. I think this is why we have an extra if (!PageDirty(page)) test - we don't want to cause cache coherency overhead if the page is already dirty. -- Michel "Walken" Lespinasse A program is never fully debugged until the last user dies. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href