On Fri, 3 Feb 2017, Steven Rostedt (VMware) wrote: > From: "Steven Rostedt (VMware)" <rost...@goodmis.org> > > 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) <rost...@goodmis.org>
Acked-by: Hugh Dickins <hu...@google.com> > --- > 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