lkml.org 
[lkml]   [2009]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [patch 68/85] fs: symlink write_begin allocation context fix
    On Thu, Jan 15, 2009 at 02:01:36PM -0800, Greg KH wrote:
    > 2.6.27-stable review patch. If anyone has any objections, please let us know.

    Hm, I think I got the backport of this patch wrong in two place:

    > --- a/mm/filemap.c
    > +++ b/mm/filemap.c
    > @@ -2033,7 +2033,7 @@ int pagecache_write_begin(struct file *f
    > struct inode *inode = mapping->host;
    > struct page *page;
    > again:
    > - page = __grab_cache_page(mapping, index);
    > + page = grab_cache_page_write_begin(mapping, index, flags);

    I think this shouldn't be "flags", but 0, right?

    > *pagep = page;
    > if (!page)
    > return -ENOMEM;
    > @@ -2197,19 +2197,24 @@ EXPORT_SYMBOL(generic_file_direct_write)
    > * Find or create a page at the given pagecache position. Return the locked
    > * page. This function is specifically for buffered writes.
    > */
    > -struct page *__grab_cache_page(struct address_space *mapping, pgoff_t index)
    > +struct page *grab_cache_page_write_begin(struct address_space *mapping,
    > + pgoff_t index, unsigned flags)
    > {
    > int status;
    > struct page *page;
    > + gfp_t gfp_notmask = 0;
    > + if (flags & AOP_FLAG_NOFS)
    > + gfp_notmask = __GFP_FS;
    > repeat:
    > page = find_lock_page(mapping, index);
    > if (likely(page))
    > return page;
    >
    > - page = page_cache_alloc(mapping);
    > + page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask);
    > if (!page)
    > return NULL;
    > - status = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL);
    > + status = add_to_page_cache_lru(page, mapping, index,
    > + GFP_KERNEL & ~gfp_notmask);
    > if (unlikely(status)) {
    > page_cache_release(page);
    > if (status == -EEXIST)
    > @@ -2218,7 +2223,7 @@ repeat:
    > }
    > return page;
    > }
    > -EXPORT_SYMBOL(__grab_cache_page);
    > +EXPORT_SYMBOL(grab_cache_page_write_begin);
    >
    > static ssize_t generic_perform_write_2copy(struct file *file,
    > struct iov_iter *i, loff_t pos)
    > @@ -2263,7 +2268,7 @@ static ssize_t generic_perform_write_2co
    > break;
    > }
    >
    > - page = __grab_cache_page(mapping, index);
    > + page = grab_cache_page_write_begin(mapping, index, GFP_KERNEL);

    And this one? Is GFP_KERNEL ok, or 0?

    Nick, your thoughts?

    greg "i'm no mm hacker" k-h


    \
     
     \ /
      Last update: 2009-01-15 23:59    [W:0.026 / U:91.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site