aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/alloc.h
diff options
context:
space:
mode:
authorMark Fasheh <mark.fasheh@oracle.com>2007-06-22 18:45:27 -0400
committerMark Fasheh <mark.fasheh@oracle.com>2007-07-10 20:31:54 -0400
commit2b604351bc99b4e4504758cbac369b660b71de0b (patch)
tree293fa51f1ae9d19db0d09c721cc8433303cc8974 /fs/ocfs2/alloc.h
parentbce997682fe3121516f5a20cf7bad2e6029ba018 (diff)
ocfs2: simplify deallocation locking
Deallocation of suballocator blocks, most notably extent blocks, might involve multiple suballocator inodes. The locking for this can get extremely complicated, especially when the suballocator inodes to delete from aren't known until deep within an unrelated codepath. Implement a simple scheme for recording the blocks to be unlinked so that the actual deallocation can be done in a context which won't deadlock. Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/alloc.h')
-rw-r--r--fs/ocfs2/alloc.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/fs/ocfs2/alloc.h b/fs/ocfs2/alloc.h
index fbcb5934a081..01db0adc2150 100644
--- a/fs/ocfs2/alloc.h
+++ b/fs/ocfs2/alloc.h
@@ -63,6 +63,25 @@ int ocfs2_begin_truncate_log_recovery(struct ocfs2_super *osb,
63int ocfs2_complete_truncate_log_recovery(struct ocfs2_super *osb, 63int ocfs2_complete_truncate_log_recovery(struct ocfs2_super *osb,
64 struct ocfs2_dinode *tl_copy); 64 struct ocfs2_dinode *tl_copy);
65 65
66/*
67 * Process local structure which describes the block unlinks done
68 * during an operation. This is populated via
69 * ocfs2_cache_block_dealloc().
70 *
71 * ocfs2_run_deallocs() should be called after the potentially
72 * de-allocating routines. No journal handles should be open, and most
73 * locks should have been dropped.
74 */
75struct ocfs2_cached_dealloc_ctxt {
76 struct ocfs2_per_slot_free_list *c_first_suballocator;
77};
78static inline void ocfs2_init_dealloc_ctxt(struct ocfs2_cached_dealloc_ctxt *c)
79{
80 c->c_first_suballocator = NULL;
81}
82int ocfs2_run_deallocs(struct ocfs2_super *osb,
83 struct ocfs2_cached_dealloc_ctxt *ctxt);
84
66struct ocfs2_truncate_context { 85struct ocfs2_truncate_context {
67 struct inode *tc_ext_alloc_inode; 86 struct inode *tc_ext_alloc_inode;
68 struct buffer_head *tc_ext_alloc_bh; 87 struct buffer_head *tc_ext_alloc_bh;