1. 28 3月, 2018 1 次提交
  2. 19 3月, 2018 2 次提交
    • I
    • R
      vfs: make sure struct filename->iname is word-aligned · 1c949843
      Rasmus Villemoes 提交于
      I noticed that offsetof(struct filename, iname) is actually 28 on 64
      bit platforms, so we always pass an unaligned pointer to
      strncpy_from_user. This is mostly a problem for those 64 bit platforms
      without HAVE_EFFICIENT_UNALIGNED_ACCESS, but even on x86_64, unaligned
      accesses carry a penalty.
      
      A user-space microbenchmark doing nothing but strncpy_from_user from the
      same (aligned) source string runs about 5% faster when the destination
      is aligned. That number increases to 20% when the string is long
      enough (~32 bytes) that we cross a cache line boundary - that's for
      example the case for about half the files a "git status" in a kernel
      tree ends up stat'ing.
      
      This won't make any real-life workloads 5%, or even 1%, faster, but path
      lookup is common enough that cutting even a few cycles should be
      worthwhile. So ensure we always pass an aligned destination pointer to
      strncpy_from_user. Instead of explicit padding, simply swap the refcnt
      and aname members, as suggested by Al Viro.
      Signed-off-by: NRasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      1c949843
  3. 23 2月, 2018 1 次提交
  4. 12 2月, 2018 1 次提交
    • L
      vfs: do bulk POLL* -> EPOLL* replacement · a9a08845
      Linus Torvalds 提交于
      This is the mindless scripted replacement of kernel use of POLL*
      variables as described by Al, done by this script:
      
          for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
              L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
              for f in $L; do sed -i "-es/^\([^\"]*\)\(\<POLL$V\>\)/\\1E\\2/" $f; done
          done
      
      with de-mangling cleanups yet to come.
      
      NOTE! On almost all architectures, the EPOLL* constants have the same
      values as the POLL* constants do.  But they keyword here is "almost".
      For various bad reasons they aren't the same, and epoll() doesn't
      actually work quite correctly in some cases due to this on Sparc et al.
      
      The next patch from Al will sort out the final differences, and we
      should be all done.
      Scripted-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a9a08845
  5. 09 2月, 2018 5 次提交
  6. 07 2月, 2018 30 次提交