[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87ff591c-ac1c-4460-fc6a-ba2b86714472@fujitsu.com>
Date: Thu, 10 Mar 2022 21:08:08 +0800
From: Shiyang Ruan <ruansy.fnst@...itsu.com>
To: <linux-kernel@...r.kernel.org>, <linux-xfs@...r.kernel.org>,
<nvdimm@...ts.linux.dev>, <linux-mm@...ck.org>,
<linux-fsdevel@...r.kernel.org>
CC: <djwong@...nel.org>, <dan.j.williams@...el.com>,
<david@...morbit.com>, <hch@...radead.org>, <jane.chu@...cle.com>
Subject: Re: [PATCH v11 0/8] fsdax: introduce fs query to support reflink
ping ;)
在 2022/2/27 20:07, Shiyang Ruan 写道:
> This patchset is aimed to support shared pages tracking for fsdax.
>
> Changes since V10:
> - Use cmpxchg() to prevent concurrent registration/unregistration
> - Use phys_addr_t for ->memory_failure()
> - Add dax_entry_lock() for dax_lock_mapping_entry()
> - Fix offset and length calculation at the boundary of a filesystem
>
> This patchset moves owner tracking from dax_assocaite_entry() to pmem
> device driver, by introducing an interface ->memory_failure() for struct
> pagemap. This interface is called by memory_failure() in mm, and
> implemented by pmem device.
>
> Then call holder operations to find the filesystem which the corrupted
> data located in, and call filesystem handler to track files or metadata
> associated with this page.
>
> Finally we are able to try to fix the corrupted data in filesystem and
> do other necessary processing, such as killing processes who are using
> the files affected.
>
> The call trace is like this:
> memory_failure()
> |* fsdax case
> |------------
> |pgmap->ops->memory_failure() => pmem_pgmap_memory_failure()
> | dax_holder_notify_failure() =>
> | dax_device->holder_ops->notify_failure() =>
> | - xfs_dax_notify_failure()
> | |* xfs_dax_notify_failure()
> | |--------------------------
> | | xfs_rmap_query_range()
> | | xfs_dax_failure_fn()
> | | * corrupted on metadata
> | | try to recover data, call xfs_force_shutdown()
> | | * corrupted on file data
> | | try to recover data, call mf_dax_kill_procs()
> |* normal case
> |-------------
> |mf_generic_kill_procs()
>
> ==
> Shiyang Ruan (8):
> dax: Introduce holder for dax_device
> mm: factor helpers for memory_failure_dev_pagemap
> pagemap,pmem: Introduce ->memory_failure()
> fsdax: Introduce dax_lock_mapping_entry()
> mm: move pgoff_address() to vma_pgoff_address()
> mm: Introduce mf_dax_kill_procs() for fsdax case
> xfs: Implement ->notify_failure() for XFS
> fsdax: set a CoW flag when associate reflink mappings
>
> drivers/dax/super.c | 89 +++++++++++++
> drivers/nvdimm/pmem.c | 16 +++
> fs/dax.c | 140 ++++++++++++++++++---
> fs/xfs/Makefile | 1 +
> fs/xfs/xfs_buf.c | 12 ++
> fs/xfs/xfs_fsops.c | 3 +
> fs/xfs/xfs_mount.h | 1 +
> fs/xfs/xfs_notify_failure.c | 235 +++++++++++++++++++++++++++++++++++
> fs/xfs/xfs_notify_failure.h | 10 ++
> fs/xfs/xfs_super.c | 6 +
> include/linux/dax.h | 47 +++++++
> include/linux/memremap.h | 12 ++
> include/linux/mm.h | 17 +++
> include/linux/page-flags.h | 6 +
> mm/memory-failure.c | 240 ++++++++++++++++++++++++++----------
> 15 files changed, 747 insertions(+), 88 deletions(-)
> create mode 100644 fs/xfs/xfs_notify_failure.c
> create mode 100644 fs/xfs/xfs_notify_failure.h
>
Powered by blists - more mailing lists