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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35CAFC54EE9 for ; Sun, 25 Sep 2022 17:19:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233086AbiIYRTA (ORCPT ); Sun, 25 Sep 2022 13:19:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230303AbiIYRS5 (ORCPT ); Sun, 25 Sep 2022 13:18:57 -0400 Received: from new1-smtp.messagingengine.com (new1-smtp.messagingengine.com [66.111.4.221]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00A5B2A958; Sun, 25 Sep 2022 10:18:56 -0700 (PDT) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailnew.nyi.internal (Postfix) with ESMTP id 5C1DE580360; Sun, 25 Sep 2022 13:18:56 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 25 Sep 2022 13:18:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tyhicks.com; h= cc:cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm1; t=1664126336; x= 1664126936; bh=HCqk0OG1lzClXrvZZ9Tb9QvrGSh6HBbWcykRR6Kk2Y0=; b=j KBmfVqDPZ+dfemNUlGd6XVoSgMVl8CnI/ZSB7rJd5mBjyncEiNfH7p/yuoRPaX8O qDRHIIRbtSiBj7Y7xEiF+GpDZm87pLwpC7J61Ip4t/aPzdrEJmD9nTQFw11Aq1Ng oX8LXApSwg6qgFtZq45d4Yt5pmPddsOwIp3AL+v2sc/bhT7lv8snzvBFc2MNKJKO AiSsMAPUGvMnXiKjo0MgZ+9I9kBacSx0m+65/gt2KgXnrCLwUh7VIr+c5r/8TTcA UfWLXqXfEfPWmz3Am/eMUV1VQnzbyru0N75Ku5WmJ9yx1YcpqVd0iIaTWt0rFWnu FnUOmyJIKgB1yaiVgoUBQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=i78e14604.fm2; t= 1664126336; x=1664126936; bh=HCqk0OG1lzClXrvZZ9Tb9QvrGSh6HBbWcyk RR6Kk2Y0=; b=sSOD1vtHJprAY2Qjb0g9c/PvHHFwf0rAB+JEXvjUv3LZatIEPh4 bx56Nj8yGGj4IOZXHIjZINs2TJonpr6SxcUGk87Umld40XgLzS+/BCADs8/0Lt14 GwBl0Mb39v6XiqsqPmw506zgu9JhdeSBliJlvXurE3P59BZgk9zZ5BC3LqR7ExV/ piwyrLCdouMXxgjQoRNbrnMbsTzoSHhUrJG/norF67Esy8Al6zxYR8VfeiYid/Bf SnkosB+ww9vUDTl65VuiFn2qlaJtPilOxVu3DhHa5EfgGCQgcGhqZelpQwRSxjTj yO6dg67qsGPrSvs32J9qOfZ2eoa0c1IjG8A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrfeegtddguddufecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpeffhffvvefukfhfgggtugfgjgesthekredttddtjeenucfhrhhomhepvfih lhgvrhcujfhitghkshcuoegtohguvgesthihhhhitghkshdrtghomheqnecuggftrfgrth htvghrnhepgefhieeuheefkeetffefffekjefhgfefiedvveeiuedugfeufeefvdeihfeh ieevnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptg houggvsehthihhihgtkhhsrdgtohhm X-ME-Proxy: Feedback-ID: i78e14604:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 25 Sep 2022 13:18:54 -0400 (EDT) Date: Sun, 25 Sep 2022 12:18:52 -0500 From: Tyler Hicks To: "Fabio M. De Francesco" Cc: Christian Brauner , Seth Forshee , Amir Goldstein , "Matthew Wilcox (Oracle)" , Damien Le Moal , Andrew Morton , Roman Gushchin , Theodore Ts'o , Muchun Song , ecryptfs@vger.kernel.org, linux-kernel@vger.kernel.org, "Venkataramanan, Anirudh" , Ira Weiny Subject: Re: [RESEND PATCH] ecryptfs: Replace kmap() with kmap_local_page() Message-ID: <20220925171852.GD59018@sequoia> References: <20220901160704.25701-1-fmdefrancesco@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220901160704.25701-1-fmdefrancesco@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2022-09-01 18:07:04, Fabio M. De Francesco wrote: > The use of kmap() is being deprecated in favor of kmap_local_page(). > > There are two main problems with kmap(): (1) It comes with an overhead as > the mapping space is restricted and protected by a global lock for > synchronization and (2) it also requires global TLB invalidation when the > kmap’s pool wraps and it might block when the mapping space is fully > utilized until a slot becomes available. > > With kmap_local_page() the mappings are per thread, CPU local, can take > page faults, and can be called from any context (including interrupts). > It is faster than kmap() in kernels with HIGHMEM enabled. Furthermore, > the tasks can be preempted and, when they are scheduled to run again, the > kernel virtual addresses are restored and still valid. > > Since its use in fs/ecryptfs is safe everywhere, it should be preferred. > > Therefore, replace kmap() with kmap_local_page() in fs/ecryptfs. > > Cc: "Venkataramanan, Anirudh" > Suggested-by: Ira Weiny > Reviewed-by: Ira Weiny > Signed-off-by: Fabio M. De Francesco > --- > > I'm resending this patch because some recipients were missing in the > previous submission. In the meantime I'm also adding some more information > in the commit message. There are no changes in the code. Thanks for the additional information, Fabio. I've tested and applied it. Tyler > > fs/ecryptfs/crypto.c | 8 ++++---- > fs/ecryptfs/read_write.c | 8 ++++---- > 2 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c > index e3f5d7f3c8a0..03263ebcccc6 100644 > --- a/fs/ecryptfs/crypto.c > +++ b/fs/ecryptfs/crypto.c > @@ -465,10 +465,10 @@ int ecryptfs_encrypt_page(struct page *page) > } > > lower_offset = lower_offset_for_page(crypt_stat, page); > - enc_extent_virt = kmap(enc_extent_page); > + enc_extent_virt = kmap_local_page(enc_extent_page); > rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt, lower_offset, > PAGE_SIZE); > - kunmap(enc_extent_page); > + kunmap_local(enc_extent_virt); > if (rc < 0) { > ecryptfs_printk(KERN_ERR, > "Error attempting to write lower page; rc = [%d]\n", > @@ -514,10 +514,10 @@ int ecryptfs_decrypt_page(struct page *page) > BUG_ON(!(crypt_stat->flags & ECRYPTFS_ENCRYPTED)); > > lower_offset = lower_offset_for_page(crypt_stat, page); > - page_virt = kmap(page); > + page_virt = kmap_local_page(page); > rc = ecryptfs_read_lower(page_virt, lower_offset, PAGE_SIZE, > ecryptfs_inode); > - kunmap(page); > + kunmap_local(page_virt); > if (rc < 0) { > ecryptfs_printk(KERN_ERR, > "Error attempting to read lower page; rc = [%d]\n", > diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c > index 60bdcaddcbe5..5edf027c8359 100644 > --- a/fs/ecryptfs/read_write.c > +++ b/fs/ecryptfs/read_write.c > @@ -64,11 +64,11 @@ int ecryptfs_write_lower_page_segment(struct inode *ecryptfs_inode, > > offset = ((((loff_t)page_for_lower->index) << PAGE_SHIFT) > + offset_in_page); > - virt = kmap(page_for_lower); > + virt = kmap_local_page(page_for_lower); > rc = ecryptfs_write_lower(ecryptfs_inode, virt, offset, size); > if (rc > 0) > rc = 0; > - kunmap(page_for_lower); > + kunmap_local(virt); > return rc; > } > > @@ -253,11 +253,11 @@ int ecryptfs_read_lower_page_segment(struct page *page_for_ecryptfs, > int rc; > > offset = ((((loff_t)page_index) << PAGE_SHIFT) + offset_in_page); > - virt = kmap(page_for_ecryptfs); > + virt = kmap_local_page(page_for_ecryptfs); > rc = ecryptfs_read_lower(virt, offset, size, ecryptfs_inode); > if (rc > 0) > rc = 0; > - kunmap(page_for_ecryptfs); > + kunmap_local(virt); > flush_dcache_page(page_for_ecryptfs); > return rc; > } > -- > 2.37.2 >