linux/fs/ext4
Lukas Czerner d23142c627 ext4: make punch hole code path work with bigalloc
Currently punch hole is disabled in file systems with bigalloc
feature enabled. However the recent changes in punch hole patch should
make it easier to support punching holes on bigalloc enabled file
systems.

This commit changes partial_cluster handling in ext4_remove_blocks(),
ext4_ext_rm_leaf() and ext4_ext_remove_space(). Currently
partial_cluster is unsigned long long type and it makes sure that we
will free the partial cluster if all extents has been released from that
cluster. However it has been specifically designed only for truncate.

With punch hole we can be freeing just some extents in the cluster
leaving the rest untouched. So we have to make sure that we will notice
cluster which still has some extents. To do this I've changed
partial_cluster to be signed long long type. The only scenario where
this could be a problem is when cluster_size == block size, however in
that case there would not be any partial clusters so we're safe. For
bigger clusters the signed type is enough. Now we use the negative value
in partial_cluster to mark such cluster used, hence we know that we must
not free it even if all other extents has been freed from such cluster.

This scenario can be described in simple diagram:

|FFF...FF..FF.UUU|
 ^----------^
  punch hole

. - free space
| - cluster boundary
F - freed extent
U - used extent

Also update respective tracepoints to use signed long long type for
partial_cluster.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2013-05-27 23:33:35 -04:00
..
acl.c ext4: fix the number of credits needed for acl ops with inline data 2013-02-09 15:23:03 -05:00
acl.h fs: take the ACL checks to common code 2011-07-25 14:30:23 -04:00
balloc.c ext4: mark all metadata I/O with REQ_META 2013-04-20 15:46:17 -04:00
bitmap.c ext4: Checksum the block bitmap properly with bigalloc enabled 2012-10-22 00:34:32 -04:00
block_validity.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
dir.c ext4: fix readdir error in the case of inline_data+dir_index 2013-04-19 17:53:09 -04:00
ext4_extents.h ext4: mext_insert_extents should update extent block checksum 2013-04-19 14:04:12 -04:00
ext4_jbd2.c ext4: mark metadata blocks using bh flags 2013-04-21 16:45:54 -04:00
ext4_jbd2.h ext4: improve credit estimate for EXT4_SINGLEDATA_TRANS_BLOCKS 2013-04-09 12:39:26 -04:00
ext4.h ext4: remove unused discard_partial_page_buffers 2013-05-27 23:32:35 -04:00
extents_status.c ext4: fix fio regression 2013-05-03 02:15:52 -04:00
extents_status.h ext4: fix fio regression 2013-05-03 02:15:52 -04:00
extents.c ext4: make punch hole code path work with bigalloc 2013-05-27 23:33:35 -04:00
file.c Fixed regressions (two stability regressions and a performance 2013-05-14 09:30:54 -07:00
fsync.c ext4/jbd2: don't wait (forever) for stale tid caused by wraparound 2013-04-03 22:02:52 -04:00
hash.c ext4: reduce one "if" comparison in ext4_dirhash() 2013-02-01 22:33:21 -05:00
ialloc.c ext4: mark all metadata I/O with REQ_META 2013-04-20 15:46:17 -04:00
indirect.c aio: don't include aio.h in sched.h 2013-05-07 20:16:25 -07:00
inline.c ext4: fix readdir error in case inline_data+^dir_index. 2013-04-19 17:55:33 -04:00
inode.c ext4: remove unused discard_partial_page_buffers 2013-05-27 23:32:35 -04:00
ioctl.c ext4: fix usless declarations 2013-04-09 22:48:36 -04:00
Kconfig ext4: fix Kconfig documentation for CONFIG_EXT4_DEBUG 2013-04-21 20:32:03 -04:00
Makefile ext4: Remove CONFIG_EXT4_FS_XATTR 2012-12-10 16:30:43 -05:00
mballoc.c Fixed regressions (two stability regressions and a performance 2013-05-14 09:30:54 -07:00
mballoc.h ext4: use module parameters instead of debugfs for mballoc_debug 2013-02-09 16:28:20 -05:00
migrate.c ext4: do not convert to indirect with bigalloc enabled 2013-04-11 10:54:46 -04:00
mmp.c ext4: mark all metadata I/O with REQ_META 2013-04-20 15:46:17 -04:00
move_extent.c ext4: mext_insert_extents should update extent block checksum 2013-04-19 14:04:12 -04:00
namei.c ext4: fix readdir error in the case of inline_data+dir_index 2013-04-19 17:53:09 -04:00
page-io.c Fixed regressions (two stability regressions and a performance 2013-05-14 09:30:54 -07:00
resize.c ext4: add check for inodes_count overflow in new resize ioctl 2013-04-21 22:56:32 -04:00
super.c ext4: truncate_inode_pages() in orphan cleanup path 2013-05-27 23:32:35 -04:00
symlink.c ext4: Remove CONFIG_EXT4_FS_XATTR 2012-12-10 16:30:43 -05:00
truncate.h ext4: move common truncate functions to header file 2011-06-27 19:16:04 -04:00
xattr_security.c Merge branch 'for_linus' into for_linus_merged 2012-01-10 11:54:07 -05:00
xattr_trusted.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
xattr_user.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
xattr.c ext4: fix miscellaneous big endian warnings 2013-04-09 23:59:55 -04:00
xattr.h ext4: reserve xattr index for Rich ACL support 2013-04-18 14:53:15 -04:00