kernel-ark/fs/ocfs2
Tristan Ye 78f94673d7 Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead.
Truncate is just a special case of punching holes(from new i_size to
end), we therefore could take advantage of the existing
ocfs2_remove_btree_range() to reduce the comlexity and redundancy in
alloc.c.  The goal here is to make truncate more generic and
straightforward.

Several functions only used by ocfs2_commit_truncate() will smiply be
removed.

ocfs2_remove_btree_range() was originally used by the hole punching
code, which didn't take refcount trees into account (definitely a bug).
We therefore need to change that func a bit to handle refcount trees.
It must take the refcount lock, calculate and reserve blocks for
refcount tree changes, and decrease refcounts at the end.  We replace 
ocfs2_lock_allocators() here by adding a new func
ocfs2_reserve_blocks_for_rec_trunc() which accepts some extra blocks to
reserve.  This will not hurt any other code using
ocfs2_remove_btree_range() (such as dir truncate and hole punching).

I merged the following steps into one patch since they may be
logically doing one thing, though I know it looks a little bit fat
to review.

1). Remove redundant code used by ocfs2_commit_truncate(), since we're
    moving to ocfs2_remove_btree_range anyway.

2). Add a new func ocfs2_reserve_blocks_for_rec_trunc() for purpose of
    accepting some extra blocks to reserve.

3). Change ocfs2_prepare_refcount_change_for_del() a bit to fit our
    needs.  It's safe to do this since it's only being called by
    truncate.

4). Change ocfs2_remove_btree_range() a bit to take refcount case into
    account.

5). Finally, we change ocfs2_commit_truncate() to call
    ocfs2_remove_btree_range() in a proper way.

The patch has been tested normally for sanity check, stress tests
with heavier workload will be expected.

Based on this patch, fixing the punching holes bug will be fairly easy.

Signed-off-by: Tristan Ye <tristan.ye@oracle.com>
Acked-by: Mark Fasheh <mfasheh@suse.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
2010-05-18 12:25:10 -07:00
..
cluster o2net: log socket state changes 2010-05-05 18:18:08 -07:00
dlm ocfs2/dlm: Increase o2dlm lockres hash size 2010-05-05 18:20:01 -07:00
dlmfs ocfs2/userdlm: Add tracing in userdlm 2010-02-27 19:57:07 -08:00
acl.c ocfs2: set i_mode on disk during acl operations 2010-03-17 12:28:22 -07:00
acl.h ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00
alloc.c Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
alloc.h Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
aops.c ocfs2: use allocation reservations during file write 2010-05-05 18:17:30 -07:00
aops.h ocfs2: Add CoW support. 2009-09-22 20:09:36 -07:00
blockcheck.c tree-wide: fix typos "offest" -> "offset" 2009-12-04 15:39:50 +01:00
blockcheck.h
buffer_head_io.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
buffer_head_io.h
dcache.c
dcache.h
dir.c Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
dir.h
dlmglue.c Merge branch 'for-next' into for-linus 2010-03-08 16:55:37 +01:00
dlmglue.h ocfs2: Add new refcount tree lock resource in dlmglue. 2009-09-22 20:09:28 -07:00
export.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
export.h
extent_map.c Merge branch 'for-next' into for-linus 2010-03-08 16:55:37 +01:00
extent_map.h ocfs2: Return extent flags for xattr value tree. 2009-09-22 20:09:39 -07:00
file.c Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
file.h ocfs2: Integrate CoW in file write. 2009-09-22 20:09:37 -07:00
heartbeat.c
heartbeat.h
inode.c Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
inode.h ocfs2: use allocation reservations during file write 2010-05-05 18:17:30 -07:00
ioctl.c ocfs2: Use compat_ptr in reflink_arguments. 2010-02-02 18:56:37 -08:00
ioctl.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
journal.c ocfs2: Make ocfs2_extend_trans() really extend. 2010-05-05 18:18:09 -07:00
journal.h ocfs2: Make ocfs2_journal_dirty() void. 2010-05-05 18:17:29 -07:00
Kconfig ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00
localalloc.c ocfs2/trivial: Code cleanup for allocation reservation. 2010-05-05 18:18:09 -07:00
localalloc.h ocfs2: increase the default size of local alloc windows 2010-05-05 18:18:07 -07:00
locks.c [PATCH] Skip check for mandatory locks when unlocking 2010-03-17 12:07:16 -07:00
locks.h
Makefile ocfs2: allocation reservations 2010-05-05 18:17:30 -07:00
mmap.c ocfs2: Wrap signal blocking in void functions. 2010-05-10 11:50:10 -07:00
mmap.h
namei.c ocfs2: Block signals for mkdir/link/symlink/O_CREAT. 2010-05-10 11:56:52 -07:00
namei.h ocfs2: Create reflinked file in orphan dir. 2009-09-22 20:09:48 -07:00
ocfs1_fs_compat.h
ocfs2_fs.h ocfs2: increase the default size of local alloc windows 2010-05-05 18:18:07 -07:00
ocfs2_ioctl.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
ocfs2_lockid.h ocfs2: Add new refcount tree lock resource in dlmglue. 2009-09-22 20:09:28 -07:00
ocfs2_lockingver.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
ocfs2.h ocfs2: Add dir_resv_level mount option 2010-05-05 18:18:07 -07:00
quota_global.c ocfs2: Make ocfs2_journal_dirty() void. 2010-05-05 18:17:29 -07:00
quota_local.c ocfs2: Make ocfs2_journal_dirty() void. 2010-05-05 18:17:29 -07:00
quota.h quota: Move definition of QFMT_OCFS2 to linux/quota.h 2009-12-10 15:02:53 +01:00
refcounttree.c Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
refcounttree.h Ocfs2: Optimize ocfs2 truncate to use ocfs2_remove_btree_range() instead. 2010-05-18 12:25:10 -07:00
reservations.c ocfs2/trivial: Code cleanup for allocation reservation. 2010-05-05 18:18:09 -07:00
reservations.h ocfs2: make ocfs2_adjust_resv_from_alloc simple. 2010-05-05 18:18:09 -07:00
resize.c ocfs2: Make ocfs2_journal_dirty() void. 2010-05-05 18:17:29 -07:00
resize.h
slot_map.c
slot_map.h
stack_o2cb.c ocfs2: Hang the locking proto on the cluster conn and use it in asts. 2010-02-26 15:41:16 -08:00
stack_user.c ocfs2: Remove the ast pointers from ocfs2_stack_plugins 2010-02-26 15:41:16 -08:00
stackglue.c ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
stackglue.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
suballoc.c ocfs2: remove ocfs2_local_alloc_in_range() 2010-05-05 18:17:31 -07:00
suballoc.h ocfs2: allocation reservations 2010-05-05 18:17:30 -07:00
super.c ocfs2: Wrap signal blocking in void functions. 2010-05-10 11:50:10 -07:00
super.h ocfs2: Wrap signal blocking in void functions. 2010-05-10 11:50:10 -07:00
symlink.c ocfs2: Fix refcnt leak on ocfs2_fast_follow_link() error path 2010-01-11 15:38:50 -08:00
symlink.h
sysfile.c
sysfile.h
uptodate.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
uptodate.h
ver.c
ver.h
xattr.c ocfs2: Make ocfs2_extend_trans() really extend. 2010-05-05 18:18:09 -07:00
xattr.h ocfs2: Always include ACL support 2009-10-28 23:05:57 -07:00