Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3910486pxb; Mon, 8 Feb 2021 03:20:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJyCjBxuPEl/+dB/JFBuQeNzxOFf/zSzDnhG3D8iKzGhW/5DBIAi4qgkMunMOhXUP4I279GI X-Received: by 2002:a17:906:1241:: with SMTP id u1mr16532037eja.196.1612783224406; Mon, 08 Feb 2021 03:20:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612783224; cv=none; d=google.com; s=arc-20160816; b=Ir1cYXCXrSsiHTiL6ZKSKNCZLA8c/WDsUYC24SNewwi3P4P4Zhb68JtgJ/fnCFw1zb k4zj4OJHcDx6dhgJNBeubwwDhbFTtliT9qD3C1gbsCTaqCC5FkC8Ral5d8AhR1YQMITV VCQvjr5X6MssFP6ynyD2sPPw5Fq/DiV8g3jk0EEj8Nxerz/9o6W7FSy3qvU7anFQBWdO ITDxCZzEl21hBMolmPjdIIiYQ+qp87bHORadZetgVpQlq9H9FvGgyzXQF2UHJ2JtuhTI gdZ32zu30RWDW6R0DoPo/72jhOr1QzHpdgPQCJa0zSJI2WsT5jxxkTwZ/mDLigc1mOVd GE8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=mkG0jnydAXguwV69B6bl+Z84f7p19cdZQqqg6Ton/xY=; b=FD/tWLGC61+aVwkE7+acfVDP6hN8by9V/MNpzqqSzrsa1/dWsJgQ8MKinYzTO37RfG flt1865Gg1Ew6BJKjlTHeMvEY3R1QuCck38+WUTq8gfz0H0HOrAZVcHnrNWEpPK1wzl7 k91Aa8i1HFVY4ssBmefg/ZvSmWaGyST9ZxiWLqlPyR7Ybv8BUpg2JM9+62glPwEVemfG Hq0xOtr+eGm0/Kb5r1ewvtkBeGOdowP/8aA4z0ZSRt5Ig/SX0Wm7I3L19cdukWTsCcFY 80+CMP9X2AgfVJieyp31FPmjt+CzPDH5nUMNbjjklrrnylAiiKI+/ZuP/+7MbBGvPoac AfMw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i17si4552131ejg.646.2021.02.08.03.20.01; Mon, 08 Feb 2021 03:20:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232876AbhBHLQJ (ORCPT + 99 others); Mon, 8 Feb 2021 06:16:09 -0500 Received: from mail.cn.fujitsu.com ([183.91.158.132]:54426 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232973AbhBHLD3 (ORCPT ); Mon, 8 Feb 2021 06:03:29 -0500 X-IronPort-AV: E=Sophos;i="5.81,161,1610380800"; d="scan'208";a="104328056" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 08 Feb 2021 18:55:34 +0800 Received: from G08CNEXMBPEKD06.g08.fujitsu.local (unknown [10.167.33.206]) by cn.fujitsu.com (Postfix) with ESMTP id 869654CE6F7F; Mon, 8 Feb 2021 18:55:32 +0800 (CST) Received: from G08CNEXCHPEKD04.g08.fujitsu.local (10.167.33.200) by G08CNEXMBPEKD06.g08.fujitsu.local (10.167.33.206) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 8 Feb 2021 18:55:33 +0800 Received: from irides.mr.mr.mr (10.167.225.141) by G08CNEXCHPEKD04.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 8 Feb 2021 18:55:34 +0800 From: Shiyang Ruan To: , , , , , CC: , , , , , , , , Subject: [PATCH v3 00/11] fsdax: introduce fs query to support reflink Date: Mon, 8 Feb 2021 18:55:19 +0800 Message-ID: <20210208105530.3072869-1-ruansy.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.30.0 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-yoursite-MailScanner-ID: 869654CE6F7F.ACD1D X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: ruansy.fnst@cn.fujitsu.com X-Spam-Status: No Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patchset is aimed to support shared pages tracking for fsdax. Change from V2: - Split 8th patch into other related to make it easy to review - Other small fixes Change from V1: - Add the old memory-failure handler back for rolling back - Add callback in MD's ->rmap() to support multiple mapping of dm device - Add judgement for CONFIG_SYSFS - Add pfn_valid() judgement in hwpoison_filter() - Rebased to v5.11-rc5 This patchset moves owner tracking from dax_assocaite_entry() to pmem device driver, by introducing an interface ->memory_failure() of struct pagemap. This interface is called by memory_failure() in mm, and implemented by pmem device. Then pmem device calls its ->corrupted_range() to find the filesystem which the corrupted data located in, and call filesystem handler to track files or metadata assocaited 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() pgmap->ops->memory_failure() => pmem_pgmap_memory_failure() gendisk->fops->corrupted_range() => - pmem_corrupted_range() - md_blk_corrupted_range() sb->s_ops->currupted_range() => xfs_fs_corrupted_range() xfs_rmap_query_range() xfs_currupt_helper() * corrupted on metadata try to recover data, call xfs_force_shutdown() * corrupted on file data try to recover data, call mf_dax_mapping_kill_procs() The fsdax & reflink support for XFS is not contained in this patchset. (Rebased on v5.11-rc5) == Shiyang Ruan (11): pagemap: Introduce ->memory_failure() blk: Introduce ->corrupted_range() for block device fs: Introduce ->corrupted_range() for superblock block_dev: Introduce bd_corrupted_range() mm, fsdax: Refactor memory-failure handler for dax mapping mm, pmem: Implement ->memory_failure() in pmem driver pmem: Implement ->corrupted_range() for pmem driver dm: Introduce ->rmap() to find bdev offset md: Implement ->corrupted_range() xfs: Implement ->corrupted_range() for XFS fs/dax: Remove useless functions block/genhd.c | 6 ++ drivers/md/dm-linear.c | 20 ++++ drivers/md/dm.c | 61 +++++++++++ drivers/nvdimm/pmem.c | 45 ++++++++ fs/block_dev.c | 47 ++++++++- fs/dax.c | 63 ++++------- fs/xfs/xfs_fsops.c | 5 + fs/xfs/xfs_mount.h | 1 + fs/xfs/xfs_super.c | 112 ++++++++++++++++++++ include/linux/blkdev.h | 2 + include/linux/dax.h | 1 + include/linux/device-mapper.h | 5 + include/linux/fs.h | 2 + include/linux/genhd.h | 3 + include/linux/memremap.h | 8 ++ include/linux/mm.h | 9 ++ mm/memory-failure.c | 190 +++++++++++++++++++++++----------- 17 files changed, 475 insertions(+), 105 deletions(-) -- 2.30.0