All of lore.kernel.org
 help / color / mirror / Atom feed
* Unnecessary barrier in sync_page()?
@ 2004-07-07 17:57 Marcelo Tosatti
  2004-07-07 18:20 ` Andrea Arcangeli
  0 siblings, 1 reply; 14+ messages in thread
From: Marcelo Tosatti @ 2004-07-07 17:57 UTC (permalink / raw)
  To: mason; +Cc: akpm, linux-kernel


Hi Chris,

I was talking to Andrew about this memory barrier 

static inline int sync_page(struct page *page)
{
        struct address_space *mapping;
                                                                                        
        /*
         * FIXME, fercrissake.  What is this barrier here for?
         */
        smp_mb();
        mapping = page_mapping(page);
        if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
                return mapping->a_ops->sync_page(page);
        return 0;
}

And does not seem to be a reason for it. The callers are:

void fastcall wait_on_page_bit(struct page *page, int bit_nr)
{
        wait_queue_head_t *waitqueue = page_waitqueue(page);
        DEFINE_PAGE_WAIT(wait, page, bit_nr);
                                                                                        
        do {
                prepare_to_wait(waitqueue, &wait.wait, TASK_UNINTERRUPTIBLE);
                if (test_bit(bit_nr, &page->flags)) {
                        sync_page(page);
                        io_schedule();
                }
        } while (test_bit(bit_nr, &page->flags));
        finish_wait(waitqueue, &wait.wait);
} 

void fastcall __lock_page(struct page *page)
{
        wait_queue_head_t *wqh = page_waitqueue(page);
        DEFINE_PAGE_WAIT_EXCLUSIVE(wait, page, PG_locked);
                                                                                        
        while (TestSetPageLocked(page)) {
                prepare_to_wait_exclusive(wqh, &wait.wait, TASK_UNINTERRUPTIBLE);
                if (PageLocked(page)) {
                        sync_page(page);
                        io_schedule();
                }
        }
        finish_wait(wqh, &wait.wait);
}

Both callers call set_bit (atomic operation which cannot be reordered) before 
sync_page(), so.. what is the barrier trying to guarantee? 

TIA


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2004-07-07 22:24 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-07-07 17:57 Unnecessary barrier in sync_page()? Marcelo Tosatti
2004-07-07 18:20 ` Andrea Arcangeli
2004-07-07 18:29   ` Andrew Morton
2004-07-07 18:42     ` Andrea Arcangeli
2004-07-07 18:46       ` Andrea Arcangeli
2004-07-07 20:57       ` Chris Mason
2004-07-07 21:06         ` Andrea Arcangeli
2004-07-07 21:15           ` Chris Mason
2004-07-07 21:30           ` Andrew Morton
2004-07-07 21:34             ` Chris Mason
2004-07-07 22:02             ` Andrea Arcangeli
2004-07-07 22:27               ` Andrew Morton
2004-07-07 18:58   ` Marcelo Tosatti
2004-07-07 19:12     ` Andrea Arcangeli

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.