浏览代码

ocfs2: move ip_last_trans to struct ocfs2_caching_info

We have the read side of metadata caching isolated to struct
ocfs2_caching_info, now we need the write side.  This means the journal
functions.  The journal only does a couple of things with struct inode.

This change moves the ip_last_trans field onto struct
ocfs2_caching_info as ci_last_trans.  This field tells the journal
whether a pending journal flush is required.

Signed-off-by: Joel Becker <joel.becker@oracle.com>
Joel Becker 16 年之前
父节点
当前提交
66fb345ddd
共有 7 个文件被更改,包括 28 次插入10 次删除
  1. 1 2
      fs/ocfs2/inode.c
  2. 0 2
      fs/ocfs2/inode.h
  3. 3 2
      fs/ocfs2/journal.h
  4. 4 0
      fs/ocfs2/ocfs2.h
  5. 0 1
      fs/ocfs2/super.c
  6. 19 3
      fs/ocfs2/uptodate.c
  7. 1 0
      fs/ocfs2/uptodate.h

+ 1 - 2
fs/ocfs2/inode.c

@@ -1112,7 +1112,7 @@ void ocfs2_clear_inode(struct inode *inode)
 	ocfs2_lock_res_free(&oi->ip_inode_lockres);
 	ocfs2_lock_res_free(&oi->ip_inode_lockres);
 	ocfs2_lock_res_free(&oi->ip_open_lockres);
 	ocfs2_lock_res_free(&oi->ip_open_lockres);
 
 
-	ocfs2_metadata_cache_purge(INODE_CACHE(inode));
+	ocfs2_metadata_cache_exit(INODE_CACHE(inode));
 
 
 	mlog_bug_on_msg(INODE_CACHE(inode)->ci_num_cached,
 	mlog_bug_on_msg(INODE_CACHE(inode)->ci_num_cached,
 			"Clear inode of %llu, inode has %u cache items\n",
 			"Clear inode of %llu, inode has %u cache items\n",
@@ -1148,7 +1148,6 @@ void ocfs2_clear_inode(struct inode *inode)
 	/* Clear all other flags. */
 	/* Clear all other flags. */
 	oi->ip_flags = 0;
 	oi->ip_flags = 0;
 	oi->ip_created_trans = 0;
 	oi->ip_created_trans = 0;
-	oi->ip_last_trans = 0;
 	oi->ip_dir_start_lookup = 0;
 	oi->ip_dir_start_lookup = 0;
 	oi->ip_blkno = 0ULL;
 	oi->ip_blkno = 0ULL;
 
 

+ 0 - 2
fs/ocfs2/inode.h

@@ -63,8 +63,6 @@ struct ocfs2_inode_info
 	/* next two are protected by trans_inc_lock */
 	/* next two are protected by trans_inc_lock */
 	/* which transaction were we created on? Zero if none. */
 	/* which transaction were we created on? Zero if none. */
 	unsigned long			ip_created_trans;
 	unsigned long			ip_created_trans;
-	/* last transaction we were a part of. */
-	unsigned long			ip_last_trans;
 
 
 	struct ocfs2_caching_info	ip_metadata_cache;
 	struct ocfs2_caching_info	ip_metadata_cache;
 
 

+ 3 - 2
fs/ocfs2/journal.h

@@ -94,7 +94,7 @@ static inline void ocfs2_set_inode_lock_trans(struct ocfs2_journal *journal,
 					      struct inode *inode)
 					      struct inode *inode)
 {
 {
 	spin_lock(&trans_inc_lock);
 	spin_lock(&trans_inc_lock);
-	OCFS2_I(inode)->ip_last_trans = journal->j_trans_id;
+	INODE_CACHE(inode)->ci_last_trans = journal->j_trans_id;
 	spin_unlock(&trans_inc_lock);
 	spin_unlock(&trans_inc_lock);
 }
 }
 
 
@@ -109,7 +109,8 @@ static inline int ocfs2_inode_fully_checkpointed(struct inode *inode)
 	struct ocfs2_journal *journal = OCFS2_SB(inode->i_sb)->journal;
 	struct ocfs2_journal *journal = OCFS2_SB(inode->i_sb)->journal;
 
 
 	spin_lock(&trans_inc_lock);
 	spin_lock(&trans_inc_lock);
-	ret = time_after(journal->j_trans_id, OCFS2_I(inode)->ip_last_trans);
+	ret = time_after(journal->j_trans_id,
+			 INODE_CACHE(inode)->ci_last_trans);
 	spin_unlock(&trans_inc_lock);
 	spin_unlock(&trans_inc_lock);
 	return ret;
 	return ret;
 }
 }

+ 4 - 0
fs/ocfs2/ocfs2.h

@@ -77,6 +77,10 @@ struct ocfs2_caching_info {
 	 */
 	 */
 	const struct ocfs2_caching_operations *ci_ops;
 	const struct ocfs2_caching_operations *ci_ops;
 
 
+	/* last transaction we were a part of. */
+	unsigned long		ci_last_trans;
+
+	/* Cache structures */
 	unsigned int		ci_flags;
 	unsigned int		ci_flags;
 	unsigned int		ci_num_cached;
 	unsigned int		ci_num_cached;
 	union {
 	union {

+ 0 - 1
fs/ocfs2/super.c

@@ -1669,7 +1669,6 @@ static void ocfs2_inode_init_once(void *data)
 	ocfs2_extent_map_init(&oi->vfs_inode);
 	ocfs2_extent_map_init(&oi->vfs_inode);
 	INIT_LIST_HEAD(&oi->ip_io_markers);
 	INIT_LIST_HEAD(&oi->ip_io_markers);
 	oi->ip_created_trans = 0;
 	oi->ip_created_trans = 0;
-	oi->ip_last_trans = 0;
 	oi->ip_dir_start_lookup = 0;
 	oi->ip_dir_start_lookup = 0;
 
 
 	init_rwsem(&oi->ip_alloc_sem);
 	init_rwsem(&oi->ip_alloc_sem);

+ 19 - 3
fs/ocfs2/uptodate.c

@@ -118,16 +118,32 @@ void ocfs2_metadata_cache_io_unlock(struct ocfs2_caching_info *ci)
 }
 }
 
 
 
 
+static void ocfs2_metadata_cache_reset(struct ocfs2_caching_info *ci,
+				       int clear)
+{
+	ci->ci_flags |= OCFS2_CACHE_FL_INLINE;
+	ci->ci_num_cached = 0;
+
+	if (clear)
+		ci->ci_last_trans = 0;
+}
+
 void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci,
 void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci,
 			       const struct ocfs2_caching_operations *ops)
 			       const struct ocfs2_caching_operations *ops)
 {
 {
 	BUG_ON(!ops);
 	BUG_ON(!ops);
 
 
 	ci->ci_ops = ops;
 	ci->ci_ops = ops;
-	ci->ci_flags |= OCFS2_CACHE_FL_INLINE;
-	ci->ci_num_cached = 0;
+	ocfs2_metadata_cache_reset(ci, 1);
+}
+
+void ocfs2_metadata_cache_exit(struct ocfs2_caching_info *ci)
+{
+	ocfs2_metadata_cache_purge(ci);
+	ocfs2_metadata_cache_reset(ci, 1);
 }
 }
 
 
+
 /* No lock taken here as 'root' is not expected to be visible to other
 /* No lock taken here as 'root' is not expected to be visible to other
  * processes. */
  * processes. */
 static unsigned int ocfs2_purge_copied_metadata_tree(struct rb_root *root)
 static unsigned int ocfs2_purge_copied_metadata_tree(struct rb_root *root)
@@ -177,7 +193,7 @@ void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci)
 	if (tree)
 	if (tree)
 		root = ci->ci_cache.ci_tree;
 		root = ci->ci_cache.ci_tree;
 
 
-	ocfs2_metadata_cache_init(ci, ci->ci_ops);
+	ocfs2_metadata_cache_reset(ci, 0);
 	ocfs2_metadata_cache_unlock(ci);
 	ocfs2_metadata_cache_unlock(ci);
 
 
 	purged = ocfs2_purge_copied_metadata_tree(&root);
 	purged = ocfs2_purge_copied_metadata_tree(&root);

+ 1 - 0
fs/ocfs2/uptodate.h

@@ -61,6 +61,7 @@ void exit_ocfs2_uptodate_cache(void);
 void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci,
 void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci,
 			       const struct ocfs2_caching_operations *ops);
 			       const struct ocfs2_caching_operations *ops);
 void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci);
 void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci);
+void ocfs2_metadata_cache_exit(struct ocfs2_caching_info *ci);
 
 
 u64 ocfs2_metadata_cache_owner(struct ocfs2_caching_info *ci);
 u64 ocfs2_metadata_cache_owner(struct ocfs2_caching_info *ci);
 struct super_block *ocfs2_metadata_cache_get_super(struct ocfs2_caching_info *ci);
 struct super_block *ocfs2_metadata_cache_get_super(struct ocfs2_caching_info *ci);