1. 18 Mar, 2011 6 commits
    • Shaohua Li's avatar
      x86: Flush TLB if PGD entry is changed in i386 PAE mode · 4981d01e
      Shaohua Li authored
      According to intel CPU manual, every time PGD entry is changed in i386 PAE
      mode, we need do a full TLB flush. Current code follows this and there is
      comment for this too in the code.
      
      But current code misses the multi-threaded case. A changed page table
      might be used by several CPUs, every such CPU should flush TLB. Usually
      this isn't a problem, because we prepopulate all PGD entries at process
      fork. But when the process does munmap and follows new mmap, this issue
      will be triggered.
      
      When it happens, some CPUs keep doing page faults:
      
        http://marc.info/?l=linux-kernel&m=129915020508238&w=2
      
      Reported-by: Yasunori Goto<y-goto@jp.fujitsu.com>
      Tested-by: Yasunori Goto<y-goto@jp.fujitsu.com>
      Reviewed-by: default avatarRik van Riel <riel@redhat.com>
      Signed-off-by: Shaohua Li<shaohua.li@intel.com>
      Cc: Mallick Asit K <asit.k.mallick@intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: linux-mm <linux-mm@kvack.org>
      Cc: stable <stable@kernel.org>
      LKML-Reference: <1300246649.2337.95.camel@sli10-conroe>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      4981d01e
    • Namhyung Kim's avatar
      x86, dumpstack: Correct stack dump info when frame pointer is available · e8e999cf
      Namhyung Kim authored
      Current stack dump code scans entire stack and check each entry
      contains a pointer to kernel code. If CONFIG_FRAME_POINTER=y it
      could mark whether the pointer is valid or not based on value of
      the frame pointer. Invalid entries could be preceded by '?' sign.
      
      However this was not going to happen because scan start point
      was always higher than the frame pointer so that they could not
      meet.
      
      Commit 9c0729dc ("x86: Eliminate bp argument from the stack
      tracing routines") delayed bp acquisition point, so the bp was
      read in lower frame, thus all of the entries were marked
      invalid.
      
      This patch fixes this by reverting above commit while retaining
      stack_frame() helper as suggested by Frederic Weisbecker.
      
      End result looks like below:
      
      before:
      
       [    3.508329] Call Trace:
       [    3.508551]  [<ffffffff814f35c9>] ? panic+0x91/0x199
       [    3.508662]  [<ffffffff814f3739>] ? printk+0x68/0x6a
       [    3.508770]  [<ffffffff81a981b2>] ? mount_block_root+0x257/0x26e
       [    3.508876]  [<ffffffff81a9821f>] ? mount_root+0x56/0x5a
       [    3.508975]  [<ffffffff81a98393>] ? prepare_namespace+0x170/0x1a9
       [    3.509216]  [<ffffffff81a9772b>] ? kernel_init+0x1d2/0x1e2
       [    3.509335]  [<ffffffff81003894>] ? kernel_thread_helper+0x4/0x10
       [    3.509442]  [<ffffffff814f6880>] ? restore_args+0x0/0x30
       [    3.509542]  [<ffffffff81a97559>] ? kernel_init+0x0/0x1e2
       [    3.509641]  [<ffffffff81003890>] ? kernel_thread_helper+0x0/0x10
      
      after:
      
       [    3.522991] Call Trace:
       [    3.523351]  [<ffffffff814f35b9>] panic+0x91/0x199
       [    3.523468]  [<ffffffff814f3729>] ? printk+0x68/0x6a
       [    3.523576]  [<ffffffff81a981b2>] mount_block_root+0x257/0x26e
       [    3.523681]  [<ffffffff81a9821f>] mount_root+0x56/0x5a
       [    3.523780]  [<ffffffff81a98393>] prepare_namespace+0x170/0x1a9
       [    3.523885]  [<ffffffff81a9772b>] kernel_init+0x1d2/0x1e2
       [    3.523987]  [<ffffffff81003894>] kernel_thread_helper+0x4/0x10
       [    3.524228]  [<ffffffff814f6880>] ? restore_args+0x0/0x30
       [    3.524345]  [<ffffffff81a97559>] ? kernel_init+0x0/0x1e2
       [    3.524445]  [<ffffffff81003890>] ? kernel_thread_helper+0x0/0x10
      
       -v5:
         * fix build breakage with oprofile
      
       -v4:
         * use 0 instead of regs->bp
         * separate out printk changes
      
       -v3:
         * apply comment from Frederic
         * add a couple of printk fixes
      Signed-off-by: default avatarNamhyung Kim <namhyung@gmail.com>
      Acked-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Soren Sandmann <ssp@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Robert Richter <robert.richter@amd.com>
      LKML-Reference: <1300416006-3163-1-git-send-email-namhyung@gmail.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      e8e999cf
    • Ingo Molnar's avatar
      x86: Clean up csum-copy_64.S a bit · 2c76397b
      Ingo Molnar authored
      The many stray whitespaces and other uncleanlinesses made this code
      almost unreadable to me - so fix those.
      
      No changes to the code.
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      2c76397b
    • Lucas De Marchi's avatar
      x86: Fix common misspellings · 0d2eb44f
      Lucas De Marchi authored
      They were generated by 'codespell' and then manually reviewed.
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@profusion.mobi>
      Cc: trivial@kernel.org
      LKML-Reference: <1300389856-1099-3-git-send-email-lucas.demarchi@profusion.mobi>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      0d2eb44f
    • Lucas De Marchi's avatar
      x86: Fix misspelling and align params · a6c3270b
      Lucas De Marchi authored
      Fix 'upto' misspelling and align parameters.
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@profusion.mobi>
      Cc: trivial@kernel.org
      LKML-Reference: <1300389856-1099-2-git-send-email-lucas.demarchi@profusion.mobi>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      a6c3270b
    • Ingo Molnar's avatar
      Merge branch 'linus' into x86/urgent · 8dd8997d
      Ingo Molnar authored
      Merge reason: Merge upstream commits to avoid conflicts in upcoming patches.
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      8dd8997d
  2. 17 Mar, 2011 1 commit
  3. 16 Mar, 2011 24 commits
  4. 15 Mar, 2011 9 commits
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6 · 422e6c4b
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (57 commits)
        tidy the trailing symlinks traversal up
        Turn resolution of trailing symlinks iterative everywhere
        simplify link_path_walk() tail
        Make trailing symlink resolution in path_lookupat() iterative
        update nd->inode in __do_follow_link() instead of after do_follow_link()
        pull handling of one pathname component into a helper
        fs: allow AT_EMPTY_PATH in linkat(), limit that to CAP_DAC_READ_SEARCH
        Allow passing O_PATH descriptors via SCM_RIGHTS datagrams
        readlinkat(), fchownat() and fstatat() with empty relative pathnames
        Allow O_PATH for symlinks
        New kind of open files - "location only".
        ext4: Copy fs UUID to superblock
        ext3: Copy fs UUID to superblock.
        vfs: Export file system uuid via /proc/<pid>/mountinfo
        unistd.h: Add new syscalls numbers to asm-generic
        x86: Add new syscalls for x86_64
        x86: Add new syscalls for x86_32
        fs: Remove i_nlink check from file system link callback
        fs: Don't allow to create hardlink for deleted file
        vfs: Add open by file handle support
        ...
      422e6c4b
    • Trond Myklebust's avatar
      VFS: Fix the nfs sillyrename regression in kernel 2.6.38 · c83ce989
      Trond Myklebust authored
      The new vfs locking scheme introduced in 2.6.38 breaks NFS sillyrename
      because the latter relies on being able to determine the parent
      directory of the dentry in the ->iput() callback in order to send the
      appropriate unlink rpc call.
      
      Looking at the code that cares about races with dput(), there doesn't
      seem to be anything that specifically uses d_parent as a test for
      whether or not there is a race:
        - __d_lookup_rcu(), __d_lookup() all test for d_hashed() after d_parent
        - shrink_dcache_for_umount() is safe since nothing else can rearrange
          the dentries in that super block.
        - have_submount(), select_parent() and d_genocide() can test for a
          deletion if we set the DCACHE_DISCONNECTED flag when the dentry
          is removed from the parent's d_subdirs list.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      Cc: stable@kernel.org (2.6.38, needs commit c826cb7d "dcache.c:
      	create helper function for duplicated functionality" )
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c83ce989
    • Linus Torvalds's avatar
      dcache.c: create helper function for duplicated functionality · c826cb7d
      Linus Torvalds authored
      This creates a helper function for he "try to ascend into the parent
      directory" case, which was written out in triplicate before.  With all
      the locking and subtle sequence number stuff, we really don't want to
      duplicate that kind of code.
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c826cb7d
    • Al Viro's avatar
      tidy the trailing symlinks traversal up · 574197e0
      Al Viro authored
      * pull the handling of current->total_link_count into
      __do_follow_link()
      * put the common "do ->put_link() if needed and path_put() the link"
        stuff into a helper (put_link(nd, link, cookie))
      * rename __do_follow_link() to follow_link(), while we are at it
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      574197e0
    • Al Viro's avatar
      Turn resolution of trailing symlinks iterative everywhere · b356379a
      Al Viro authored
      The last remaining place (resolution of nested symlink) converted
      to the loop of the same kind we have in path_lookupat() and
      path_openat().
      
      Note that we still *do* have a recursion in pathname resolution;
      can't avoid it, really.  However, it's strictly for nested symlinks
      now - i.e. ones in the middle of a pathname.
      
      link_path_walk() has lost the tail now - it always walks everything
      except the last component.
      
      do_follow_link() renamed to nested_symlink() and moved down.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      b356379a
    • Al Viro's avatar
      simplify link_path_walk() tail · ce052544
      Al Viro authored
      Now that link_path_walk() is called without LOOKUP_PARENT
      only from do_follow_link(), we can simplify the checks in
      last component handling.  First of all, checking if we'd
      arrived to a directory is not needed - the caller will check
      it anyway.  And LOOKUP_FOLLOW is guaranteed to be there,
      since we only get to that place with nd->depth > 0.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      ce052544
    • Al Viro's avatar
      Make trailing symlink resolution in path_lookupat() iterative · bd92d7fe
      Al Viro authored
      Now the only caller of link_path_walk() that does *not* pass
      LOOKUP_PARENT is do_follow_link()
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      bd92d7fe
    • Al Viro's avatar
      update nd->inode in __do_follow_link() instead of after do_follow_link() · b21041d0
      Al Viro authored
      ... and note that we only need to do it for LAST_BIND symlinks
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      b21041d0
    • Al Viro's avatar
      pull handling of one pathname component into a helper · ce57dfc1
      Al Viro authored
      new helper: walk_component().  Handles everything except symlinks;
      returns negative on error, 0 on success and 1 on symlinks we decided
      to follow.  Drops out of RCU mode on such symlinks.
      
      link_path_walk() and do_last() switched to using that.
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      ce57dfc1