diff options
| author | Goldwyn Rodrigues <rgoldwyn@gmail.com> | 2010-06-10 18:21:36 -0400 |
|---|---|---|
| committer | Joel Becker <joel.becker@oracle.com> | 2010-09-10 11:39:27 -0400 |
| commit | 83fd9c7f65634ac440a6b9b7a63ba562f213ac60 (patch) | |
| tree | 2b1656fbf0bfbff76b9d9d062546f33a7b3236b1 | |
| parent | 95fa859a268fd7d9bae6f2d4d095e3f61100ac1b (diff) | |
Reorganize data elements to reduce struct sizes
Thanks for the comments. I have incorportated them all.
CONFIG_OCFS2_FS_STATS is enabled and CONFIG_DEBUG_LOCK_ALLOC is disabled.
Statistics now look like -
ocfs2_write_ctxt: 2144 - 2136 = 8
ocfs2_inode_info: 1960 - 1848 = 112
ocfs2_journal: 168 - 160 = 8
ocfs2_lock_res: 336 - 304 = 32
ocfs2_refcount_tree: 512 - 472 = 40
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.de>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
| -rw-r--r-- | fs/ocfs2/aops.c | 2 | ||||
| -rw-r--r-- | fs/ocfs2/inode.h | 11 | ||||
| -rw-r--r-- | fs/ocfs2/journal.h | 3 | ||||
| -rw-r--r-- | fs/ocfs2/ocfs2.h | 23 | ||||
| -rw-r--r-- | fs/ocfs2/refcounttree.h | 4 |
5 files changed, 24 insertions, 19 deletions
diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index 0de69c9a08b..f477f18b35d 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c | |||
| @@ -883,8 +883,8 @@ struct ocfs2_write_ctxt { | |||
| 883 | * out in so that future reads from that region will get | 883 | * out in so that future reads from that region will get |
| 884 | * zero's. | 884 | * zero's. |
| 885 | */ | 885 | */ |
| 886 | struct page *w_pages[OCFS2_MAX_CTXT_PAGES]; | ||
| 887 | unsigned int w_num_pages; | 886 | unsigned int w_num_pages; |
| 887 | struct page *w_pages[OCFS2_MAX_CTXT_PAGES]; | ||
| 888 | struct page *w_target_page; | 888 | struct page *w_target_page; |
| 889 | 889 | ||
| 890 | /* | 890 | /* |
diff --git a/fs/ocfs2/inode.h b/fs/ocfs2/inode.h index 6de5a869db3..0bc477a3aeb 100644 --- a/fs/ocfs2/inode.h +++ b/fs/ocfs2/inode.h | |||
| @@ -46,27 +46,24 @@ struct ocfs2_inode_info | |||
| 46 | /* These fields are protected by ip_lock */ | 46 | /* These fields are protected by ip_lock */ |
| 47 | spinlock_t ip_lock; | 47 | spinlock_t ip_lock; |
| 48 | u32 ip_open_count; | 48 | u32 ip_open_count; |
| 49 | u32 ip_clusters; | ||
| 50 | struct list_head ip_io_markers; | 49 | struct list_head ip_io_markers; |
| 50 | u32 ip_clusters; | ||
| 51 | 51 | ||
| 52 | u16 ip_dyn_features; | ||
| 52 | struct mutex ip_io_mutex; | 53 | struct mutex ip_io_mutex; |
| 53 | |||
| 54 | u32 ip_flags; /* see below */ | 54 | u32 ip_flags; /* see below */ |
| 55 | u32 ip_attr; /* inode attributes */ | 55 | u32 ip_attr; /* inode attributes */ |
| 56 | u16 ip_dyn_features; | ||
| 57 | 56 | ||
| 58 | /* protected by recovery_lock. */ | 57 | /* protected by recovery_lock. */ |
| 59 | struct inode *ip_next_orphan; | 58 | struct inode *ip_next_orphan; |
| 60 | 59 | ||
| 61 | u32 ip_dir_start_lookup; | ||
| 62 | |||
| 63 | struct ocfs2_caching_info ip_metadata_cache; | 60 | struct ocfs2_caching_info ip_metadata_cache; |
| 64 | |||
| 65 | struct ocfs2_extent_map ip_extent_map; | 61 | struct ocfs2_extent_map ip_extent_map; |
| 66 | |||
| 67 | struct inode vfs_inode; | 62 | struct inode vfs_inode; |
| 68 | struct jbd2_inode ip_jinode; | 63 | struct jbd2_inode ip_jinode; |
| 69 | 64 | ||
| 65 | u32 ip_dir_start_lookup; | ||
| 66 | |||
| 70 | /* Only valid if the inode is the dir. */ | 67 | /* Only valid if the inode is the dir. */ |
| 71 | u32 ip_last_used_slot; | 68 | u32 ip_last_used_slot; |
| 72 | u64 ip_last_used_group; | 69 | u64 ip_last_used_group; |
diff --git a/fs/ocfs2/journal.h b/fs/ocfs2/journal.h index b5baaa8e710..43e56b97f9c 100644 --- a/fs/ocfs2/journal.h +++ b/fs/ocfs2/journal.h | |||
| @@ -67,11 +67,12 @@ struct ocfs2_journal { | |||
| 67 | struct buffer_head *j_bh; /* Journal disk inode block */ | 67 | struct buffer_head *j_bh; /* Journal disk inode block */ |
| 68 | atomic_t j_num_trans; /* Number of transactions | 68 | atomic_t j_num_trans; /* Number of transactions |
| 69 | * currently in the system. */ | 69 | * currently in the system. */ |
| 70 | spinlock_t j_lock; | ||
| 70 | unsigned long j_trans_id; | 71 | unsigned long j_trans_id; |
| 71 | struct rw_semaphore j_trans_barrier; | 72 | struct rw_semaphore j_trans_barrier; |
| 72 | wait_queue_head_t j_checkpointed; | 73 | wait_queue_head_t j_checkpointed; |
| 73 | 74 | ||
| 74 | spinlock_t j_lock; | 75 | /* both fields protected by j_lock*/ |
| 75 | struct list_head j_la_cleanups; | 76 | struct list_head j_la_cleanups; |
| 76 | struct work_struct j_recovery_work; | 77 | struct work_struct j_recovery_work; |
| 77 | }; | 78 | }; |
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h index c67003b6b5a..65739b3b327 100644 --- a/fs/ocfs2/ocfs2.h +++ b/fs/ocfs2/ocfs2.h | |||
| @@ -150,26 +150,33 @@ typedef void (*ocfs2_lock_callback)(int status, unsigned long data); | |||
| 150 | struct ocfs2_lock_res { | 150 | struct ocfs2_lock_res { |
| 151 | void *l_priv; | 151 | void *l_priv; |
| 152 | struct ocfs2_lock_res_ops *l_ops; | 152 | struct ocfs2_lock_res_ops *l_ops; |
| 153 | spinlock_t l_lock; | 153 | |
| 154 | 154 | ||
| 155 | struct list_head l_blocked_list; | 155 | struct list_head l_blocked_list; |
| 156 | struct list_head l_mask_waiters; | 156 | struct list_head l_mask_waiters; |
| 157 | 157 | ||
| 158 | enum ocfs2_lock_type l_type; | ||
| 159 | unsigned long l_flags; | 158 | unsigned long l_flags; |
| 160 | char l_name[OCFS2_LOCK_ID_MAX_LEN]; | 159 | char l_name[OCFS2_LOCK_ID_MAX_LEN]; |
| 161 | int l_level; | ||
| 162 | unsigned int l_ro_holders; | 160 | unsigned int l_ro_holders; |
| 163 | unsigned int l_ex_holders; | 161 | unsigned int l_ex_holders; |
| 164 | struct ocfs2_dlm_lksb l_lksb; | 162 | unsigned char l_level; |
| 163 | |||
| 164 | /* Data packed - type enum ocfs2_lock_type */ | ||
| 165 | unsigned char l_type; | ||
| 165 | 166 | ||
| 166 | /* used from AST/BAST funcs. */ | 167 | /* used from AST/BAST funcs. */ |
| 167 | enum ocfs2_ast_action l_action; | 168 | /* Data packed - enum type ocfs2_ast_action */ |
| 168 | enum ocfs2_unlock_action l_unlock_action; | 169 | unsigned char l_action; |
| 169 | int l_requested; | 170 | /* Data packed - enum type ocfs2_unlock_action */ |
| 170 | int l_blocking; | 171 | unsigned char l_unlock_action; |
| 172 | unsigned char l_requested; | ||
| 173 | unsigned char l_blocking; | ||
| 171 | unsigned int l_pending_gen; | 174 | unsigned int l_pending_gen; |
| 172 | 175 | ||
| 176 | spinlock_t l_lock; | ||
| 177 | |||
| 178 | struct ocfs2_dlm_lksb l_lksb; | ||
| 179 | |||
| 173 | wait_queue_head_t l_event; | 180 | wait_queue_head_t l_event; |
| 174 | 181 | ||
| 175 | struct list_head l_debug_list; | 182 | struct list_head l_debug_list; |
diff --git a/fs/ocfs2/refcounttree.h b/fs/ocfs2/refcounttree.h index 9983ba1570e..f04892d6175 100644 --- a/fs/ocfs2/refcounttree.h +++ b/fs/ocfs2/refcounttree.h | |||
| @@ -21,14 +21,14 @@ struct ocfs2_refcount_tree { | |||
| 21 | struct rb_node rf_node; | 21 | struct rb_node rf_node; |
| 22 | u64 rf_blkno; | 22 | u64 rf_blkno; |
| 23 | u32 rf_generation; | 23 | u32 rf_generation; |
| 24 | struct kref rf_getcnt; | ||
| 24 | struct rw_semaphore rf_sem; | 25 | struct rw_semaphore rf_sem; |
| 25 | struct ocfs2_lock_res rf_lockres; | 26 | struct ocfs2_lock_res rf_lockres; |
| 26 | struct kref rf_getcnt; | ||
| 27 | int rf_removed; | 27 | int rf_removed; |
| 28 | 28 | ||
| 29 | /* the following 4 fields are used by caching_info. */ | 29 | /* the following 4 fields are used by caching_info. */ |
| 30 | struct ocfs2_caching_info rf_ci; | ||
| 31 | spinlock_t rf_lock; | 30 | spinlock_t rf_lock; |
| 31 | struct ocfs2_caching_info rf_ci; | ||
| 32 | struct mutex rf_io_mutex; | 32 | struct mutex rf_io_mutex; |
| 33 | struct super_block *rf_sb; | 33 | struct super_block *rf_sb; |
| 34 | }; | 34 | }; |
