From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: ** X-Spam-Status: No, score=2.2 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,HTML_MESSAGE,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E267CA90AF for ; Wed, 13 May 2020 08:28:37 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id BE394206CC for ; Wed, 13 May 2020 08:28:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=konsulko.com header.i=@konsulko.com header.b="bVE+YOY+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BE394206CC Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=konsulko.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 5FD88900111; Wed, 13 May 2020 04:28:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5AE159000F3; Wed, 13 May 2020 04:28:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4C399900111; Wed, 13 May 2020 04:28:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0223.hostedemail.com [216.40.44.223]) by kanga.kvack.org (Postfix) with ESMTP id 340339000F3 for ; Wed, 13 May 2020 04:28:36 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id E1EF2180AD807 for ; Wed, 13 May 2020 08:28:35 +0000 (UTC) X-FDA: 76811019390.26.gold46_4b07c2560ba5d X-HE-Tag: gold46_4b07c2560ba5d X-Filterd-Recvd-Size: 6256 Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) by imf19.hostedemail.com (Postfix) with ESMTP for ; Wed, 13 May 2020 08:28:35 +0000 (UTC) Received: by mail-lj1-f169.google.com with SMTP id b6so1133640ljj.1 for ; Wed, 13 May 2020 01:28:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=konsulko.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=N/7msHib9dtOpdvcAlDRW5TBIp5311lu7OFNIB96ySM=; b=bVE+YOY+F7dlCCpr0OHGOxAEqF1jU/y8EvUWDpV43s4sME8ICWD9B4qK/hwfow318j pCMUlcC+39aQqOcdlC1W43ad8KNmB8Gj4IfEwI+JPP9UQpTQY1dNiWTef0ONmg1GbJu2 nzMFD0aQEkvTs7/J3vhq75afc4E8gFdeb2PPQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=N/7msHib9dtOpdvcAlDRW5TBIp5311lu7OFNIB96ySM=; b=Iy5iRgYWefhNcvoRiZtI7TLOkPPUk5uiBUnn0MGUz8gUD0VKoKk3xGHw274eWcQ9kL U1zVHshxQao9yZApXc9SyhjgHewrGTfn/moDKCsBueVCE2s7bSXLuRe/9u+BXNQzKp8/ 62WcW1CllTzfYqALOVIOBX2/mF/pqzg+3Uf09R8NVz56xl8YDi1ol0wv+FzUcFTahwsV nzJkZKblyRcqYE9s60Q07hpuHIK3AWYfO1D7Ir9lXGJIMIk8oPGDwVA0y2Vba9Mw0sLN N5UDaafJt8zbuTFUeNgcOBfhKCLCptf4j9VVQmFm3j0YmFNr40/XI5lgyLS0m0cC/tpz DkNQ== X-Gm-Message-State: AOAM531mrPec0j/BDcUPxclHKfed8A3Ibfzi2f+SKiPbIvcbSjMuBNEO z0SPYanFB1KACYAWuOFa2aPdTvnP2vmCq+OBCmdAxw== X-Google-Smtp-Source: ABdhPJzLk6S1kroRtdEUYl3SXMdOJJ1BOgSUqyALGX2dm9VxYPW3uyxm5fbv4C4taCjZD8JrWaNm+yhLTorFhjGb0YQ= X-Received: by 2002:a2e:9a54:: with SMTP id k20mr17440702ljj.265.1589358513904; Wed, 13 May 2020 01:28:33 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Vitaly Wool Date: Wed, 13 May 2020 10:28:23 +0200 Message-ID: Subject: Re: zswap z3fold + memory offline = infinite loop To: Qian Cai Cc: Michal Hocko , David Hildenbrand , Linux-MM , LKML , Minchan Kim , Seth Jennings , Dan Streetman Content-Type: multipart/alternative; boundary="000000000000a473d705a5835d70" X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: --000000000000a473d705a5835d70 Content-Type: text/plain; charset="UTF-8" On Wed, May 13, 2020, 2:36 AM Qian Cai wrote: > Put zswap z3fold pages into the memory and then offline those memory would > trigger an infinite loop here in > > __offline_pages() --> do_migrate_range() because there is no error > handling, > > if (pfn) { > /* > * TODO: fatal migration failures should > bail > * out > */ > do_migrate_range(pfn, end_pfn); > > There, isolate_movable_page() will always return -EBUSY because, > > if (!mapping->a_ops->isolate_page(page, mode)) > goto out_no_isolated; > > i.e., z3fold_page_isolate() will always return false because, > > zhdr->mapped_count == 2 > So who mapped these pages? The whole zswap operation presumes that objects are mapped for a short while to run some I/O and so, most of the time zhdr->mapped_count would be 0. Removing that check in ->isolate() is not a big deal, but ->migratepage() shall not allow actual migration anyway if there are mapped objects. ~Vitaly --000000000000a473d705a5835d70 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Wed, May 13, 2020, 2:36 AM Qian Cai <cai@lca.pw> wrote:
Put zswap z3fold pages into the memory and then offline those mem= ory would trigger an infinite loop here in

__offline_pages() --> do_migrate_range() because there is no error handl= ing,

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 if (pfn) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /*
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* TODO: fatal migration failur= es should bail
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* out
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0*/
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 do_migrate_range(pfn, end_pfn);

There, isolate_movable_page() will always return -EBUSY=C2=A0 because,

=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (!mapping->a_ops->isolate_page(page, m= ode))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 goto out_no_isolate= d;

i.e., z3fold_page_isolate() will always return false because,

zhdr->mapped_count =3D=3D 2

So who mapped these pages? The whole zswap op= eration presumes that objects are mapped for a short while to run some I/O = and so, most of the time zhdr->mapped_count would be 0.

Removing that check in ->isolate() is= not a big deal, but ->migratepage() shall not allow actual migration an= yway if there are mapped objects.=C2=A0

~Vitaly
--000000000000a473d705a5835d70--