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 1FF49C369B9 for ; Wed, 16 Apr 2025 09:32:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 022BE6B007B; Wed, 16 Apr 2025 05:32:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F13A46B0082; Wed, 16 Apr 2025 05:32:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB3396B0083; Wed, 16 Apr 2025 05:32:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id BB2BF6B007B for ; Wed, 16 Apr 2025 05:32:21 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id DE05FB8D31 for ; Wed, 16 Apr 2025 09:32:22 +0000 (UTC) X-FDA: 83339391324.25.085C35F Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by imf01.hostedemail.com (Postfix) with ESMTP id 7630740011 for ; Wed, 16 Apr 2025 09:32:20 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=oUXWjlXL; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=jNe31UL4; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=oUXWjlXL; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=jNe31UL4; dmarc=none; spf=pass (imf01.hostedemail.com: domain of jack@suse.cz designates 195.135.223.131 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744795940; 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=JvkHSS10XyBBZCdUukT1q/ieEy5kYIGILjTVfduyCTk=; b=MoJUiSmJscAZnWzoH0L694oL6hGKzYTAQIjUsCX+Ikt8gQS33gJDaDe8MWHz8HUXXcgn2L HKQEw8QNjTGOTKlnGZtRP6XfR9JB1Ka3E9z0E6yX9Ud4c0V47e6ZbP5gIFWLI5uGBlpKlE h6WqoItimk/Lx4YGoojNapF+DP3td6c= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=oUXWjlXL; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=jNe31UL4; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=oUXWjlXL; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=jNe31UL4; dmarc=none; spf=pass (imf01.hostedemail.com: domain of jack@suse.cz designates 195.135.223.131 as permitted sender) smtp.mailfrom=jack@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744795940; a=rsa-sha256; cv=none; b=25VDEmPicMVGT5xSsrAspB6c1OyfulsG3MFskfide61cx55y1NFTLoAUl40Q0RHTG1gGQI lR/rGOXd8ZAndPpqJjfRNkonezgi4oSITV4X22PwsUf5m8luJYMJR9/Kw4AexTZJvcNSNC 7W+6P/dVMua0G6zMBR2Wvszc4qfsYlE= Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 93CD81F445; Wed, 16 Apr 2025 09:32:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1744795938; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=JvkHSS10XyBBZCdUukT1q/ieEy5kYIGILjTVfduyCTk=; b=oUXWjlXLYVGZSFMsqHZ9wlMH4Kn9ydpyqcPpriJ38vdHjmOVeNQgLovGs6RG74pRz/H+4L zO7JDhEASgkJGsJJatflFU2T/W9D3QJRAPQyiapwXefBIasOR184jwbhBqT2D0Vf9wXzmi U8kTT0AuN8XZFLJrzmO695/ziqEz1ng= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1744795938; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=JvkHSS10XyBBZCdUukT1q/ieEy5kYIGILjTVfduyCTk=; b=jNe31UL45R4T7Jgejf3AIQXlqtTHrnU9FhpJdRhsNcAySb9v+mK6Wgcrlezs5ttZJnUGjP DUfOwWa8DqmCnFDA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1744795938; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=JvkHSS10XyBBZCdUukT1q/ieEy5kYIGILjTVfduyCTk=; b=oUXWjlXLYVGZSFMsqHZ9wlMH4Kn9ydpyqcPpriJ38vdHjmOVeNQgLovGs6RG74pRz/H+4L zO7JDhEASgkJGsJJatflFU2T/W9D3QJRAPQyiapwXefBIasOR184jwbhBqT2D0Vf9wXzmi U8kTT0AuN8XZFLJrzmO695/ziqEz1ng= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1744795938; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=JvkHSS10XyBBZCdUukT1q/ieEy5kYIGILjTVfduyCTk=; b=jNe31UL45R4T7Jgejf3AIQXlqtTHrnU9FhpJdRhsNcAySb9v+mK6Wgcrlezs5ttZJnUGjP DUfOwWa8DqmCnFDA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 885EA13976; Wed, 16 Apr 2025 09:32:18 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id H9hGISJ5/2djcwAAD6G6ig (envelope-from ); Wed, 16 Apr 2025 09:32:18 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 2B87EA0947; Wed, 16 Apr 2025 11:32:18 +0200 (CEST) Date: Wed, 16 Apr 2025 11:32:18 +0200 From: Jan Kara To: Davidlohr Bueso Cc: jack@suse.cz, tytso@mit.edu, adilger.kernel@dilger.ca, brauner@kernel.org, mcgrof@kernel.org, willy@infradead.org, hare@suse.de, djwong@kernel.org, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [PATCH 1/7] fs/buffer: split locking for pagecache lookups Message-ID: References: <20250415231635.83960-1-dave@stgolabs.net> <20250415231635.83960-2-dave@stgolabs.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250415231635.83960-2-dave@stgolabs.net> X-Rspamd-Action: no action X-Stat-Signature: y1w8unjp7r9m3ktf8hmbs5syjxz8pje3 X-Rspamd-Queue-Id: 7630740011 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1744795940-564420 X-HE-Meta: U2FsdGVkX19U3bvzkZqka2revZ088RCfwLaWkjsw2r+s0x5GJ/X809544fnZz+lSCO4KCylQQOWCBFBGMjXwrgorjL+hXpErT1m+yTxq1ReO6cZjJiUVRyVvLRiZCoqf4s0a2uiEKO+qimftNZCJz2fLT3vG02hVRjz8GR2+qr8rykrsSSk7SXYLpSoJtW8eLQpx/FZogGkqPy7UYoX/BB5PGRzjUCHdUZjvKVlQg+vMD8b2xyv27hkHEooOAaWiUBahDTCK5UwJLUJRkApjjiiTNWn4+9Hw7TqYq1CQ3zyP25gjbgna23nsOFBf7yvDRn2tnueWyCBMghPurvbk3WBVgUt7G1AnPs9RyiILrrPpGg6awokNnc3Eh9XBnYneltr/Uww9DCiCbHy//sbEiN26GQkw75254gXlUnGbyvJ6Ju1vvhAiwy6lOvcXAqUON5j2xwJtnsahfKkTpeX7eRAoQjMLEC+zT1jLPefSpfapHGhBXAJ7nk8OpNntjo0ONWqfiQfduXJvdimrr4LJjeguMJCsJ0U4CRyAAejF5Zp18YStHOHn24pLzO9RoU1XkFPW3B4umhcisDWfn2AeTcO0+WTd3IRXG4HiG/P1mLqGxT3pa7wTZI2WkCnMbGIAuDd+1Tie+wP2JtbRjvh2OhuKk6SkLsyGPLH/EKeKr4BcPgfXmrrrIXS6dJiusMH0rlntM2SQ6CXNqtej+YLYEsd21ILGgWNd8myVjmypdu6IPvvMfsxts+ZzPisoIYHDTp3+emnILveROsMlB4JjAHKQlTae0f+w6RXbJ3S9v/Vr94axsORajZ/zwmLAZEgHueA5JLcVYw5vX+wt5V8zeR9nOOGmHZXwP+lF1iCUXsOvekl9eqafNE7i/PvYsQjIbVlgkr6YolsXOcOJtwZsmLMR2ZMD5qqWhW3PWAjol3rNaTs6YNF6Y0V5vo9st1wLXGuLLWe6PddPmsr0MkY z/+7DWR3 xboB4Vpg6WI49xaPoSGKDdF4p2v8n2sHStDHjNHq2CyP63Ge1Xcq+0kldw3LDWSn2rH3/Q+AGMxl5iOE5/OC3qS/h1ZVbfTJjAHlwUsziVK0GgyWhgQ1Yp+B7WWNKcT2gXWvipngiQjPpR5qKTzayWITfa5GlWyLGyVv9nkMBFM7+YgozQFNlGS7LEdNrQxZe1zrG2wdqNgCtyRTpb1haEzibhY/q3OVJ4dfhlydDlERIwtSZwLCLBXHQjr3XPNTqIXKGnu/xsLjZHfIw8v62Zr5UWjoDxD1DaZFO/PmoTEUJubEevqK4qoppqLyRIRH5+h0TUAVVylVh8QVq7V7+P6pfjEECBhhr49z1Y9Z1aSdHq7d21vftQ5W9YWY5FwtKnnFx/oYb/43fc6/kQV/iEPYUsw== 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 Tue 15-04-25 16:16:29, Davidlohr Bueso wrote: > Callers of __find_get_block() may or may not allow for blocking > semantics, and is currently assumed that it will not. Layout > two paths based on this. The the private_lock scheme will > continued to be used for atomic contexts. Otherwise take the > folio lock instead, which protects the buffers, such as > vs migration and try_to_free_buffers(). > > Per the "hack idea", the latter can alleviate contention on > the private_lock for bdev mappings. For reasons of determinism > and avoid making bugs hard to reproduce, the trylocking is not > attempted. > > No change in semantics. All lookup users still take the spinlock. > > Signed-off-by: Davidlohr Bueso Looks good. Feel free to add: Reviewed-by: Jan Kara Honza > --- > fs/buffer.c | 41 +++++++++++++++++++++++++---------------- > 1 file changed, 25 insertions(+), 16 deletions(-) > > diff --git a/fs/buffer.c b/fs/buffer.c > index b99dc69dba37..c72ebff1b3f0 100644 > --- a/fs/buffer.c > +++ b/fs/buffer.c > @@ -176,18 +176,8 @@ void end_buffer_write_sync(struct buffer_head *bh, int uptodate) > } > EXPORT_SYMBOL(end_buffer_write_sync); > > -/* > - * Various filesystems appear to want __find_get_block to be non-blocking. > - * But it's the page lock which protects the buffers. To get around this, > - * we get exclusion from try_to_free_buffers with the blockdev mapping's > - * i_private_lock. > - * > - * Hack idea: for the blockdev mapping, i_private_lock contention > - * may be quite high. This code could TryLock the page, and if that > - * succeeds, there is no need to take i_private_lock. > - */ > static struct buffer_head * > -__find_get_block_slow(struct block_device *bdev, sector_t block) > +__find_get_block_slow(struct block_device *bdev, sector_t block, bool atomic) > { > struct address_space *bd_mapping = bdev->bd_mapping; > const int blkbits = bd_mapping->host->i_blkbits; > @@ -204,7 +194,16 @@ __find_get_block_slow(struct block_device *bdev, sector_t block) > if (IS_ERR(folio)) > goto out; > > - spin_lock(&bd_mapping->i_private_lock); > + /* > + * Folio lock protects the buffers. Callers that cannot block > + * will fallback to serializing vs try_to_free_buffers() via > + * the i_private_lock. > + */ > + if (atomic) > + spin_lock(&bd_mapping->i_private_lock); > + else > + folio_lock(folio); > + > head = folio_buffers(folio); > if (!head) > goto out_unlock; > @@ -236,7 +235,10 @@ __find_get_block_slow(struct block_device *bdev, sector_t block) > 1 << blkbits); > } > out_unlock: > - spin_unlock(&bd_mapping->i_private_lock); > + if (atomic) > + spin_unlock(&bd_mapping->i_private_lock); > + else > + folio_unlock(folio); > folio_put(folio); > out: > return ret; > @@ -1388,14 +1390,15 @@ lookup_bh_lru(struct block_device *bdev, sector_t block, unsigned size) > * it in the LRU and mark it as accessed. If it is not present then return > * NULL > */ > -struct buffer_head * > -__find_get_block(struct block_device *bdev, sector_t block, unsigned size) > +static struct buffer_head * > +find_get_block_common(struct block_device *bdev, sector_t block, > + unsigned size, bool atomic) > { > struct buffer_head *bh = lookup_bh_lru(bdev, block, size); > > if (bh == NULL) { > /* __find_get_block_slow will mark the page accessed */ > - bh = __find_get_block_slow(bdev, block); > + bh = __find_get_block_slow(bdev, block, atomic); > if (bh) > bh_lru_install(bh); > } else > @@ -1403,6 +1406,12 @@ __find_get_block(struct block_device *bdev, sector_t block, unsigned size) > > return bh; > } > + > +struct buffer_head * > +__find_get_block(struct block_device *bdev, sector_t block, unsigned size) > +{ > + return find_get_block_common(bdev, block, size, true); > +} > EXPORT_SYMBOL(__find_get_block); > > /** > -- > 2.39.5 > -- Jan Kara SUSE Labs, CR