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
					
				
			
		
					 5 changed files with 24 additions and 19 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Goldwyn Rodrigues
				Goldwyn Rodrigues