lkml.org 
[lkml]   [2009]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 5/5] proc: export more page flags in /proc/kpageflags
    On Tue, 28 Apr 2009 17:46:34 -0500
    Matt Mackall <mpm@selenic.com> wrote:

    > > > +/* a helper function _not_ intended for more general uses */
    > > > +static inline int page_cap_writeback_dirty(struct page *page)
    > > > +{
    > > > + struct address_space *mapping;
    > > > +
    > > > + if (!PageSlab(page))
    > > > + mapping = page_mapping(page);
    > > > + else
    > > > + mapping = NULL;
    > > > +
    > > > + return mapping && mapping_cap_writeback_dirty(mapping);
    > > > +}
    > >
    > > If the page isn't locked then page->mapping can be concurrently removed
    > > and freed. This actually happened to me in real-life testing several
    > > years ago.
    >
    > We certainly don't want to be taking locks per page to build the flags
    > data here. As we don't have any pretense of being atomic, it's ok if we
    > can find a way to do the test that's inaccurate when a race occurs, so
    > long as it doesn't dereference null.
    >
    > But if there's not an obvious way to do that, we should probably just
    > drop this flag bit for this iteration.

    trylock_page() could be used here, perhaps.

    Then again, why _not_ just do lock_page()? After all, few pages are
    ever locked. There will be latency if the caller stumbles across a
    page which is under read I/O, but so be it?



    \
     
     \ /
      Last update: 2009-04-29 01:09    [W:0.023 / U:0.328 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site