Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp360335pxb; Wed, 14 Apr 2021 17:49:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzfkeGtWQHCVZKKd5caqKbwpQBJBNuJiQA0A6DPreYn6Ky0+DBS888hX/jDFtRyplqUQMJt X-Received: by 2002:a17:907:78d0:: with SMTP id kv16mr759848ejc.174.1618447774854; Wed, 14 Apr 2021 17:49:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618447774; cv=none; d=google.com; s=arc-20160816; b=vZ7Ixp/D5DH7wO4Jmlpf81YLmNR5LI/U6SKWgtrU/uxnsQ8QOWdxwE76ecqCQCHzFN 3on65eQRZJ0T5wdj6lZSH4a/ncL/1Se7FcA6laZaXXccaQiTXW5eZO7riVJDwS5SneEX ENYyK8IW1IWFxNQ2M+9eCere+q0GQnlT9V1zcgpzXqyr1fbbNp5CfISE8W0Ng2nIubgR GdxjbTvtSs30ckegcjnzT73s13dkI5r9ko4lVOyLJGQZJ4TXILdPuNIMHKNyVPHIPzRw smNNMXqvoDusXHP4fm9uo8cuZFu9ikLkpm8YHpNWMjubjLOnzu8QOtDSyTsZQnITl5XJ f6IQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=YiOL9jltx8hWLyf7dWkxtJsgoWejWnWYchqK0vvrqoA=; b=GoyU0lI0vOzNhhmzB4tga19agGjc10jHRKaHJIsbvKxkdY9JU6goagXeUkmLeAP1Gy 7/ZNQcCkAH4VQNYR2BYuMwtXN9GgSbavow/2Ljv1I/DW4np70XmJPCnvga/IvY+TDqdz Tolo22Yji932RfzSgyUi6nDq2vU3ZrUVPkVPESNrhK+8dDQG5OEeKpGmq+nci+DUZlCu 5X3eUMxH/i5IBnJ5eAYm7ehCLUhM4DolQGepac8Pcoi7xBWbPqTQvJeT9L7w1DmIM9iJ gtWAXUwYRcw55UylkIiuGUcnfYjRhaGFJtzOIpoAX/mlMmly8+Xcvz+Zmuc6/542WCSp qnCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=niVPtyph; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h18si798734ejl.750.2021.04.14.17.49.11; Wed, 14 Apr 2021 17:49:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=casper.20170209 header.b=niVPtyph; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232376AbhDNW0L (ORCPT + 99 others); Wed, 14 Apr 2021 18:26:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231207AbhDNW0L (ORCPT ); Wed, 14 Apr 2021 18:26:11 -0400 Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:8b0:10b:1236::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4DEEC061574; Wed, 14 Apr 2021 15:25:48 -0700 (PDT) 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=YiOL9jltx8hWLyf7dWkxtJsgoWejWnWYchqK0vvrqoA=; b=niVPtyphxeL57ZxgfJ39HRyuGs XYPIvhHywyY4rAtyEoilkvq7Pd+GLrL4IW4dnRBGc2kXYze+UIO4qbzdzjCotxaNVzDFBIvZT0mNR pHNtYlwFzzj9ZDwKsVTj+Mpcr1YFyNJLPkzCTvFF67KAAY/Ko4XwbzKIz6IB7H/w+ruCnj/iOWjd0 cDi5t3yf1R6NuHJBD7ikRSh03hwO37o8io4IX2z0uVics/W2Q6qkohvSKqDnpl0eCJfmveRhWNA8s biN+Lg5I+jLkq7WOtCHYTNhf6pP9zjZUDnWGpJrXpvOUWBniEcwEj+SFB33qHfTnXXSWiK9nwgdnF QugXG4pw==; Received: from willy by casper.infradead.org with local (Exim 4.94 #2 (Red Hat Linux)) id 1lWnwx-007i93-2r; Wed, 14 Apr 2021 22:25:37 +0000 Date: Wed, 14 Apr 2021 23:25:31 +0100 From: Matthew Wilcox To: Dave Chinner Cc: Jan Kara , linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-xfs@vger.kernel.org, Ted Tso , Christoph Hellwig , Amir Goldstein Subject: Re: [PATCH 2/7] mm: Protect operations adding pages to page cache with i_mapping_lock Message-ID: <20210414222531.GZ2531743@casper.infradead.org> References: <20210413105205.3093-1-jack@suse.cz> <20210413112859.32249-2-jack@suse.cz> <20210414000113.GG63242@dread.disaster.area> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210414000113.GG63242@dread.disaster.area> Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org On Wed, Apr 14, 2021 at 10:01:13AM +1000, Dave Chinner wrote: > > + if (iocb->ki_flags & IOCB_NOWAIT) { > > + if (!down_read_trylock(&mapping->host->i_mapping_sem)) > > + return -EAGAIN; > > + } else { > > + down_read(&mapping->host->i_mapping_sem); > > + } > > We really need a lock primitive for this. The number of times this > exact lock pattern is being replicated all through the IO path is > getting out of hand. > > static inline bool > down_read_try_or_lock(struct rwsem *sem, bool try) > { > if (try) { > if (!down_read_trylock(sem)) > return false; > } else { > down_read(&mapping->host->i_mapping_sem); > } > return true; > } > > and the callers become: > > if (!down_read_try_or_lock(sem, (iocb->ki_flags & IOCB_NOWAIT))) > return -EAGAIN; I think that should be written: if (!iocb_read_lock(iocb, &rwsem)) return -EAGAIN; and implemented as: static inline int iocb_read_lock(struct kiocb *iocb, struct rwsem *sem) { if (iocb->ki_flags & IOCB_NOWAIT) return down_read_trylock(sem) ? 0 : -EAGAIN; return down_read_killable(sem); }