hello,

On Saturday 15 April 2006 12:57, Nick Piggin wrote:
> Hi Andrew,
>
> Can you put the following in -mm please? I cc'ed Hans about it
> earlier. Basically, resier4 does not present a good reason why
> pagecache should be dropped here. 

correct. it duplicates remove_mapping().

we tested similar patch recently and found no problems.

> Basically the exact same operations 
> are performed by releasepage callers (reclaim or truncate). If there
> is some atomicity problem, the code removed here wouldn't solve it
> anyway.
>
> And unless reiser4 performs some of its own special synchronisation,
> I can't see how it gets the pagecache removal sequence right for the
> reclaim case (ie. careful checks of page_count and PageDirty under
> tree_lock).

>
> With this patch in place, reiser4-reget-page-mapping.patch can go.
> I would also be worried about exporting remove_from_page_cache... at
> least the __ variant can stop being exported now.
>
> --
> Index: linux-2.6/fs/reiser4/as_ops.c
> ===================================================================
> --- linux-2.6.orig/fs/reiser4/as_ops.c
> +++ linux-2.6/fs/reiser4/as_ops.c
> @@ -358,11 +358,6 @@ int reiser4_releasepage(struct page *pag
>       assert("reiser4-4", page->mapping != NULL);
>       assert("reiser4-5", page->mapping->host != NULL);
>

Except my patch didn't remove the page ref count check from 
reiser4_releasepage.

Nick, does the check conflict with the lockless pagecache patches?  
Reiser4 just tries to avoid unnecessary detaching private page objects 
if the page_count doesn't allow page removal.

> -     /* is_page_cache_freeable() check
> -        (mapping + private + page_cache_get() by shrink_cache()) */
> -     if (page_count(page) > 3)
> -             return 0;
> -
>       if (PageDirty(page))
>               return 0;
>
> @@ -385,14 +380,6 @@ int reiser4_releasepage(struct page *pag
>               /* we are under memory pressure so release jnode also. */
>               jput(node);
>
> -             write_lock_irq(&mapping->tree_lock);
> -             /* shrink_list() + radix-tree */
> -             if (page_count(page) == 2) {
> -                     __remove_from_page_cache(page);
> -                     atomic_dec(&page->_count);
> -             }
> -             write_unlock_irq(&mapping->tree_lock);
> -
>               return 1;
>       } else {
>               spin_unlock(&(node->load));

-- 
Alex.

Reply via email to