lkml.org 
[lkml]   [2022]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH v11 0/8] fsdax: introduce fs query to support reflink
From
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
>


\
 
 \ /
  Last update: 2022-03-10 14:08    [W:0.412 / U:0.376 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site