1. 28 8月, 2006 8 次提交
    • B
      [PATCH] Manage jbd allocations from its own slabs · ea817398
      Badari Pulavarty 提交于
      JBD currently allocates commit and frozen buffers from slabs.  With
      CONFIG_SLAB_DEBUG, its possible for an allocation to cross the page
      boundary causing IO problems.
      
      https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=200127
      
      So, instead of allocating these from regular slabs - manage allocation from
      its own slabs and disable slab debug for these slabs.
      
      [akpm@osdl.org: cleanups]
      Signed-off-by: NBadari Pulavarty <pbadari@us.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      ea817398
    • M
      [PATCH] eventpoll.c compile fix · 45f17e0c
      Masoud Asgharifard Sharbiani 提交于
      Fix two compile failures in eventpoll.c code which would happen if
      DEBUG_EPOLL is bigger than zero.
      Signed-off-by: NMasoud Sharbiani <masouds@google.com>
      Cc: Davide Libenzi <davidel@xmailserver.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      45f17e0c
    • E
      [PATCH] ufs: truncate correction · ecdc6394
      Evgeniy Dushistov 提交于
      1) When we allocated last fragment in ufs_truncate, we read page, check
         if block mapped to address, and if not trying to allocate it.  This is
         wrong behaviour, fragment may be NOT allocated, but mapped, this
         happened because of "block map" function not checked allocated fragment
         or not, it just take address of the first fragment in the block, add
         offset of fragment and return result, this is correct behaviour in
         almost all situation except call from ufs_truncate.
      
      2) Almost all implementation of UFS, which I can investigate have such
         "defect": if you have full disk, and try truncate file, for example 3GB
         to 2MB, and have hole in this region, truncate return -ENOSPC.  I tried
         evade from this problem, but "block allocation" algorithm is tied to
         right value of i_lastfrag, and fix of this corner case may slow down of
         ordinaries scenarios, so this patch makes behavior of "truncate"
         operations similar to what other UFS implementations do.
      Signed-off-by: NEvgeniy Dushistov <dushistov@mail.ru>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      ecdc6394
    • E
      [PATCH] ufs: write to hole in big file · c37336b0
      Evgeniy Dushistov 提交于
      On UFS, this scenario:
      	open(O_TRUNC)
      	lseek(1024 * 1024 * 80)
      	write("A")
      	lseek(1024 * 2)
      	write("A")
      
      may cause access to invalid address.
      
      This happened because of "goal" is calculated in wrong way in block
      allocation path, as I see this problem exists also in 2.4.
      
      We use construction like this i_data[lastfrag], i_data array of pointers to
      direct blocks, indirect and so on, it has ceratain size ~20 elements, and
      lastfrag may have value for example 40000.
      
      Also this patch fixes related to handling such scenario issues, wrong
      zeroing metadata, in case of block(not fragment) allocation, and wrong goal
      calculation, when we allocate block
      Signed-off-by: NEvgeniy Dushistov <dushistov@mail.ru>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      c37336b0
    • M
      [PATCH] ext3 filesystem bogus ENOSPC with reservation fix · 08fb306f
      Mingming Cao 提交于
      To handle the earlier bogus ENOSPC error caused by filesystem full of block
      reservation, current code falls back to non block reservation, starts to
      allocate block(s) from the goal allocation block group as if there is no
      block reservation.
      
      Current code needs to re-load the corresponding block group descriptor for
      the initial goal block group in this case.  The patch fixes this.
      Signed-off-by: NMingming Cao <cmm@us.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      08fb306f
    • A
      [PATCH] ext2: prevent div-by-zero on corrupted fs · 607eb266
      Andries Brouwer 提交于
      Mounting an ext2 filesystem with zero s_inodes_per_group will cause a
      divide error.
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      607eb266
    • A
      [PATCH] Fix for minix crash · f5fb09fa
      Andries Brouwer 提交于
      Mounting a (corrupt) minix filesystem with zero s_zmap_blocks
      gives a spectacular crash on my 2.6.17.8 system, no doubt
      because minix/inode.c does an unconditional
      	minix_set_bit(0,sbi->s_zmap[0]->b_data);
      
      [akpm@osdl.org: make labels conistent while we're there]
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      f5fb09fa
    • P
      [PATCH] lockdep: fix blkdev_open() warning · 6946bd63
      Peter Zijlstra 提交于
      On Wed, 2006-08-09 at 07:57 +0200, Rolf Eike Beer wrote:
      > =============================================
      > [ INFO: possible recursive locking detected ]
      > ---------------------------------------------
      > parted/7929 is trying to acquire lock:
      >  (&bdev->bd_mutex){--..}, at: [<c105eb8d>] __blkdev_put+0x1e/0x13c
      >
      > but task is already holding lock:
      >  (&bdev->bd_mutex){--..}, at: [<c105eec6>] do_open+0x72/0x3a8
      >
      > other info that might help us debug this:
      > 1 lock held by parted/7929:
      >  #0:  (&bdev->bd_mutex){--..}, at: [<c105eec6>] do_open+0x72/0x3a8
      > stack backtrace:
      >  [<c1003aad>] show_trace_log_lvl+0x58/0x15b
      >  [<c100495f>] show_trace+0xd/0x10
      >  [<c1004979>] dump_stack+0x17/0x1a
      >  [<c102dee5>] __lock_acquire+0x753/0x99c
      >  [<c102e3b0>] lock_acquire+0x4a/0x6a
      >  [<c1204501>] mutex_lock_nested+0xc8/0x20c
      >  [<c105eb8d>] __blkdev_put+0x1e/0x13c
      >  [<c105ecc4>] blkdev_put+0xa/0xc
      >  [<c105f18a>] do_open+0x336/0x3a8
      >  [<c105f21b>] blkdev_open+0x1f/0x4c
      >  [<c1057b40>] __dentry_open+0xc7/0x1aa
      >  [<c1057c91>] nameidata_to_filp+0x1c/0x2e
      >  [<c1057cd1>] do_filp_open+0x2e/0x35
      >  [<c1057dd7>] do_sys_open+0x38/0x68
      >  [<c1057e33>] sys_open+0x16/0x18
      >  [<c1002845>] sysenter_past_esp+0x56/0x8d
      
      OK, I'm having a look here; its all new to me so bear with me.
      
      blkdev_open() calls
        do_open(bdev, ...,BD_MUTEX_NORMAL) and takes
          mutex_lock_nested(&bdev->bd_mutex, BD_MUTEX_NORMAL)
      
      then something fails, and we're thrown to:
      
      out_first: where
          if (bdev != bdev->bd_contains)
            blkdev_put(bdev->bd_contains) which is
              __blkdev_put(bdev->bd_contains, BD_MUTEX_NORMAL) which does
                mutex_lock_nested(&bdev->bd_contains->bd_mutex, BD_MUTEX_NORMAL) <--- lockdep trigger
      
      When going to out_first, dbev->bd_contains is either bdev or whole, and
      since we take the branch it must be whole. So it seems to me the
      following patch would be the right one:
      
      [akpm@osdl.org: compile fix]
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Acked-by: NNeilBrown <neilb@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      6946bd63
  2. 27 8月, 2006 1 次提交
  3. 25 8月, 2006 11 次提交
  4. 23 8月, 2006 1 次提交
  5. 21 8月, 2006 3 次提交
  6. 15 8月, 2006 4 次提交
  7. 10 8月, 2006 1 次提交
    • N
      [XFS] Fix xfs_free_extent related NULL pointer dereference. · 0e1edbd9
      Nathan Scott 提交于
      We recently fixed an out-of-space deadlock in XFS, and part of that fix
      involved the addition of the XFS_ALLOC_FLAG_FREEING flag to some of the
      space allocator calls to indicate they're freeing space, not allocating
      it. There was a missed xfs_alloc_fix_freelist condition test that did not
      correctly test "flags". The same test would also test an uninitialised
      structure field (args->userdata) and depending on its value either would
      or would not return early with a critical buffer pointer set to NULL.
      
      This fixes that up, adds asserts to several places to catch future botches
      of this nature, and skips sections of xfs_alloc_fix_freelist that are
      irrelevent for the space-freeing case.
      
      SGI-PV: 955303
      SGI-Modid: xfs-linux-melb:xfs-kern:26743a
      Signed-off-by: NNathan Scott <nathans@sgi.com>
      0e1edbd9
  8. 08 8月, 2006 7 次提交
  9. 06 8月, 2006 4 次提交
    • E
      [PATCH] udf: initialize parts of inode earlier in create · 225add61
      Eric Sandeen 提交于
      I saw an oops down this path when trying to create a new file on a UDF
      filesystem which was internally marked as readonly, but mounted rw:
      
      udf_create
              udf_new_inode
                      new_inode
                              alloc_inode
                              	udf_alloc_inode
                      udf_new_block
                              returns EIO due to readonlyness
                      iput (on error)
                              udf_put_inode
                                      udf_discard_prealloc
                                              udf_next_aext
                                                      udf_current_aext
                                                              udf_get_fileshortad
                                                                      OOPS
      
      the udf_discard_prealloc() path was examining uninitialized fields of the
      udf inode.
      
      udf_discard_prealloc() already has this code to short-circuit the discard
      path if no extents are preallocated:
      
              if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB ||
                      inode->i_size == UDF_I_LENEXTENTS(inode))
              {
                      return;
              }
      
      so if we initialize UDF_I_LENEXTENTS(inode) = 0 earlier in udf_new_inode,
      we won't try to free the (not) preallocated blocks, since this will match
      the i_size = 0 set when the inode was initialized.
      Signed-off-by: NEric Sandeen <sandeen@sandeen.net>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      225add61
    • C
      [PATCH] reiserfs_write_full_page() should not get_block past eof · b4c76fa7
      Chris Mason 提交于
      reiserfs_write_full_page does zero bytes in the file past eof, but it may
      call get_block on those buffers as well.  On machines where the page size
      is larger than the blocksize, this can result in mmaped files incorrectly
      growing up to a block boundary during writepage.
      
      The fix is to avoid calling get_block for any blocks that are entirely past
      eof
      Signed-off-by: NChris Mason <mason@suse.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      b4c76fa7
    • C
      [PATCH] fix reiserfs lock inversion of bkl vs inode semaphore · b5f3953c
      Chris Mason 提交于
      The correct lock ordering is inode lock -> BKL
      Signed-off-by: NChris Mason <mason@suse.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      b5f3953c
    • D
      [PATCH] Fix BeFS slab corruption · 94f563c4
      Diego Calleja 提交于
      In bugzilla #6941, Jens Kilian reported:
      
      "The function befs_utf2nls (in fs/befs/linuxvfs.c) writes a 0 byte past the
      end of a block of memory allocated via kmalloc(), leading to memory
      corruption.  This happens only for filenames which are pure ASCII and a
      multiple of 4 bytes in length.  [...]
      
      Without DEBUG_SLAB, this leads to further corruption and hard lockups; I
      believe this is the bug which has made kernels later than 2.6.8 unusable
      for me.  (This must be due to changes in memory management, the bug has
      been in the BeFS driver since the time it was introduced (AFAICT).)
      
      Steps to reproduce:
      Create a directory (in BeOS, naturally :-) with files named, e.g.,
      "1", "22", "333", "4444", ...  Mount it in Linux and do an "ls" or "find""
      
      This patch implements the suggested fix. Credits to Jens Kilian for
      debugging the problem and finding the right fix.
      Signed-off-by: NDiego Calleja <diegocg@gmail.com>
      Cc: Jens Kilian <jjk@acm.org>
      Cc: <stable@kernel.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      94f563c4