05 Jan, 2012
3 commits
-
This patch lets ext4_group_add() call ext4_flex_group_add().
Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
ext4_group_extend_no_check() is moved out from ext4_group_extend(),
this patch lets ext4_group_extend() call ext4_group_extentd_no_check()
instead.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch adds new online resize interface, whose input argument is a
64-bit integer indicating how many blocks there are in the resized fs.In new resize impelmentation, all work like allocating group tables
are done by kernel side, so the new resize interface can support
flex_bg feature and prepares ground for suppoting resize with features
like bigalloc and exclude bitmap. Besides these, user-space tools just
passes in the new number of blocks.We delay initializing the bitmaps and inode tables of added groups if
possible and add multi groups (a flex groups) each time, so new resize
is very fast like mkfs.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o"
04 Jan, 2012
9 commits
-
This patch adds a new function named ext4_flex_group_add() which adds a
flex group to a fs. The function is used by 64bit-resize interface.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch adds a new function named ext4_allocates_group_table()
which allocates block bitmaps, inode bitmaps and inode tables for a
flex groups and is used by resize code.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
The 64bit resizer adds a flex group each time, so verify_reserved_gdb
can not use s_groups_count directly, it should use the number of group
decriptors before the added group.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch adds a function named ext4_update_super() which updates
super block so the newly created block groups are visible to the file
system. This code is copied from ext4_group_add().The function will be used by new resize implementation.
Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch adds a function named ext4_setup_new_descs which sets up the
block group descriptors of a flex bg.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch adds a function named setup_new_flex_group_blocks() which
sets up group blocks of a flex bg.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch adds a structure which will be used by 64bit-resize interface.
Two functions which allocate and destroy the structure respectively are
added.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch adds a function named ext4_add_new_descs() which adds one
or more new group descriptors to a fs and whose code is copied from
ext4_group_add().The function will be used by new resize implementation.
Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch added a function named ext4_group_extend_no_check() whose code
is copied from ext4_group_extend(). ext4_group_extend_no_check() assumes
the parameter is valid and has been checked by caller.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o"
10 Sep, 2011
3 commits
-
The field bg_free_blocks_count_{lo,high} in the block group
descriptor has been repurposed to hold the number of free clusters for
bigalloc functions. So rename the functions so it makes it easier to
read and audit the block allocation and block freeing code.Note: at this point in bigalloc development we doesn't support
online resize, so this also makes it really obvious all of the places
we need to fix up to add support for online resize.Signed-off-by: "Theodore Ts'o"
-
Convert the free_blocks to be free_clusters to make the final revised
bigalloc changes easier to read/understand.Signed-off-by: "Theodore Ts'o"
-
Convert the percpu counters s_dirtyblocks_counter and
s_freeblocks_counter in struct ext4_super_info to be
s_dirtyclusters_counter and s_freeclusters_counter.Signed-off-by: "Theodore Ts'o"
01 Aug, 2011
1 commit
-
Signed-off-by: "Theodore Ts'o"
31 Jul, 2011
1 commit
-
We added some more error handling in b40971426a "ext4: add error
checking to calls to ext4_handle_dirty_metadata()". But we need to
call kfree() as well to avoid a memory leak.Signed-off-by: Dan Carpenter
Signed-off-by: "Theodore Ts'o"
28 Jul, 2011
3 commits
-
The reserve_backup_gdb() function only needs the block group number;
there's no need to pass a pointer to struct ext4_new_group_data to it.Signed-off-by: Yongqiang Yang
-
add_new_gdb() only needs the block group number; there is no need to
pass a pointer to struct ext4_new_group_data to add_new_gdb().
Instead of filling in a pointer the struct buffer_head in
add_new_gdb(), it's simpler to have the caller fetch it from the
s_group_desc[] array.[Fixed error path to handle the case where struct buffer_head *primary
hasn't been set yet. -- Ted]Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
There is no need to lock the buffers since no one else should be
touching these buffers besides the file system.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o"
27 Jul, 2011
7 commits
-
This patch simplifies journal handling in setup_new_group_blocks().
In previous code, block bitmap is modified everywhere in
setup_new_group_blocks(), ext4_get_write_access() in
extend_or_restart_transaction() is used to guarantee that the block
bitmap stays in the new handle, this makes things complicated.The previous commit changed things so that the modifications on the
block bitmap are batched and done by ext4_set_bits() at the end of the
for loop. This allows us to simplify things.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
Rename mb_set_bits() to ext4_set_bits() and make it a global function
so that setup_new_group_blocks() can use it.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
This patch lets ext4_group_add_blocks() return an error code if it
fails, so that upper functions can handle error correctly.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
A filesystem with errors is not allowed to being resized, otherwise,
it is easy to destroy the filesystem.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o" -
Before this patch, parallel resizers are allowed and protected by a
mutex lock, actually, there is no need to support parallel resizer, so
this patch prevents parallel resizers by atmoic bit ops, like
lock_page() and unlock_page() do.To do this, the patch removed the mutex lock s_resize_lock from struct
ext4_sb_info and added a unsigned long field named s_resize_flags
which inidicates if there is a resizer.Signed-off-by: Yongqiang Yang
Signed-off-by: "Theodore Ts'o"
21 Mar, 2011
1 commit
-
There are two wrapper functions which do exactly the same thing:
ext4_journal_release_buffer(), and ext4_handle_release_buffer(). In
addition, ext4_xattr_block_set() calls jbd2_journal_release_buffer()
directly.Unify all of the code to use ext4_handle_release_buffer(), and get rid
of ext4_journal_release_buffer().Signed-off-by: Amir Goldstein
Signed-off-by: "Theodore Ts'o"
22 Feb, 2011
1 commit
-
Compile 2.6.38-rc1 with turning EXT4FS_DEBUG on,
we get following compile warnings. This patch fixes them.CC fs/ext4/hash.o
CC fs/ext4/resize.o
fs/ext4/resize.c: In function 'setup_new_group_blocks':
fs/ext4/resize.c:233:2: warning: format '%#04llx' expects type 'long long
unsigned int', but argument 3 has type 'long unsigned int'
fs/ext4/resize.c:251:2: warning: format '%#04llx' expects type 'long long
unsigned int', but argument 3 has type 'long unsigned int'
CC fs/ext4/extents.o
CC fs/ext4/ext4_jbd2.o
CC fs/ext4/migrate.oReported-by: Akira Fujita
Signed-off-by: "Theodore Ts'o"
12 Jan, 2011
1 commit
-
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (44 commits)
ext4: fix trimming starting with block 0 with small blocksize
ext4: revert buggy trim overflow patch
ext4: don't pass entire map to check_eofblocks_fl
ext4: fix memory leak in ext4_free_branches
ext4: remove ext4_mb_return_to_preallocation()
ext4: flush the i_completed_io_list during ext4_truncate
ext4: add error checking to calls to ext4_handle_dirty_metadata()
ext4: fix trimming of a single group
ext4: fix uninitialized variable in ext4_register_li_request
ext4: dynamically allocate the jbd2_inode in ext4_inode_info as necessary
ext4: drop i_state_flags on architectures with 64-bit longs
ext4: reorder ext4_inode_info structure elements to remove unneeded padding
ext4: drop ec_type from the ext4_ext_cache structure
ext4: use ext4_lblk_t instead of sector_t for logical blocks
ext4: replace i_delalloc_reserved_flag with EXT4_STATE_DELALLOC_RESERVED
ext4: fix 32bit overflow in ext4_ext_find_goal()
ext4: add more error checks to ext4_mkdir()
ext4: ext4_ext_migrate should use NULL not 0
ext4: Use ext4_error_file() to print the pathname to the corrupted inode
ext4: use IS_ERR() to check for errors in ext4_error_file
...
11 Jan, 2011
1 commit
-
Call ext4_std_error() in various places when we can't bail out
cleanly, so the file system can be marked as in error.Signed-off-by: "Theodore Ts'o"
24 Dec, 2010
1 commit
-
https://bugzilla.kernel.org/show_bug.cgi?id=25352
This regression was caused by commit a31437b85: "ext4: use
sb_issue_zeroout in setup_new_group_blocks", by accidentally dropping
the code which reserved the block group descriptor and inode table
blocks.Signed-off-by: "Theodore Ts'o"
28 Oct, 2010
3 commits
-
Conflicts:
fs/ext4/inode.c
fs/ext4/mballoc.c
include/trace/events/ext4.h -
Fix a namespace leak from fs/ext4
Signed-off-by: "Theodore Ts'o"
-
Use sb_issue_zeroout to zero out inode table and descriptor table
blocks instead of old approach which involves journaling.Signed-off-by: Lukas Czerner
Signed-off-by: "Theodore Ts'o"
15 Jun, 2010
1 commit
-
No real bugs found, just removed some dead code.
Found by gcc 4.6's new warnings.
Signed-off-by: Andi Kleen
Signed-off-by: "Theodore Ts'o"
12 Jun, 2010
1 commit
-
We don't need to set s_dirt in most of the ext4 code when journaling
is enabled. In ext3/4 some of the summary statistics for # of free
inodes, blocks, and directories are calculated from the per-block
group statistics when the file system is mounted or unmounted. As a
result the superblock doesn't have to be updated, either via the
journal or by setting s_dirt. There are a few exceptions, most
notably when resizing the file system, where the superblock needs to
be modified --- and in that case it should be done as a journalled
operation if possible, and s_dirt set only in no-journal mode.This patch will optimize out some unneeded disk writes when using ext4
with a journal.Signed-off-by: "Theodore Ts'o"
16 May, 2010
1 commit
-
If groups_per_flex < 2, sbi->s_flex_groups[] doesn't get filled out,
and every other access to this first tests s_log_groups_per_flex;
same thing needs to happen in resize or we'll wander off into
a null pointer when doing an online resize of the file system.Thanks to Christoph Biedl, who came up with the trivial testcase:
# truncate --size 128M fsfile
# mkfs.ext3 -F fsfile
# tune2fs -O extents,uninit_bg,dir_index,flex_bg,huge_file,dir_nlink,extra_isize fsfile
# e2fsck -yDf -C0 fsfile
# truncate --size 132M fsfile
# losetup /dev/loop0 fsfile
# mount /dev/loop0 mnt
# resize2fs -p /dev/loop0https://bugzilla.kernel.org/show_bug.cgi?id=13549
Reported-by: Alessandro Polverini
Test-case-by: Christoph Biedl
Signed-off-by: Eric Sandeen
Signed-off-by: "Theodore Ts'o"
16 Feb, 2010
1 commit
-
Just a pet peeve of mine; we had a mishash of calls with either __func__
or "function_name" and the latter tends to get out of sync.I think it's easier to just hide the __func__ in a macro, and it'll
be consistent from then on.Signed-off-by: Eric Sandeen
Signed-off-by: "Theodore Ts'o"
07 Dec, 2009
1 commit
-
Signed-off-by: Roel Kluin
Signed-off-by: "Theodore Ts'o"