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 5A724C48BF6 for ; Thu, 29 Feb 2024 20:40:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BB3696B0092; Thu, 29 Feb 2024 15:40:38 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B63FE6B0093; Thu, 29 Feb 2024 15:40:38 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A2B216B0095; Thu, 29 Feb 2024 15:40:38 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 8F7946B0092 for ; Thu, 29 Feb 2024 15:40:38 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 61AC7A0333 for ; Thu, 29 Feb 2024 20:40:38 +0000 (UTC) X-FDA: 81846009756.10.67B36F7 Received: from mail.cybernetics.com (mail.cybernetics.com [72.215.153.18]) by imf15.hostedemail.com (Postfix) with ESMTP id 33090A0016 for ; Thu, 29 Feb 2024 20:40:36 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=cybernetics.com header.s=mail header.b=oND8RtnD; dmarc=pass (policy=none) header.from=cybernetics.com; spf=pass (imf15.hostedemail.com: domain of "btv1==78916a1268e==tonyb@cybernetics.com" designates 72.215.153.18 as permitted sender) smtp.mailfrom="btv1==78916a1268e==tonyb@cybernetics.com" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709239236; 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:dkim-signature; bh=KGdwz7goRECtYGm5sOnk6GBz6zSl4J5s0wT/cSLJdMw=; b=j3d0tIFnuePD7TZYD6PgfobS1I0U8904h8FvZvc7yYr7IaRmDnmCnPr+XQQ3nfYyp6C2PT B8NqNTRKx8BxitsUfsux0KOu5CVh5CQ24S6/c6TK+cKOuyXgP/GoP9IMz0w02H8UcEzPiR BpixNhu9AFzq+70HvLcSp8GE03ljqNY= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=cybernetics.com header.s=mail header.b=oND8RtnD; dmarc=pass (policy=none) header.from=cybernetics.com; spf=pass (imf15.hostedemail.com: domain of "btv1==78916a1268e==tonyb@cybernetics.com" designates 72.215.153.18 as permitted sender) smtp.mailfrom="btv1==78916a1268e==tonyb@cybernetics.com" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709239236; a=rsa-sha256; cv=none; b=MgY0tR/hmPF/Whq6ZIcKXq0ONyyTLaiUF5bfTxRK9tNAVojAnYKW0n0Ky/5dpc26RKOIQu UHyZNI1pxYhZB9VpxVE80936/A/ovSeBdp31c3v7KkKR99cAGuDtkGpzOQRNduV8XhZhpF ObTmq47KbS396hEu1yvecmTnQcdEAmY= X-ASG-Debug-ID: 1709239210-1cf4391a1c513a0001-v9ZeMO Received: from cybernetics.com ([10.10.4.126]) by mail.cybernetics.com with ESMTP id HEvayFu8xC0yrdsC; Thu, 29 Feb 2024 15:40:32 -0500 (EST) X-Barracuda-Envelope-From: tonyb@cybernetics.com X-Barracuda-RBL-Trusted-Forwarder: 10.10.4.126 X-ASG-Whitelist: Client DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=cybernetics.com; s=mail; bh=KGdwz7goRECtYGm5sOnk6GBz6zSl4J5s0wT/cSLJdMw=; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From:References:Cc:To: Content-Language:Subject:MIME-Version:Date:Message-ID; b=oND8RtnDJqAi9sA80RB4 sb4XkMRRCvNMjh6iERzlbrwrBvsjIOrbs14Fav2aVqBlrnTByQSS+hxqeGim5/aVdLcGaeyzzFjAt NXzreOxVb4kMcqOJ2IsQTScZkRwbiu5reQ7c8yHiEMiU44bqKuGSJgsmQLeCuBABcbFTPk8IMY= Received: from [10.157.2.224] (HELO [192.168.200.1]) by cybernetics.com (CommuniGate Pro SMTP 7.1.1) with ESMTPS id 13109217; Thu, 29 Feb 2024 15:40:10 -0500 Message-ID: <2dbe097c-a4b8-4f22-8c39-1bdecbee4581@cybernetics.com> X-Barracuda-RBL-Trusted-Forwarder: 10.157.2.224 Date: Thu, 29 Feb 2024 15:40:09 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] block: Fix page refcounts for unaligned buffers in __bio_release_pages() Content-Language: en-US X-ASG-Orig-Subj: Re: [PATCH] block: Fix page refcounts for unaligned buffers in __bio_release_pages() To: Matthew Wilcox Cc: Jens Axboe , Andrew Morton , "Kirill A . Shutemov" , Hugh Dickins , Hannes Reinecke , Keith Busch , linux-mm , linux-block@vger.kernel.org, linux-fsdevel , "linux-kernel@vger.kernel.org" References: <86e592a9-98d4-4cff-a646-0c0084328356@cybernetics.com> From: Tony Battersby In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: UNKNOWN[10.10.4.126] X-Barracuda-Start-Time: 1709239232 X-Barracuda-URL: https://10.10.4.122:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at cybernetics.com X-Barracuda-Scan-Msg-Size: 1861 X-Barracuda-BRTS-Status: 0 X-Rspamd-Queue-Id: 33090A0016 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: qquzwafy5n18tm4h4hmq164xsg51o7q8 X-HE-Tag: 1709239236-889169 X-HE-Meta: U2FsdGVkX19zOrKdheDUpBIoQxvrqSo8eEiPDUA2V0SOOkCIthuchmKnqHF5F5DbwPfiE0zbs3p/U3W7lDz87aS79pPZgAHlQy6n+MsP/UA5Ih2HfOA4pcG8FO42L8ixopP/fPgy+MZGHkaexOhJ5rCOMgtmwz3F0kl87oLdKyOZ6bdx2VicR/aP2m0ibzcyr/EX5rsKIJdsQ/gDua4EQnhvZKjBlcq4prDu9YmepuaHt/2fUImUj/XTSeLjGW50/hDMelNp6KP+WhVAvTKsqZ1zNPDNTetQ848U6NrRBBHZEJ6Nj7fuST0OBy5meOJuSS5ZL/VxoalQbtMCucLnAVYM7l7hFyfZI+aVZW+gDOFKe8ROvoKZU60pITP9ueHOJu/KcRXQ/oL7SpglPjy9WrA891L0wyh6EcfsPa/NY7xhRSYuS29vC45dKy+HmoYa3eQa87Ti4nCTRBIBcjIOlWdAAORjNrTV+OaoyhabmvwESo0+gln5EUZkhKdL+oFEueCBbCsoqyU6h/8QropYvWnOMVUpkDS0t5PGIkuEHs9iZGSj0nMoCPLlIcEC7o0rHwE9j4/3VwFRT22HujOsmcrDCZR8wTe8FZsUCJvGSY7xKOQy5maCFdM1bPxAGJV1F9KRxqieOOo2TK+sPAKDMqN7raQeoo5QZRciGUpn9vDxaz9skbWzmIF5bagpG6LxvaW3+8hxRNwkXQq5S1aKbCcyF1X5SPtBs++qY3xpQaW3ThaBJ8lQZI5CJb70KbFyGtw+mWrR1kf9pXwYA9qA8YjgQ/oZ0SHQK9xRNUQyzj7me0W3bNvjHl4c51ezkGUGdEtjR//qfgp6U89S39kzlPwaKVYAfo/4lAS8PzyDnmDYqBSPJViIDAwYDKRqS6DUZoQdHligVBu6pzuTXc7Lxkrj5OWKBCwbeg11mGblUPLnH584BAWj4KHMnY+QHdLUNOw3PXzOlHP7kRjIdsf 1BHxXWz9 PO+SByrbdg94baEHenp9kKsgRUTlwOKCE1ciBZJB2Ul10cibTKdmqMIIGjXPIq47Hmzl7bJLok10XQNrKK39nwrZAEqPi3FYbEd2efhsDz89PaqgYheKx7O5i2EMMoa9/iCmow8kfP3NVUjBqYj1MdeJFCxp9X+1sguJWWJo+BlnJx9EbqjAJHKU6vBJbtlM5l+Eh0iEtYW3wHsY1Y0E1GtjUAT7rXinhPSpe 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: List-Subscribe: List-Unsubscribe: On 2/29/24 14:53, Matthew Wilcox wrote: > On Thu, Feb 29, 2024 at 01:08:09PM -0500, Tony Battersby wrote: >> Fix an incorrect number of pages being released for buffers that do not >> start at the beginning of a page. > Oh, I see what I did. Wouldn't a simpler fix be to just set "done" to > offset_in_page(fi.offset)? Actually it would be: ssize_t done = -offset_in_page(offset); But then you have signed vs. unsigned comparison in the while(), or you could rearrange the loop to avoid the negative, but then it gets clunky. > >> @@ -1152,7 +1152,7 @@ void __bio_release_pages(struct bio *bio, bool mark_dirty) >> >> bio_for_each_folio_all(fi, bio) { >> struct page *page; >> - size_t done = 0; >> + size_t nr_pages; >> >> if (mark_dirty) { >> folio_lock(fi.folio); >> @@ -1160,10 +1160,11 @@ void __bio_release_pages(struct bio *bio, bool mark_dirty) >> folio_unlock(fi.folio); >> } >> page = folio_page(fi.folio, fi.offset / PAGE_SIZE); >> + nr_pages = (fi.offset + fi.length - 1) / PAGE_SIZE - >> + fi.offset / PAGE_SIZE + 1; >> do { >> bio_release_page(bio, page++); >> - done += PAGE_SIZE; >> - } while (done < fi.length); >> + } while (--nr_pages != 0); >> } >> } >> EXPORT_SYMBOL_GPL(__bio_release_pages); > The long-term path here, I think, is to replace this bio_release_page() > with a bio_release_folio(folio, offset, length) which calls into > a new unpin_user_folio(folio, nr) which calls gup_put_folio(). I developed the patch with the 6.1 stable series, which just has: nr_pages = (fi.offset + fi.length - 1) / PAGE_SIZE - fi.offset / PAGE_SIZE + 1; folio_put_refs(fi.folio, nr_pages); Which is another reason that I went for the direct nr_pages calculation.  Would you still prefer the negative offset_in_page() approach? Tony