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 23862C54798 for ; Thu, 29 Feb 2024 19:53:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A82106B009C; Thu, 29 Feb 2024 14:53:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A31DF6B009E; Thu, 29 Feb 2024 14:53:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8F9EC6B009F; Thu, 29 Feb 2024 14:53:37 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 7D58D6B009C for ; Thu, 29 Feb 2024 14:53:37 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 4BD9AC02A0 for ; Thu, 29 Feb 2024 19:53:37 +0000 (UTC) X-FDA: 81845891274.08.710DAF0 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf23.hostedemail.com (Postfix) with ESMTP id 68618140004 for ; Thu, 29 Feb 2024 19:53:35 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=kZk0KDwg; spf=none (imf23.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709236415; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Bb0wm2nkTd/whNJaK5PnfQ4qYt8CNWiFcGX/Paukpmw=; b=i9n/bkuQjQpY0A4mEbiYi8vIKBSgrbU30EQ1tO9w3Hk5nLQFJ767BMBD/30+tUbOfGv/TK VT9hFfKll2XlIEB03M5wkY126ErNElX4MQ498UuSa6STUebK+6/qJxj+qhhHK4GGPkWloh U45vOquzS1my6WWf3Y8OXX08Ezb7qnw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709236415; a=rsa-sha256; cv=none; b=c7cid6jJGv0rcTRL1jY7Mq8MfOrKGpc/Ue2SertFrf3KGOBT59e5AsTSXJsCa+wndoNC5t yLj1Z5DKu0gm0Q8Vt6hBZ/+OyIoGzhMlDtTTzDGvpQCInqQFkJhux+zfjrStaiAfwnM1oX 0ExojHzOQbKWPMlNFOS2qovQMSupqBA= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=kZk0KDwg; spf=none (imf23.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=Bb0wm2nkTd/whNJaK5PnfQ4qYt8CNWiFcGX/Paukpmw=; b=kZk0KDwgDkN4bmFPAagPUbZC2G sBTzbBpYG7E0r2P/i9p0uGtviBLPYrIcMiftyKU78jeLhFaPGFyMv8zxJrE+Z6YzMT4kj04Un7Zgj h7ITshosnFYQ1n/W8eV2VYO0pVID6ghAUizomEF2pT2sxACIvx+oTbzoIwnaOZgslvwgIIJ4x6pCP IJRnYitWHvGJEx/rWTVdtMWgiKwfrIwksn87VbFzuq/fCjeuGcjImN5eyrceaBjmObYg/u20wuSAL LfbYtxmtm58zHi3o/k6B3DRdOurGOSgw4FimgiB/Z0kum0N5jbn0aFyYxXFZ9VMK+Kwzl42ZusQYy g9Ks4m5A==; Received: from willy by casper.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1rfmTC-00000008t28-06bC; Thu, 29 Feb 2024 19:53:30 +0000 Date: Thu, 29 Feb 2024 19:53:29 +0000 From: Matthew Wilcox To: Tony Battersby 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" Subject: Re: [PATCH] block: Fix page refcounts for unaligned buffers in __bio_release_pages() Message-ID: References: <86e592a9-98d4-4cff-a646-0c0084328356@cybernetics.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <86e592a9-98d4-4cff-a646-0c0084328356@cybernetics.com> X-Rspamd-Queue-Id: 68618140004 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: bpqjzpi6bzhxgx89aky86rsxzb69ukix X-HE-Tag: 1709236415-87846 X-HE-Meta: U2FsdGVkX1/hEyrHDzrXwh7xUzLI74lCfbpg+rFm3Oy0Ro4dCBmXN3A0ZHiWwQ68bO3pwaTuOb46MpEdzhMqb8oToR1SwFjAU6DESsfY8qG1arBF8WqPT8Py7uBf07UXPkoQ7pz/1GXRKsrHL5g7Vtq0vlHLg/nP0kzE5hqyb7eolKV31wR6jYZO32sbm87z8m1EqF9IkJM41ZeaX0E4OdsDa9qTzBn5/zyVHtqdDtJ6RNUBYqWBJvhnRJUcMywNDnqdQVfywtBv4xwtOcSrPB4qut4h5Evi3gjD/CrxpGchgUQiHBl9O++WEoKTpBW6kv5NatqGpL8f4Bsa1skVRdSa6dBNqOqISRs6T6HojaFsi+EGW2AkQNbhKNNAc3TQr9VCwo+qtxAubOvH4ljVJVZPAdn/hO6ZVd3J9UHYVrGrpyXXM1LUBiazWQVBHPpaLs6RCbi+1azUZQnR2+fT0XFCfK6wH8hlOX3XvMHqmVJsSpp5XRcPcVq20qeP79qdGhjnz0l+JwJxG2YvCOcdR8c4wvpTc1ziFDdG6fk+gQdbnFGDIga2h9+TYosWi0AHsZPR36q9yJhAujdMGkDGzbWL8eWMqms4ogqI+pjq41XdjcqUQ6Xy5M/5rzVLY4pnu7UVSj45UC8hamsFwDVBbaEgPyagUjS2ieHQOTqtupqvpuXShaZJBlAYQLBv1Xef/rx/AwkC8of2TqGuk5l9HHwlv/QKYBP7ndkgixct5q6TgcPOWlltAGLgu5BDq+FXwyajXTyGSZqBftzo8HenxENim5k2GSQV8I9dk83aXfKysahO9cHtlKGM0WizXaZewJ38jS7dZH6pyCUlyPd/jT+m8iNhtR7jyfCk/BCSVpFcrfZD/0Rz0mxADRxQ2bdIsFv/aBZOEJNBafNRc+6HOB7mNJFpIYd4z3ImoaRFTOLB9LhffKg4hbPhqsRA3LgdWYAJEndc0KZlVUt3+3/ pdyULPDF V/kDnv8yyUL0sgwSn2AwBw24U92JCvenTuM0GFHrYdGyVCSyrJYTx2gxkcG2ezD5LMpsSO8z9Ps8PySzx3QNgvOSy/rol+jHTsLHrTHsvtdn0y2HJSGZqtthb+m3OxhpGqT9sgRppDAa5S4h59NXdbUzc6hOXbWL78SvC9ONeDz9h3BhUH/VSIfZ4+uUArsD79GuhwG1UmoV0wt2loVzwZjeWcoyJhIeHjOID 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 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)? > @@ -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().