This project is mirrored from Pull mirroring updated .
  1. 18 Aug, 2009 2 commits
    • Jan Kara's avatar
      ext4: Fix possible deadlock between ext4_truncate() and ext4_get_blocks() · 487caeef
      Jan Kara authored
      During truncate we are sometimes forced to start a new transaction as
      the amount of blocks to be journaled is both quite large and hard to
      predict. So far we restarted a transaction while holding i_data_sem
      and that violates lock ordering because i_data_sem ranks below a
      transaction start (and it can lead to a real deadlock with
      ext4_get_blocks() mapping blocks in some page while having a
      transaction open).
      We fix the problem by dropping the i_data_sem before restarting the
      transaction and acquire it afterwards. It's slightly subtle that this
      1) By the time ext4_truncate() is called, all the page cache for the
      truncated part of the file is dropped so get_block() should not be
      called on it (we only have to invalidate extent cache after we
      reacquire i_data_sem because some extent from not-truncated part could
      extend also into the part we are going to truncate).
      2) Writes, migrate or defrag hold i_mutex so they are stopped for all
      the time of the truncate.
      This bug has been found and analyzed by Theodore Tso <>.
      Signed-off-by: default avatarJan Kara <>
      Signed-off-by: default avatar"Theodore Ts'o" <>
    • Jan Kara's avatar
      jbd2: Annotate transaction start also for jbd2_journal_restart() · 9599b0e5
      Jan Kara authored
      lockdep annotation for a transaction start has been at the end of
      jbd2_journal_start(). But a transaction is also started from
      jbd2_journal_restart(). Move the lockdep annotation to start_this_handle()
      which covers both cases.
      Signed-off-by: default avatarJan Kara <>
      Signed-off-by: default avatar"Theodore Ts'o" <>
  2. 18 Sep, 2009 1 commit
  3. 01 Sep, 2009 1 commit
    • Mingming's avatar
      ext4: Compile warning fix when EXT_DEBUG enabled · 84fe3bef
      Mingming authored
      When EXT_DEBUG is enabled I received the following compile warning on
        CC [M]  fs/ext4/inode.o
        CC [M]  fs/ext4/extents.o
      fs/ext4/extents.c: In function ‘ext4_ext_rm_leaf’:
      fs/ext4/extents.c:2097: warning: format ‘%lu’ expects type ‘long unsigned int’, but argument 2 has type ‘ext4_lblk_t’
      fs/ext4/extents.c: In function ‘ext4_ext_get_blocks’:
      fs/ext4/extents.c:2789: warning: format ‘%u’ expects type ‘unsigned int’, but argument 4 has type ‘long unsigned int’
      fs/ext4/extents.c:2852: warning: format ‘%lu’ expects type ‘long unsigned int’, but argument 3 has type ‘ext4_lblk_t’
      fs/ext4/extents.c:2953: warning: format ‘%lu’ expects type ‘long unsigned int’, but argument 4 has type ‘unsigned int’
        CC [M]  fs/ext4/migrate.o
      The patch fixes compile warning.
      Signed-off-by: default avatarMingming Cao <>
      Signed-off-by: default avatar"Theodore Ts'o" <>
      Index: linux-2.6.31-rc4/fs/ext4/extents.c
  4. 18 Sep, 2009 1 commit
    • Theodore Ts'o's avatar
      ext4: Avoid group preallocation for closed files · 50797481
      Theodore Ts'o authored
      Currently the group preallocation code tries to find a large (512)
      free block from which to do per-cpu group allocation for small files.
      The problem with this scheme is that it leaves the filesystem horribly
      fragmented.  In the worst case, if the filesystem is unmounted and
      remounted (after a system shutdown, for example) we forget the fact
      that wee were using a particular (now-partially filled) 512 block
      extent.  So the next time we try to allocate space for a small file,
      we will find *another* completely free 512 block chunk to allocate
      small files.  Given that there are 32,768 blocks in a block group,
      after 64 iterations of "mount, write one 4k file in a directory,
      unmount", the block group will have 64 files, each separated by 511
      blocks, and the block group will no longer have any free 512
      completely free chunks of blocks for group preallocation space.
      So if we try to allocate blocks for a file that has been closed, such
      that we know the final size of the file, and the filesystem is not
      busy, avoid using group preallocation.
      Signed-off-by: default avatar"Theodore Ts'o" <>
  5. 10 Aug, 2009 1 commit
    • Theodore Ts'o's avatar
      ext4: Fix bugs in mballoc's stream allocation mode · 4ba74d00
      Theodore Ts'o authored
      The logic around sbi->s_mb_last_group and sbi->s_mb_last_start was all
      screwed up.  These fields were getting unconditionally all the time,
      set even when stream allocation had not taken place, and if they were
      being used when the file was smaller than s_mb_stream_request, which
      is when the allocation should _not_ be doing stream allocation.
      Fix this by determining whether or not we stream allocation should
      take place once, in ext4_mb_group_or_file(), and setting a flag which
      gets used in ext4_mb_regular_allocator() and ext4_mb_use_best_found().
      This simplifies the code and assures that we are consistently using
      (or not using) the stream allocation logic.
      Signed-off-by: default avatar"Theodore Ts'o" <>
  6. 09 Aug, 2009 1 commit
  7. 18 Sep, 2009 1 commit
  8. 11 Aug, 2009 3 commits
  9. 28 Jul, 2009 1 commit
  10. 06 Jul, 2009 2 commits
  11. 17 Jul, 2009 2 commits
    • Curt Wohlgemuth's avatar
      ext4: More buffer head reference leaks · 6487a9d3
      Curt Wohlgemuth authored
      After the patch I posted last week regarding buffer head ref leaks in
      no-journal mode, I looked at all the code that uses buffer heads and
      searched for more potential leaks.
      The patch below fixes the issues I found; these can occur even when a
      journal is present.
      The change to inode.c fixes a double release if
      ext4_journal_get_create_access() fails.
      The changes to namei.c are more complicated.  add_dirent_to_buf() will
      release the input buffer head EXCEPT when it returns -ENOSPC.  There are
      some callers of this routine that don't always do the brelse() in the event
      that -ENOSPC is returned.  Unfortunately, to put this fix into ext4_add_entry()
      required capturing the return value of make_indexed_dir() and
      Signed-off-by: default avatarCurt Wohlgemuth <>
      Signed-off-by: default avatar"Theodore Ts'o" <>
    • Jan Kara's avatar
      jbd2: Fail to load a journal if it is too short · f6f50e28
      Jan Kara authored
      Due to on disk corruption, it can happen that journal is too short. Fail
      to load it in such case so that we don't oops somewhere later.
      Signed-off-by: default avatarJan Kara <>
      Signed-off-by: default avatar"Theodore Ts'o" <>
  12. 28 Jul, 2009 2 commits
  13. 17 Jul, 2009 1 commit
  14. 16 Sep, 2009 21 commits