Skip to content
Snippets Groups Projects
Commit 83fd9c7f authored by Goldwyn Rodrigues's avatar Goldwyn Rodrigues Committed by Joel Becker
Browse files

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: default avatarGoldwyn Rodrigues <rgoldwyn@suse.de>
Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
parent 95fa859a
No related merge requests found
...@@ -883,8 +883,8 @@ struct ocfs2_write_ctxt { ...@@ -883,8 +883,8 @@ struct ocfs2_write_ctxt {
* out in so that future reads from that region will get * out in so that future reads from that region will get
* zero's. * zero's.
*/ */
struct page *w_pages[OCFS2_MAX_CTXT_PAGES];
unsigned int w_num_pages; unsigned int w_num_pages;
struct page *w_pages[OCFS2_MAX_CTXT_PAGES];
struct page *w_target_page; struct page *w_target_page;
/* /*
......
...@@ -46,27 +46,24 @@ struct ocfs2_inode_info ...@@ -46,27 +46,24 @@ struct ocfs2_inode_info
/* These fields are protected by ip_lock */ /* These fields are protected by ip_lock */
spinlock_t ip_lock; spinlock_t ip_lock;
u32 ip_open_count; u32 ip_open_count;
u32 ip_clusters;
struct list_head ip_io_markers; struct list_head ip_io_markers;
u32 ip_clusters;
u16 ip_dyn_features;
struct mutex ip_io_mutex; struct mutex ip_io_mutex;
u32 ip_flags; /* see below */ u32 ip_flags; /* see below */
u32 ip_attr; /* inode attributes */ u32 ip_attr; /* inode attributes */
u16 ip_dyn_features;
/* protected by recovery_lock. */ /* protected by recovery_lock. */
struct inode *ip_next_orphan; struct inode *ip_next_orphan;
u32 ip_dir_start_lookup;
struct ocfs2_caching_info ip_metadata_cache; struct ocfs2_caching_info ip_metadata_cache;
struct ocfs2_extent_map ip_extent_map; struct ocfs2_extent_map ip_extent_map;
struct inode vfs_inode; struct inode vfs_inode;
struct jbd2_inode ip_jinode; struct jbd2_inode ip_jinode;
u32 ip_dir_start_lookup;
/* Only valid if the inode is the dir. */ /* Only valid if the inode is the dir. */
u32 ip_last_used_slot; u32 ip_last_used_slot;
u64 ip_last_used_group; u64 ip_last_used_group;
......
...@@ -67,11 +67,12 @@ struct ocfs2_journal { ...@@ -67,11 +67,12 @@ struct ocfs2_journal {
struct buffer_head *j_bh; /* Journal disk inode block */ struct buffer_head *j_bh; /* Journal disk inode block */
atomic_t j_num_trans; /* Number of transactions atomic_t j_num_trans; /* Number of transactions
* currently in the system. */ * currently in the system. */
spinlock_t j_lock;
unsigned long j_trans_id; unsigned long j_trans_id;
struct rw_semaphore j_trans_barrier; struct rw_semaphore j_trans_barrier;
wait_queue_head_t j_checkpointed; wait_queue_head_t j_checkpointed;
spinlock_t j_lock; /* both fields protected by j_lock*/
struct list_head j_la_cleanups; struct list_head j_la_cleanups;
struct work_struct j_recovery_work; struct work_struct j_recovery_work;
}; };
......
...@@ -150,26 +150,33 @@ typedef void (*ocfs2_lock_callback)(int status, unsigned long data); ...@@ -150,26 +150,33 @@ typedef void (*ocfs2_lock_callback)(int status, unsigned long data);
struct ocfs2_lock_res { struct ocfs2_lock_res {
void *l_priv; void *l_priv;
struct ocfs2_lock_res_ops *l_ops; struct ocfs2_lock_res_ops *l_ops;
spinlock_t l_lock;
struct list_head l_blocked_list; struct list_head l_blocked_list;
struct list_head l_mask_waiters; struct list_head l_mask_waiters;
enum ocfs2_lock_type l_type;
unsigned long l_flags; unsigned long l_flags;
char l_name[OCFS2_LOCK_ID_MAX_LEN]; char l_name[OCFS2_LOCK_ID_MAX_LEN];
int l_level;
unsigned int l_ro_holders; unsigned int l_ro_holders;
unsigned int l_ex_holders; unsigned int l_ex_holders;
struct ocfs2_dlm_lksb l_lksb; unsigned char l_level;
/* Data packed - type enum ocfs2_lock_type */
unsigned char l_type;
/* used from AST/BAST funcs. */ /* used from AST/BAST funcs. */
enum ocfs2_ast_action l_action; /* Data packed - enum type ocfs2_ast_action */
enum ocfs2_unlock_action l_unlock_action; unsigned char l_action;
int l_requested; /* Data packed - enum type ocfs2_unlock_action */
int l_blocking; unsigned char l_unlock_action;
unsigned char l_requested;
unsigned char l_blocking;
unsigned int l_pending_gen; unsigned int l_pending_gen;
spinlock_t l_lock;
struct ocfs2_dlm_lksb l_lksb;
wait_queue_head_t l_event; wait_queue_head_t l_event;
struct list_head l_debug_list; struct list_head l_debug_list;
......
...@@ -21,14 +21,14 @@ struct ocfs2_refcount_tree { ...@@ -21,14 +21,14 @@ struct ocfs2_refcount_tree {
struct rb_node rf_node; struct rb_node rf_node;
u64 rf_blkno; u64 rf_blkno;
u32 rf_generation; u32 rf_generation;
struct kref rf_getcnt;
struct rw_semaphore rf_sem; struct rw_semaphore rf_sem;
struct ocfs2_lock_res rf_lockres; struct ocfs2_lock_res rf_lockres;
struct kref rf_getcnt;
int rf_removed; int rf_removed;
/* the following 4 fields are used by caching_info. */ /* the following 4 fields are used by caching_info. */
struct ocfs2_caching_info rf_ci;
spinlock_t rf_lock; spinlock_t rf_lock;
struct ocfs2_caching_info rf_ci;
struct mutex rf_io_mutex; struct mutex rf_io_mutex;
struct super_block *rf_sb; struct super_block *rf_sb;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment