Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 165063
b: refs/heads/master
c: 66fb345
h: refs/heads/master
i:
  165061: 8e75bc5
  165059: 2c325ef
  165055: f507255
v: v3
  • Loading branch information
Joel Becker committed Sep 4, 2009
1 parent 7d9fcf5 commit 3361650
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8cb471e8f82506937fe5e2e9fb0bf90f6b1f1170
refs/heads/master: 66fb345ddd2d343e36692da0ff66126d7a99dc1b
3 changes: 1 addition & 2 deletions trunk/fs/ocfs2/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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_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,
"Clear inode of %llu, inode has %u cache items\n",
Expand Down Expand Up @@ -1148,7 +1148,6 @@ void ocfs2_clear_inode(struct inode *inode)
/* Clear all other flags. */
oi->ip_flags = 0;
oi->ip_created_trans = 0;
oi->ip_last_trans = 0;
oi->ip_dir_start_lookup = 0;
oi->ip_blkno = 0ULL;

Expand Down
2 changes: 0 additions & 2 deletions trunk/fs/ocfs2/inode.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,6 @@ struct ocfs2_inode_info
/* next two are protected by trans_inc_lock */
/* which transaction were we created on? Zero if none. */
unsigned long ip_created_trans;
/* last transaction we were a part of. */
unsigned long ip_last_trans;

struct ocfs2_caching_info ip_metadata_cache;

Expand Down
5 changes: 3 additions & 2 deletions trunk/fs/ocfs2/journal.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ static inline void ocfs2_set_inode_lock_trans(struct ocfs2_journal *journal,
struct inode *inode)
{
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);
}

Expand All @@ -109,7 +109,8 @@ static inline int ocfs2_inode_fully_checkpointed(struct inode *inode)
struct ocfs2_journal *journal = OCFS2_SB(inode->i_sb)->journal;

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);
return ret;
}
Expand Down
4 changes: 4 additions & 0 deletions trunk/fs/ocfs2/ocfs2.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ struct ocfs2_caching_info {
*/
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_num_cached;
union {
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/ocfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1669,7 +1669,6 @@ static void ocfs2_inode_init_once(void *data)
ocfs2_extent_map_init(&oi->vfs_inode);
INIT_LIST_HEAD(&oi->ip_io_markers);
oi->ip_created_trans = 0;
oi->ip_last_trans = 0;
oi->ip_dir_start_lookup = 0;

init_rwsem(&oi->ip_alloc_sem);
Expand Down
22 changes: 19 additions & 3 deletions trunk/fs/ocfs2/uptodate.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
const struct ocfs2_caching_operations *ops)
{
BUG_ON(!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
* processes. */
static unsigned int ocfs2_purge_copied_metadata_tree(struct rb_root *root)
Expand Down Expand Up @@ -177,7 +193,7 @@ void ocfs2_metadata_cache_purge(struct ocfs2_caching_info *ci)
if (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);

purged = ocfs2_purge_copied_metadata_tree(&root);
Expand Down
1 change: 1 addition & 0 deletions trunk/fs/ocfs2/uptodate.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ void exit_ocfs2_uptodate_cache(void);
void ocfs2_metadata_cache_init(struct ocfs2_caching_info *ci,
const struct ocfs2_caching_operations *ops);
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);
struct super_block *ocfs2_metadata_cache_get_super(struct ocfs2_caching_info *ci);
Expand Down

0 comments on commit 3361650

Please sign in to comment.