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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 168D5EB64DD for ; Tue, 18 Jul 2023 12:58:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AF8006B007B; Tue, 18 Jul 2023 08:58:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AA86F8D0001; Tue, 18 Jul 2023 08:58:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 998576B007E; Tue, 18 Jul 2023 08:58:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 88AE26B007B for ; Tue, 18 Jul 2023 08:58:31 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 202BFA0170 for ; Tue, 18 Jul 2023 12:58:31 +0000 (UTC) X-FDA: 81024736422.19.FFCE619 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by imf09.hostedemail.com (Postfix) with ESMTP id 73EDB140023 for ; Tue, 18 Jul 2023 12:58:28 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf09.hostedemail.com: domain of zhangpeng362@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=zhangpeng362@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689685109; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6PcT4vwslP7TDDH3uIbNdp5A4wz3L+4kPS/ONyudqYw=; b=42sLByZWwsy/j5dpd2DZCEB/k82f8unxdmOOSJRm/CAAlHdTZhxw5FCrJj3KRENgrz1yJR GrgKs9AtfvxBgqx01MsX9f/IepfUgczwiHVGIF8eewom95HZvcYCwp2AwRCpnXm7QQQ4cj 4KZ/rJKg09WgSydsif0WDEQcXvU8Tpw= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf09.hostedemail.com: domain of zhangpeng362@huawei.com designates 45.249.212.255 as permitted sender) smtp.mailfrom=zhangpeng362@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689685109; a=rsa-sha256; cv=none; b=8qFJK8G6Or+SgCLmY9UNU3IxAMPdXUZrbZS5gM/Fa+JR80A8+tWML9XBWOUqlFPjCXk6ez 5inZG5qN7ZoWarr5FXQ97ycDeExhWKChgIXEN4dQLVWneCt0FVq8+kbhi/V44aRE3IcIDN 4L3lb5erkCoWV0HgcvcWOIVXNMBmX5A= Received: from kwepemm600020.china.huawei.com (unknown [172.30.72.55]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4R4zWN615Cz18LjY; Tue, 18 Jul 2023 20:57:36 +0800 (CST) Received: from [10.174.179.160] (10.174.179.160) by kwepemm600020.china.huawei.com (7.193.23.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 18 Jul 2023 20:58:18 +0800 Message-ID: <48a73879-6d25-4350-a8cb-8cee58878b1c@huawei.com> Date: Tue, 18 Jul 2023 20:58:17 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Subject: Re: [PATCH 2/6] mm/page_io: use a folio in sio_read_complete() Content-Language: en-US To: Matthew Wilcox CC: , , , , , , Kent Overstreet References: <20230717132602.2202147-1-zhangpeng362@huawei.com> <20230717132602.2202147-3-zhangpeng362@huawei.com> From: "zhangpeng (AS)" In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.179.160] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemm600020.china.huawei.com (7.193.23.147) X-CFilter-Loop: Reflected X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 73EDB140023 X-Stat-Signature: jjdkm3x54xmgogb18njabc161jofht75 X-Rspam-User: X-HE-Tag: 1689685108-92466 X-HE-Meta: U2FsdGVkX1+EnKbp7BcxXeHjD2YMVlrOQE5fwYFIAKCVlWozCTGCbG+A6YSF3YNTaPo1jHilPaMEMUybckMmjxI+nuD2fcWui5QLezHPjdeF6On9rE8EE0E7saNgEHQ06EnIiZUzgYPEGtlnIStb2IYkiAkP9Ze+cZoDP+vOYZKBncbcTngwDgtIaM0bjdM7Z+R5/1RGAY7Aww1AlgVLsfdHJQxzR0GvgT1Cu18/BRBO2upodwglCJxJ/B3HzalPShuo3Xv08Nu6zkpcunw5kkwZksMB2xqzfmMw9bGeCeleh7bwl/02VaYM6JeLPX2At5rZOhMK4oy/azhafXZNQIYWkOGml/JkjfsTDiXRGq7g+3LzVgGN1zWXVsJZApPHW4vwlJ6C0PZ1EZuVylAymidwBn/nVwMn20IWBGnabiJesFFJGu3eR2tQXVKxall/VT+Oqtc8FYjjyqpN7mG5HtVICHnvKtbSAwOeMOkbzSbmkAbi5nmKyrJi/mvdTahH0o8aPC8VLPs5jdraCZTbZr5pHwcPU5ijZr98S8HHYxH+m074G/ylhRIFSiYwr3U4wRXoO5X2XQmo+Vi2rE5FBh4xJ2RblEXQ3NrrIiBPYArebzT9FGC+7dCib42eLjQlGwsgzcMR4AF/cC8gztmhlkqnFJLJ0Nt1VWakYXz63pMX/yndeqAiv1Xp/l3hwoKYCM+0/W3Cd31Qa2lDsgPcEG7FRJOn4PmuTto+mAEhwijQhshgyoaC7kIk/FDDx6MwK1sBa6rN/Od+szPtzYvx8wHhxVYYZAk0Ew+7SQWIXfG/oWOisu13sARgjo23gnZINfaINAJfJkeiJkMfBoPTA+cBGq9AFsOvK9VReYNUDF6iuWPJFymD/mqIu+Omflm3N17D71PjR+JZ32yFRDNBTkgbKkXvmc4wANIMIzW6ZV40jxI35jTysTpn/T++GEFDBfDynX6oWIeFLEVx7hq dl+aaTkz zUoMkNAz5nYcevLHdhpd2ItED4zTypu9eVN3Qp2bW/PeNyFccAoBUHAj5+zwFsemXSXq18by7xxfWQwoaUmQEK9aRe2S+NvMUZV5EBmp2nHK8pHlorf3t9hdtCUi8H3d37Wl7ZpmFSePuJfBWtqPhaQVcAggJCu4BB7l87YILU5fGcicbu2swoIbBThCjdifuxWzyiBRQJVEDasRek2QHXGkyu2lZZsG/s01Ig2lLiUCa2zXl70SyCmHITQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 2023/7/17 21:40, Matthew Wilcox wrote: > On Mon, Jul 17, 2023 at 09:25:58PM +0800, Peng Zhang wrote: >> +++ b/mm/page_io.c >> @@ -406,19 +406,19 @@ static void sio_read_complete(struct kiocb *iocb, long ret) >> >> if (ret == sio->len) { >> for (p = 0; p < sio->pages; p++) { >> - struct page *page = sio->bvec[p].bv_page; >> + struct folio *folio = page_folio(sio->bvec[p].bv_page); >> >> - SetPageUptodate(page); >> - unlock_page(page); >> + folio_mark_uptodate(folio); >> + folio_unlock(folio); >> } > I'm kind of shocked this works today. Usually bvecs coalesce adjacent > pages into a single entry, so you need to use a real iterator like > bio_for_each_folio_all() to extract individual pages from a bvec. > Maybe the sio bvec is constructed inefficiently. > > I think Kent had some bvec folio iterators in progress? I'll convert bio_first_page_all() to bio_first_folio_all() in a v2. >> count_vm_events(PSWPIN, sio->pages); >> } else { >> for (p = 0; p < sio->pages; p++) { >> - struct page *page = sio->bvec[p].bv_page; >> + struct folio *folio = page_folio(sio->bvec[p].bv_page); >> >> - SetPageError(page); >> - ClearPageUptodate(page); >> - unlock_page(page); >> + folio_set_error(folio); >> + folio_clear_uptodate(folio); >> + folio_unlock(folio); > Similar questions to the last patch -- who checks the error flag on this > page/folio, and isn't the folio already !uptodate? Yes, the folio is already !uptodate. I'll drop this line. Maybe wait_dev_supers() in fs/btrfs/disk-io.c checks the PageError()? >> } >> pr_alert_ratelimited("Read-error on swap-device\n"); >> } >> -- >> 2.25.1 >> > -- Best Regards, Peng