From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751637AbdBDWwG (ORCPT ); Sat, 4 Feb 2017 17:52:06 -0500 Received: from mail-pg0-f47.google.com ([74.125.83.47]:34360 "EHLO mail-pg0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751239AbdBDWwF (ORCPT ); Sat, 4 Feb 2017 17:52:05 -0500 Date: Sat, 4 Feb 2017 14:51:55 -0800 (PST) From: Hugh Dickins X-X-Sender: hugh@eggly.anvils To: "Steven Rostedt (VMware)" cc: LKML , Andrew Morton , David Herrmann , Hugh Dickins Subject: Re: [PATCH] shm: Fix unlikely() test of info->seals to test only for WRITE and GROW In-Reply-To: <20170203105656.7aec6237@gandalf.local.home> Message-ID: References: <20170203105656.7aec6237@gandalf.local.home> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 3 Feb 2017, Steven Rostedt (VMware) wrote: > From: "Steven Rostedt (VMware)" > > Running my likely/unlikely profiler, I discovered that the test in > shmem_write_begin() that tests for info->seals as unlikely, is > always incorrect. This is because shmem_get_inode() sets info->seals to > have F_SEAL_SEAL set by default, and it is unlikely to be cleared when > shmem_write_begin() is called. Thus, the if statement is very likely. > > But as the if statement block only cares about F_SEAL_WRITE and > F_SEAL_GROW, change the test to only test those two bits. > > Signed-off-by: Steven Rostedt (VMware) Acked-by: Hugh Dickins > --- > mm/shmem.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index bb53285..ef4cdbb 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -2194,7 +2194,7 @@ shmem_write_begin(struct file *file, struct address_space *mapping, > pgoff_t index = pos >> PAGE_SHIFT; > > /* i_mutex is held by caller */ > - if (unlikely(info->seals)) { > + if (unlikely(info->seals & (F_SEAL_WRITE | F_SEAL_GROW))) { > if (info->seals & F_SEAL_WRITE) > return -EPERM; > if ((info->seals & F_SEAL_GROW) && pos + len > inode->i_size) > -- > 2.9.3