From: Peter Zijlstra <peterz@infradead.org>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
"nickpiggin@yahoo.com.au" <nickpiggin@yahoo.com.au>,
ricknu-0@student.ltu.se,
"kamezawa.hiroyu@jp.fujitsu.com" <kamezawa.hiroyu@jp.fujitsu.com>
Subject: Re: [RFC][PATCH] page->mapping clarification [1/3] base functions
Date: Fri, 21 Sep 2007 13:48:28 +0200 [thread overview]
Message-ID: <20070921134828.45ca967e@twins> (raw)
In-Reply-To: <20070919164308.281f9960.kamezawa.hiroyu@jp.fujitsu.com>
On Wed, 19 Sep 2007 16:43:08 +0900 KAMEZAWA Hiroyuki
<kamezawa.hiroyu@jp.fujitsu.com> wrote:
> A clarification of page <-> fs interface (page cache).
>
> At first, each FS has to access to struct page->mapping directly.
> But it's not just pointer. (we use special 1bit enconding for anon.)
>
> Although there is historical consensus that page->mapping points to its inode's
> address space, I think adding some neat helper functon is not bad.
>
> This patch adds page-cache.h which containes page<->address_space<->inode
> function which is required (used) by subsystems.
>
> Following functions are added
>
> * page_mapping_cache() ... returns address space if a page is page cache
> * page_mapping_anon() ... returns anon_vma if a page is anonymous page.
> * page_is_pagecache() ... returns true if a page is page-cache.
> * page_inode() ... returns inode which a page-cache belongs to.
> * is_page_consistent() ... returns true if a page is still valid page cache
>
> Followings are moved
> * page_mapping() ... returns swapper_space or address_space a page is on.
> (from mm.h)
> * page_index() ... returns position of a page in its inode
> (from mm.h)
> * remove_mapping() ... a safe routine to remove page->mapping from page.
> (from swap.h)
I have two other functions that might want integration with this scheme:
page_file_mapping() ... returns backing address space
page_file_index() ... returns the index therein
They are identical to page_mapping_cache() and page_index() for
page cache pages, but they also work on swap cache pages.
That is, for swapcache pages they return:
page_file_mapping:
page_swap_info(page)->swap_file->f_mapping
page_file_index:
swp_offset((swp_offset_t)page_private(page))
When a filesystem uses these functions instead of page->mapping and
page->index, it allows passing swap cache pages into the regular
filesystem read/write paths.
This is useful for things like swap over NFS, where swap is backed by a
swapfile on a 'regular' filesystem.
WARNING: multiple messages have this Message-ID (diff)
From: Peter Zijlstra <peterz@infradead.org>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
"linux-mm@kvack.org" <linux-mm@kvack.org>,
Andrew Morton <akpm@linux-foundation.org>,
"nickpiggin@yahoo.com.au" <nickpiggin@yahoo.com.au>,
ricknu-0@student.ltu.se
Subject: Re: [RFC][PATCH] page->mapping clarification [1/3] base functions
Date: Fri, 21 Sep 2007 13:48:28 +0200 [thread overview]
Message-ID: <20070921134828.45ca967e@twins> (raw)
In-Reply-To: <20070919164308.281f9960.kamezawa.hiroyu@jp.fujitsu.com>
On Wed, 19 Sep 2007 16:43:08 +0900 KAMEZAWA Hiroyuki
<kamezawa.hiroyu@jp.fujitsu.com> wrote:
> A clarification of page <-> fs interface (page cache).
>
> At first, each FS has to access to struct page->mapping directly.
> But it's not just pointer. (we use special 1bit enconding for anon.)
>
> Although there is historical consensus that page->mapping points to its inode's
> address space, I think adding some neat helper functon is not bad.
>
> This patch adds page-cache.h which containes page<->address_space<->inode
> function which is required (used) by subsystems.
>
> Following functions are added
>
> * page_mapping_cache() ... returns address space if a page is page cache
> * page_mapping_anon() ... returns anon_vma if a page is anonymous page.
> * page_is_pagecache() ... returns true if a page is page-cache.
> * page_inode() ... returns inode which a page-cache belongs to.
> * is_page_consistent() ... returns true if a page is still valid page cache
>
> Followings are moved
> * page_mapping() ... returns swapper_space or address_space a page is on.
> (from mm.h)
> * page_index() ... returns position of a page in its inode
> (from mm.h)
> * remove_mapping() ... a safe routine to remove page->mapping from page.
> (from swap.h)
I have two other functions that might want integration with this scheme:
page_file_mapping() ... returns backing address space
page_file_index() ... returns the index therein
They are identical to page_mapping_cache() and page_index() for
page cache pages, but they also work on swap cache pages.
That is, for swapcache pages they return:
page_file_mapping:
page_swap_info(page)->swap_file->f_mapping
page_file_index:
swp_offset((swp_offset_t)page_private(page))
When a filesystem uses these functions instead of page->mapping and
page->index, it allows passing swap cache pages into the regular
filesystem read/write paths.
This is useful for things like swap over NFS, where swap is backed by a
swapfile on a 'regular' filesystem.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2007-09-21 11:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-19 7:43 [RFC][PATCH] page->mapping clarification [1/3] base functions KAMEZAWA Hiroyuki
2007-09-19 7:43 ` KAMEZAWA Hiroyuki
2007-09-19 7:44 ` [RFC][PATCH] page->mapping clarification [2/3] changes in /mm KAMEZAWA Hiroyuki
2007-09-19 7:44 ` KAMEZAWA Hiroyuki
2007-09-19 7:46 ` [RFC][PATCH] page->mapping clarification [3/3] changes in /fs generic KAMEZAWA Hiroyuki
2007-09-19 7:46 ` KAMEZAWA Hiroyuki
2007-09-20 18:26 ` [RFC][PATCH] page->mapping clarification [1/3] base functions Christoph Lameter
2007-09-20 18:26 ` Christoph Lameter
2007-09-21 0:50 ` KAMEZAWA Hiroyuki
2007-09-21 0:50 ` KAMEZAWA Hiroyuki
2007-09-21 17:02 ` Hugh Dickins
2007-09-21 17:02 ` Hugh Dickins
2007-09-21 18:42 ` KAMEZAWA Hiroyuki
2007-09-21 18:42 ` KAMEZAWA Hiroyuki
2007-09-26 19:31 ` Hugh Dickins
2007-09-26 19:31 ` Hugh Dickins
2007-09-26 21:50 ` KAMEZAWA Hiroyuki
2007-09-26 21:50 ` KAMEZAWA Hiroyuki
2007-09-21 11:48 ` Peter Zijlstra [this message]
2007-09-21 11:48 ` Peter Zijlstra
2007-09-21 15:06 ` KAMEZAWA Hiroyuki
2007-09-21 15:06 ` KAMEZAWA Hiroyuki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070921134828.45ca967e@twins \
--to=peterz@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=nickpiggin@yahoo.com.au \
--cc=ricknu-0@student.ltu.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.