1. 06 12月, 2012 24 次提交
  2. 05 12月, 2012 1 次提交
    • L
      vfs: avoid "attempt to access beyond end of device" warnings · 57302e0d
      Linus Torvalds 提交于
      The block device access simplification that avoided accessing the (racy)
      block size information (commit bbec0270: "blkdev_max_block: make
      private to fs/buffer.c") no longer checks the maximum block size in the
      block mapping path.
      
      That was _almost_ as simple as just removing the code entirely, because
      the readers and writers all check the size of the device anyway, so
      under normal circumstances it "just worked".
      
      However, the block size may be such that the end of the device may
      straddle one single buffer_head.  At which point we may still want to
      access the end of the device, but the buffer we use to access it
      partially extends past the end.
      
      The 'bd_set_size()' function intentionally sets the block size to avoid
      this, but mounting the device - or setting the block size by hand to
      some other value - can modify that block size.
      
      So instead, teach 'submit_bh()' about the special case of the buffer
      head straddling the end of the device, and turning such an access into a
      smaller IO access, avoiding the problem.
      
      This, btw, also means that unlike before, we can now access the whole
      device regardless of device block size setting.  So now, even if the
      device size is only 512-byte aligned, we can read and write even the
      last sector even when having a much bigger block size for accessing the
      rest of the device.
      
      So with this, we could now get rid of the 'bd_set_size()' block size
      code entirely - resulting in faster IO for the common case - but that
      would be a separate patch.
      Reported-and-tested-by: NRomain Francoise <romain@orebokech.com>
      Reporeted-and-tested-by: NMeelis Roos <mroos@linux.ee>
      Reported-by: NTony Luck <tony.luck@intel.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      57302e0d
  3. 30 11月, 2012 9 次提交
  4. 29 11月, 2012 1 次提交
  5. 28 11月, 2012 1 次提交
  6. 27 11月, 2012 2 次提交
    • J
      writeback: put unused inodes to LRU after writeback completion · 4eff96dd
      Jan Kara 提交于
      Commit 169ebd90 ("writeback: Avoid iput() from flusher thread")
      removed iget-iput pair from inode writeback.  As a side effect, inodes
      that are dirty during iput_final() call won't be ever added to inode LRU
      (iput_final() doesn't add dirty inodes to LRU and later when the inode
      is cleaned there's noone to add the inode there).  Thus inodes are
      effectively unreclaimable until someone looks them up again.
      
      The practical effect of this bug is limited by the fact that inodes are
      pinned by a dentry for long enough that the inode gets cleaned.  But
      still the bug can have nasty consequences leading up to OOM conditions
      under certain circumstances.  Following can easily reproduce the
      problem:
      
        for (( i = 0; i < 1000; i++ )); do
          mkdir $i
          for (( j = 0; j < 1000; j++ )); do
            touch $i/$j
            echo 2 > /proc/sys/vm/drop_caches
          done
        done
      
      then one needs to run 'sync; ls -lR' to make inodes reclaimable again.
      
      We fix the issue by inserting unused clean inodes into the LRU after
      writeback finishes in inode_sync_complete().
      Signed-off-by: NJan Kara <jack@suse.cz>
      Reported-by: NOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Cc: Wu Fengguang <fengguang.wu@intel.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: <stable@vger.kernel.org>		[3.5+]
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4eff96dd
    • S
      proc: check vma->vm_file before dereferencing · 05f56484
      Stanislav Kinsbursky 提交于
      Commit 7b540d06 ("proc_map_files_readdir(): don't bother with
      grabbing files") switched proc_map_files_readdir() to use @f_mode
      directly instead of grabbing @file reference, but same time the test for
      @vm_file presence was lost leading to nil dereference.  The patch brings
      the test back.
      
      The all proc_map_files feature is CONFIG_CHECKPOINT_RESTORE wrapped
      (which is set to 'n' by default) so the bug doesn't affect regular
      kernels.
      
      The regression is 3.7-rc1 only as far as I can tell.
      
      [gorcunov@openvz.org: provided changelog]
      Signed-off-by: NStanislav Kinsbursky <skinsbursky@parallels.com>
      Acked-by: NCyrill Gorcunov <gorcunov@openvz.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      05f56484
  7. 23 11月, 2012 1 次提交
    • J
      jbd: Fix lock ordering bug in journal_unmap_buffer() · 25389bb2
      Jan Kara 提交于
      Commit 09e05d48 introduced a wait for transaction commit into
      journal_unmap_buffer() in the case we are truncating a buffer undergoing commit
      in the page stradding i_size on a filesystem with blocksize < pagesize. Sadly
      we forgot to drop buffer lock before waiting for transaction commit and thus
      deadlock is possible when kjournald wants to lock the buffer.
      
      Fix the problem by dropping the buffer lock before waiting for transaction
      commit. Since we are still holding page lock (and that is OK), buffer cannot
      disappear under us.
      
      CC: stable@vger.kernel.org # Wherever commit 09e05d48 was taken
      Signed-off-by: NJan Kara <jack@suse.cz>
      25389bb2
  8. 20 11月, 2012 1 次提交