Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3755273pxk; Tue, 29 Sep 2020 05:36:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz4vcMe9p0YkRc49OXp4FnUoHFfv2ccl3Zm3MhBqHcWtlmaw46/Q4SrEgRWaMFd2tGaVkUR X-Received: by 2002:aa7:d382:: with SMTP id x2mr3038112edq.108.1601382964928; Tue, 29 Sep 2020 05:36:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601382964; cv=none; d=google.com; s=arc-20160816; b=P8ieaqYglQJQ4HR6/BJW23eHhAspnk7/d6lH/qFbltvK9UEgkwjJ3/Zp2bJ9bwjAnu Mqqa6e7B8GlFPUvdQ8ERGSvhYea8QnODLqr7naL6NM4H2pj/2SOa6I7u8mCm6Vd2nWZr w+YypahvT6Vw+nvrao2QY3QFD5QuN6qujE2c8qe7fMCXxgRz3e1J4cgzFRmt8tJGvtPN hdzYVIW8PYdIpzjvVEdPtJAhNjmQA1lWPaDPsXEnMBdIWnCR5KNFsa4/kbcftQuph/KM 2fWHTMU1dbcIVztLFYlxAsCE8Bn/URfIA60eaHCYm8y5/djf7ugF1l8w7eLccRfwAa+b pmng== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=qGTfxG44xfCQIX9w2SsfJtf5v4kl6OPjSAD8JEwwWj4=; b=yU459uExa88MIcyDOV42b8yY4H6Z9PtCbajc5snNyQddBrojL08pKwsLHBYtkqv1a6 ggtNWLGCkzck/WG8I53PI31cmpVh4WcfrpftkGoE+urXfM7BJ897f59TJHRy5BSJkLh/ 25xLrHgNx+idmUPCTw8hOTy+m58LTG0cH/ecKpOeA0fVNmtQEipHR2dw97BjdaFZWt1G b+OaJvHZSm3outxXWNbk/qxGvnoLeBuGo6oYvL0CmPulw30HywywNqsGxCCX8keoHPea IhEgmiPPycIssa0c1mDwM3c6xU5MmgRsFjLIZyvOP9C7QRPh8RtglVu94X/L7Zmb92kI WPBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qDYkYcc7; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c26si108382eds.320.2020.09.29.05.35.41; Tue, 29 Sep 2020 05:36:04 -0700 (PDT) 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; dkim=pass header.i=@kernel.org header.s=default header.b=qDYkYcc7; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732854AbgI2Md0 (ORCPT + 99 others); Tue, 29 Sep 2020 08:33:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:37658 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728541AbgI2LW5 (ORCPT ); Tue, 29 Sep 2020 07:22:57 -0400 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 91A1D23A5A; Tue, 29 Sep 2020 11:19:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1601378385; bh=5ySCVgnlDc/QxpYoxYTd38GQ4JgjHnOYATlmx/HZ/Vw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qDYkYcc7+bZISkv2HocvfIO301nkxGK5eVBFJFUJCmsHc6vfMOXJHDUnZXdwtgK8w ZoVNvuhuOg8EErSWJzwdR1jCxe/qmFSN+6YMuDDEa9n8Uve/zqhVso4hjTJ+/fgq8B bniIlXC7vQSYOQ5IXCWTR8zU4DnWPtpPm21q6CVE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Gao Xiang , Andrew Morton , "Huang, Ying" , Yang Shi , Rafael Aquini , Matthew Wilcox , Carlos Maiolino , Eric Sandeen , Dave Chinner , Linus Torvalds Subject: [PATCH 4.14 162/166] mm, THP, swap: fix allocating cluster for swapfile by mistake Date: Tue, 29 Sep 2020 13:01:14 +0200 Message-Id: <20200929105943.282129611@linuxfoundation.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200929105935.184737111@linuxfoundation.org> References: <20200929105935.184737111@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Gao Xiang commit 41663430588c737dd735bad5a0d1ba325dcabd59 upstream. SWP_FS is used to make swap_{read,write}page() go through the filesystem, and it's only used for swap files over NFS. So, !SWP_FS means non NFS for now, it could be either file backed or device backed. Something similar goes with legacy SWP_FILE. So in order to achieve the goal of the original patch, SWP_BLKDEV should be used instead. FS corruption can be observed with SSD device + XFS + fragmented swapfile due to CONFIG_THP_SWAP=y. I reproduced the issue with the following details: Environment: QEMU + upstream kernel + buildroot + NVMe (2 GB) Kernel config: CONFIG_BLK_DEV_NVME=y CONFIG_THP_SWAP=y Some reproducible steps: mkfs.xfs -f /dev/nvme0n1 mkdir /tmp/mnt mount /dev/nvme0n1 /tmp/mnt bs="32k" sz="1024m" # doesn't matter too much, I also tried 16m xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw xfs_io -f -c "pwrite -F -S 0 -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fsync" /tmp/mnt/sw mkswap /tmp/mnt/sw swapon /tmp/mnt/sw stress --vm 2 --vm-bytes 600M # doesn't matter too much as well Symptoms: - FS corruption (e.g. checksum failure) - memory corruption at: 0xd2808010 - segfault Fixes: f0eea189e8e9 ("mm, THP, swap: Don't allocate huge cluster for file backed swap device") Fixes: 38d8b4e6bdc8 ("mm, THP, swap: delay splitting THP during swap out") Signed-off-by: Gao Xiang Signed-off-by: Andrew Morton Reviewed-by: "Huang, Ying" Reviewed-by: Yang Shi Acked-by: Rafael Aquini Cc: Matthew Wilcox Cc: Carlos Maiolino Cc: Eric Sandeen Cc: Dave Chinner Cc: Link: https://lkml.kernel.org/r/20200820045323.7809-1-hsiangkao@redhat.com Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/swapfile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -973,7 +973,7 @@ start_over: goto nextsi; } if (cluster) { - if (!(si->flags & SWP_FILE)) + if (si->flags & SWP_BLKDEV) n_ret = swap_alloc_cluster(si, swp_entries); } else n_ret = scan_swap_map_slots(si, SWAP_HAS_CACHE,