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>
This commit is contained in:
parent
8cb471e8f8
commit
66fb345ddd
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
ocfs2_metadata_cache_reset(ci, 1);
|
||||||
ci->ci_num_cached = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue