diff options
author | Lukas Czerner <lczerner@redhat.com> | 2010-10-27 21:30:12 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2010-10-27 21:30:12 -0400 |
commit | 7360d1731e5dc78aec867e65e55f9fb58782b5fe (patch) | |
tree | 2cc0d139ec129c19150ef481d6adb9b0fd947c89 /fs/ext4/ext4.h | |
parent | 367a51a339020ba4d9edb0ce0f21d65bd50b00c9 (diff) |
ext4: Add batched discard support for ext4
Walk through allocation groups and trim all free extents. It can be
invoked through FITRIM ioctl on the file system. The main idea is to
provide a way to trim the whole file system if needed, since some SSD's
may suffer from performance loss after the whole device was filled (it
does not mean that fs is full!).
It search for free extents in allocation groups specified by Byte range
start -> start+len. When the free extent is within this range, blocks
are marked as used and then trimmed. Afterwards these blocks are marked
as free in per-group bitmap.
Since fstrim is a long operation it is good to have an ability to
interrupt it by a signal. This was added by Dmitry Monakhov.
Thanks Dimitry.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/ext4.h')
-rw-r--r-- | fs/ext4/ext4.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index ca9fda64dd4f..98dde2b7dd6f 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -1694,6 +1694,8 @@ extern int ext4_mb_add_groupinfo(struct super_block *sb, | |||
1694 | extern int ext4_mb_get_buddy_cache_lock(struct super_block *, ext4_group_t); | 1694 | extern int ext4_mb_get_buddy_cache_lock(struct super_block *, ext4_group_t); |
1695 | extern void ext4_mb_put_buddy_cache_lock(struct super_block *, | 1695 | extern void ext4_mb_put_buddy_cache_lock(struct super_block *, |
1696 | ext4_group_t, int); | 1696 | ext4_group_t, int); |
1697 | extern int ext4_trim_fs(struct super_block *, struct fstrim_range *); | ||
1698 | |||
1697 | /* inode.c */ | 1699 | /* inode.c */ |
1698 | struct buffer_head *ext4_getblk(handle_t *, struct inode *, | 1700 | struct buffer_head *ext4_getblk(handle_t *, struct inode *, |
1699 | ext4_lblk_t, int, int *); | 1701 | ext4_lblk_t, int, int *); |