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>
This commit is contained in:
parent
95fa859a26
commit
83fd9c7f65
|
@ -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
|
||||||
/* 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 {
|
||||||
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);
|
||||||
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 {
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue