Re: [PATCH v6 2/7] dax: support dirty DAX entries in radix tree

Bob Liu
2015-12-30T08:03:27Z

Hi Ross,

On 12/24/2015 03:39 AM, Ross Zwisler wrote:
> Add support for tracking dirty DAX entries in the struct address_space
> radix tree. This tree is already used for dirty page writeback, and it
> already supports the use of exceptional (non struct page*) entries.
>
> In order to properly track dirty DAX pages we will insert new exceptional
> entries into the radix tree that represent dirty DAX PTE or PMD pages.

I may get it wrong, but there is "struct page" for persistent memory after
"[PATCH v4 00/18]get_user_pages() for dax pte and pmd mappings".
So why not just add "struct page" to radix tree directly just like normal page cache?

Then we don't need to deal with any exceptional entries and special writeback.

Thanks,
Bob

> These exceptional entries will also contain the writeback sectors for the
> PTE or PMD faults that we can use at fsync/msync time.
>
> There are currently two types of exceptional entries (shmem and shadow)
> that can be placed into the radix tree, and this adds a third. We rely on
> the fact that only one type of exceptional entry can be found in a given
> radix tree based on its usage. This happens for free with DAX vs shmem but
> we explicitly prevent shadow entries from being added to radix trees for
> DAX mappings.
>
> The only shadow entries that would be generated for DAX radix trees would
> be to track zero page mappings that were created for holes. These pages
> would receive minimal benefit from having shadow entries, and the choice
> to have only one type of exceptional entry in a given radix tree makes the
> logic simpler both in clear_exceptional_entry() and in the rest of DAX.
>
> Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
> ---
> fs/block_dev.c | 2 +-
> fs/inode.c | 2 +-
> include/linux/dax.h | 5 ++++
> include/linux/fs.h | 3 +-
> include/linux/radix-tree.h | 9 ++++++
> mm/filemap.c | 17 ++++++++----
> mm/truncate.c | 69 ++++++++++++++++++++++++++--------------------
> mm/vmscan.c | 9 +++++-
> mm/workingset.c | 4 +--
> 9 files changed, 78 insertions(+), 42 deletions(-)