Message ID | 20220227120747.711169-1-ruansy.fnst@fujitsu.com (mailing list archive) |
---|---|
Headers | show |
Series | fsdax: introduce fs query to support reflink | expand |
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 >