Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 76015
b: refs/heads/master
c: f91a0d3
h: refs/heads/master
i:
  76013: a26938e
  76011: d807d2f
  76007: e0148ae
  75999: 19844ec
v: v3
  • Loading branch information
Steven Whitehouse committed Jan 25, 2008
1 parent 6918629 commit b510d08
Show file tree
Hide file tree
Showing 11 changed files with 20 additions and 111 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: 3cc3f710ce0effe397b830826a1a081fa81f11c7
refs/heads/master: f91a0d3e24e4b0198be5fae20d45a35c40d1efce
21 changes: 1 addition & 20 deletions trunk/fs/gfs2/glops.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)
bd = list_entry(head->next, struct gfs2_bufdata,
bd_ail_gl_list);
bh = bd->bd_bh;
gfs2_remove_from_ail(NULL, bd);
gfs2_remove_from_ail(bd);
bd->bd_bh = NULL;
bh->b_private = NULL;
bd->bd_blkno = bh->b_blocknr;
Expand Down Expand Up @@ -286,23 +286,6 @@ static int inode_go_lock(struct gfs2_holder *gh)
return error;
}

/**
* inode_go_unlock - operation done before an inode lock is unlocked by a
* process
* @gl: the glock
* @flags:
*
*/

static void inode_go_unlock(struct gfs2_holder *gh)
{
struct gfs2_glock *gl = gh->gh_gl;
struct gfs2_inode *ip = gl->gl_object;

if (ip)
gfs2_meta_cache_flush(ip);
}

/**
* rgrp_go_demote_ok - Check to see if it's ok to unlock a RG's glock
* @gl: the glock
Expand Down Expand Up @@ -377,7 +360,6 @@ static void trans_go_xmote_bh(struct gfs2_glock *gl)

if (gl->gl_state != LM_ST_UNLOCKED &&
test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) {
gfs2_meta_cache_flush(GFS2_I(sdp->sd_jdesc->jd_inode));
j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);

error = gfs2_find_jhead(sdp->sd_jdesc, &head);
Expand Down Expand Up @@ -437,7 +419,6 @@ const struct gfs2_glock_operations gfs2_inode_glops = {
.go_inval = inode_go_inval,
.go_demote_ok = inode_go_demote_ok,
.go_lock = inode_go_lock,
.go_unlock = inode_go_unlock,
.go_type = LM_TYPE_INODE,
.go_min_hold_time = HZ / 10,
};
Expand Down
2 changes: 0 additions & 2 deletions trunk/fs/gfs2/incore.h
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,6 @@ struct gfs2_inode {
spinlock_t i_spin;
struct rw_semaphore i_rw_mutex;
unsigned long i_last_pfault;

struct buffer_head *i_cache[GFS2_MAX_META_HEIGHT];
};

/*
Expand Down
13 changes: 5 additions & 8 deletions trunk/fs/gfs2/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,11 +293,6 @@ static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
return 0;
}

static void gfs2_inode_bh(struct gfs2_inode *ip, struct buffer_head *bh)
{
ip->i_cache[0] = bh;
}

/**
* gfs2_inode_refresh - Refresh the incore copy of the dinode
* @ip: The GFS2 inode
Expand Down Expand Up @@ -965,7 +960,7 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
struct gfs2_inum_host inum = { .no_addr = 0, .no_formal_ino = 0 };
int error;
u64 generation;
struct buffer_head *bh=NULL;
struct buffer_head *bh = NULL;

if (!name->len || name->len > GFS2_FNAMESIZE)
return ERR_PTR(-ENAMETOOLONG);
Expand Down Expand Up @@ -1002,8 +997,6 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
if (IS_ERR(inode))
goto fail_gunlock2;

gfs2_inode_bh(GFS2_I(inode), bh);

error = gfs2_inode_refresh(GFS2_I(inode));
if (error)
goto fail_gunlock2;
Expand All @@ -1020,6 +1013,8 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
if (error)
goto fail_gunlock2;

if (bh)
brelse(bh);
if (!inode)
return ERR_PTR(-ENOMEM);
return inode;
Expand All @@ -1031,6 +1026,8 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
fail_gunlock:
gfs2_glock_dq(ghs);
fail:
if (bh)
brelse(bh);
return ERR_PTR(error);
}

Expand Down
6 changes: 2 additions & 4 deletions trunk/fs/gfs2/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,12 @@ unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct,
*
*/

void gfs2_remove_from_ail(struct address_space *mapping, struct gfs2_bufdata *bd)
void gfs2_remove_from_ail(struct gfs2_bufdata *bd)
{
bd->bd_ail = NULL;
list_del_init(&bd->bd_ail_st_list);
list_del_init(&bd->bd_ail_gl_list);
atomic_dec(&bd->bd_gl->gl_ail_count);
if (mapping)
gfs2_meta_cache_flush(GFS2_I(mapping->host));
brelse(bd->bd_bh);
}

Expand Down Expand Up @@ -248,7 +246,7 @@ static void gfs2_ail2_empty_one(struct gfs2_sbd *sdp, struct gfs2_ail *ai)
bd = list_entry(head->prev, struct gfs2_bufdata,
bd_ail_st_list);
gfs2_assert(sdp, bd->bd_ail == ai);
gfs2_remove_from_ail(bd->bd_bh->b_page->mapping, bd);
gfs2_remove_from_ail(bd);
}
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/gfs2/log.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ struct buffer_head *gfs2_log_fake_buf(struct gfs2_sbd *sdp,
struct buffer_head *real);
void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl);
void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *trans);
void gfs2_remove_from_ail(struct address_space *mapping, struct gfs2_bufdata *bd);
void gfs2_remove_from_ail(struct gfs2_bufdata *bd);

void gfs2_log_shutdown(struct gfs2_sbd *sdp);
void gfs2_meta_syncfs(struct gfs2_sbd *sdp);
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/gfs2/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ static void gfs2_init_inode_once(struct kmem_cache *cachep, void *foo)
inode_init_once(&ip->i_inode);
spin_lock_init(&ip->i_spin);
init_rwsem(&ip->i_rw_mutex);
memset(ip->i_cache, 0, sizeof(ip->i_cache));
}

static void gfs2_init_glock_once(struct kmem_cache *cachep, void *foo)
Expand Down
81 changes: 10 additions & 71 deletions trunk/fs/gfs2/meta_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ void gfs2_remove_from_journal(struct buffer_head *bh, struct gfs2_trans *tr, int
}
if (bd) {
if (bd->bd_ail) {
gfs2_remove_from_ail(NULL, bd);
gfs2_remove_from_ail(bd);
bh->b_private = NULL;
bd->bd_bh = NULL;
bd->bd_blkno = bh->b_blocknr;
Expand Down Expand Up @@ -357,32 +357,6 @@ void gfs2_meta_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen)
}
}

/**
* gfs2_meta_cache_flush - get rid of any references on buffers for this inode
* @ip: The GFS2 inode
*
* This releases buffers that are in the most-recently-used array of
* blocks used for indirect block addressing for this inode.
*/

void gfs2_meta_cache_flush(struct gfs2_inode *ip)
{
struct buffer_head **bh_slot;
unsigned int x;

spin_lock(&ip->i_spin);

for (x = 0; x < GFS2_MAX_META_HEIGHT; x++) {
bh_slot = &ip->i_cache[x];
if (*bh_slot) {
brelse(*bh_slot);
*bh_slot = NULL;
}
}

spin_unlock(&ip->i_spin);
}

/**
* gfs2_meta_indirect_buffer - Get a metadata buffer
* @ip: The GFS2 inode
Expand All @@ -391,8 +365,6 @@ void gfs2_meta_cache_flush(struct gfs2_inode *ip)
* @new: Non-zero if we may create a new buffer
* @bhp: the buffer is returned here
*
* Try to use the gfs2_inode's MRU metadata tree cache.
*
* Returns: errno
*/

Expand All @@ -401,58 +373,25 @@ int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, u64 num,
{
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
struct gfs2_glock *gl = ip->i_gl;
struct buffer_head *bh = NULL, **bh_slot = ip->i_cache + height;
int in_cache = 0;

BUG_ON(!gl);
BUG_ON(!sdp);

spin_lock(&ip->i_spin);
if (*bh_slot && (*bh_slot)->b_blocknr == num) {
bh = *bh_slot;
get_bh(bh);
in_cache = 1;
}
spin_unlock(&ip->i_spin);

if (!bh)
bh = getbuf(gl, num, CREATE);

if (!bh)
return -ENOBUFS;
struct buffer_head *bh;
int ret = 0;

if (new) {
if (gfs2_assert_warn(sdp, height))
goto err;
meta_prep_new(bh);
BUG_ON(height == 0);
bh = gfs2_meta_new(gl, num);
gfs2_trans_add_bh(ip->i_gl, bh, 1);
gfs2_metatype_set(bh, GFS2_METATYPE_IN, GFS2_FORMAT_IN);
gfs2_buffer_clear_tail(bh, sizeof(struct gfs2_meta_header));
} else {
u32 mtype = height ? GFS2_METATYPE_IN : GFS2_METATYPE_DI;
if (!buffer_uptodate(bh)) {
ll_rw_block(READ_META, 1, &bh);
if (gfs2_meta_wait(sdp, bh))
goto err;
ret = gfs2_meta_read(gl, num, DIO_WAIT, &bh);
if (ret == 0 && gfs2_metatype_check(sdp, bh, mtype)) {
brelse(bh);
ret = -EIO;
}
if (gfs2_metatype_check(sdp, bh, mtype))
goto err;
}

if (!in_cache) {
spin_lock(&ip->i_spin);
if (*bh_slot)
brelse(*bh_slot);
*bh_slot = bh;
get_bh(bh);
spin_unlock(&ip->i_spin);
}

*bhp = bh;
return 0;
err:
brelse(bh);
return -EIO;
return ret;
}

/**
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/gfs2/meta_io.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ void gfs2_remove_from_journal(struct buffer_head *bh, struct gfs2_trans *tr,

void gfs2_meta_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen);

void gfs2_meta_cache_flush(struct gfs2_inode *ip);
int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, u64 num,
int new, struct buffer_head **bhp);

Expand Down
1 change: 0 additions & 1 deletion trunk/fs/gfs2/ops_address.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,6 @@ static int gfs2_writepage(struct page *page, struct writeback_control *wbc)
error = block_write_full_page(page, gfs2_get_block_noalloc, wbc);
if (done_trans)
gfs2_trans_end(sdp);
gfs2_meta_cache_flush(ip);
return error;

out_ignore:
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/gfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,6 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
if (error)
return error;

gfs2_meta_cache_flush(ip);
j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);

error = gfs2_find_jhead(sdp->sd_jdesc, &head);
Expand Down

0 comments on commit b510d08

Please sign in to comment.