Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 43297
b: refs/heads/master
c: 1a14d3a
h: refs/heads/master
i:
  43295: 0d04f87
v: v3
  • Loading branch information
Steven Whitehouse committed Nov 30, 2006
1 parent 8277911 commit b229a9a
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 52 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: fa2ecfc5e11b12f25b67f9c84ac6b0e74a6a0115
refs/heads/master: 1a14d3a68f04527546121eb7b45187ff6af63151
10 changes: 5 additions & 5 deletions trunk/fs/gfs2/glock.c
Original file line number Diff line number Diff line change
Expand Up @@ -847,12 +847,12 @@ static void xmote_bh(struct gfs2_glock *gl, unsigned int ret)

if (prev_state != LM_ST_UNLOCKED && !(ret & LM_OUT_CACHEABLE)) {
if (glops->go_inval)
glops->go_inval(gl, DIO_METADATA | DIO_DATA);
glops->go_inval(gl, DIO_METADATA);
} else if (gl->gl_state == LM_ST_DEFERRED) {
/* We might not want to do this here.
Look at moving to the inode glops. */
if (glops->go_inval)
glops->go_inval(gl, DIO_DATA);
glops->go_inval(gl, 0);
}

/* Deal with each possible exit condition */
Expand Down Expand Up @@ -954,7 +954,7 @@ void gfs2_glock_xmote_th(struct gfs2_glock *gl, unsigned int state, int flags)
gfs2_assert_warn(sdp, state != gl->gl_state);

if (gl->gl_state == LM_ST_EXCLUSIVE && glops->go_sync)
glops->go_sync(gl, DIO_METADATA | DIO_DATA | DIO_RELEASE);
glops->go_sync(gl);

gfs2_glock_hold(gl);
gl->gl_req_bh = xmote_bh;
Expand Down Expand Up @@ -995,7 +995,7 @@ static void drop_bh(struct gfs2_glock *gl, unsigned int ret)
state_change(gl, LM_ST_UNLOCKED);

if (glops->go_inval)
glops->go_inval(gl, DIO_METADATA | DIO_DATA);
glops->go_inval(gl, DIO_METADATA);

if (gh) {
spin_lock(&gl->gl_spin);
Expand Down Expand Up @@ -1041,7 +1041,7 @@ void gfs2_glock_drop_th(struct gfs2_glock *gl)
gfs2_assert_warn(sdp, gl->gl_state != LM_ST_UNLOCKED);

if (gl->gl_state == LM_ST_EXCLUSIVE && glops->go_sync)
glops->go_sync(gl, DIO_METADATA | DIO_DATA | DIO_RELEASE);
glops->go_sync(gl);

gfs2_glock_hold(gl);
gl->gl_req_bh = drop_bh;
Expand Down
42 changes: 11 additions & 31 deletions trunk/fs/gfs2/glops.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,23 +173,18 @@ static void gfs2_page_writeback(struct gfs2_glock *gl)
/**
* meta_go_sync - sync out the metadata for this glock
* @gl: the glock
* @flags: DIO_*
*
* Called when demoting or unlocking an EX glock. We must flush
* to disk all dirty buffers/pages relating to this glock, and must not
* not return to caller to demote/unlock the glock until I/O is complete.
*/

static void meta_go_sync(struct gfs2_glock *gl, int flags)
static void meta_go_sync(struct gfs2_glock *gl)
{
if (!(flags & DIO_METADATA))
return;

if (test_and_clear_bit(GLF_DIRTY, &gl->gl_flags)) {
gfs2_log_flush(gl->gl_sbd, gl);
gfs2_meta_sync(gl);
if (flags & DIO_RELEASE)
gfs2_ail_empty_gl(gl);
gfs2_ail_empty_gl(gl);
}

}
Expand Down Expand Up @@ -264,31 +259,18 @@ static void inode_go_drop_th(struct gfs2_glock *gl)
/**
* inode_go_sync - Sync the dirty data and/or metadata for an inode glock
* @gl: the glock protecting the inode
* @flags:
*
*/

static void inode_go_sync(struct gfs2_glock *gl, int flags)
static void inode_go_sync(struct gfs2_glock *gl)
{
int meta = (flags & DIO_METADATA);
int data = (flags & DIO_DATA);

if (test_bit(GLF_DIRTY, &gl->gl_flags)) {
if (meta && data) {
gfs2_page_writeback(gl);
gfs2_log_flush(gl->gl_sbd, gl);
gfs2_meta_sync(gl);
gfs2_page_wait(gl);
clear_bit(GLF_DIRTY, &gl->gl_flags);
} else if (meta) {
gfs2_log_flush(gl->gl_sbd, gl);
gfs2_meta_sync(gl);
} else if (data) {
gfs2_page_writeback(gl);
gfs2_page_wait(gl);
}
if (flags & DIO_RELEASE)
gfs2_ail_empty_gl(gl);
gfs2_page_writeback(gl);
gfs2_log_flush(gl->gl_sbd, gl);
gfs2_meta_sync(gl);
gfs2_page_wait(gl);
clear_bit(GLF_DIRTY, &gl->gl_flags);
gfs2_ail_empty_gl(gl);
}
}

Expand All @@ -302,15 +284,13 @@ static void inode_go_sync(struct gfs2_glock *gl, int flags)
static void inode_go_inval(struct gfs2_glock *gl, int flags)
{
int meta = (flags & DIO_METADATA);
int data = (flags & DIO_DATA);

if (meta) {
struct gfs2_inode *ip = gl->gl_object;
gfs2_meta_inval(gl);
set_bit(GIF_INVALID, &ip->i_flags);
}
if (data)
gfs2_page_inval(gl);
gfs2_page_inval(gl);
}

/**
Expand Down Expand Up @@ -494,7 +474,7 @@ 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 | DIO_DATA);
j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);

error = gfs2_find_jhead(sdp->sd_jdesc, &head);
if (error)
Expand Down
25 changes: 11 additions & 14 deletions trunk/fs/gfs2/incore.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@

#define DIO_WAIT 0x00000010
#define DIO_METADATA 0x00000020
#define DIO_DATA 0x00000040
#define DIO_RELEASE 0x00000080
#define DIO_ALL 0x00000100

struct gfs2_log_operations;
Expand Down Expand Up @@ -103,18 +101,17 @@ struct gfs2_bufdata {
};

struct gfs2_glock_operations {
void (*go_xmote_th) (struct gfs2_glock * gl, unsigned int state,
int flags);
void (*go_xmote_bh) (struct gfs2_glock * gl);
void (*go_drop_th) (struct gfs2_glock * gl);
void (*go_drop_bh) (struct gfs2_glock * gl);
void (*go_sync) (struct gfs2_glock * gl, int flags);
void (*go_inval) (struct gfs2_glock * gl, int flags);
int (*go_demote_ok) (struct gfs2_glock * gl);
int (*go_lock) (struct gfs2_holder * gh);
void (*go_unlock) (struct gfs2_holder * gh);
void (*go_callback) (struct gfs2_glock * gl, unsigned int state);
void (*go_greedy) (struct gfs2_glock * gl);
void (*go_xmote_th) (struct gfs2_glock *gl, unsigned int state, int flags);
void (*go_xmote_bh) (struct gfs2_glock *gl);
void (*go_drop_th) (struct gfs2_glock *gl);
void (*go_drop_bh) (struct gfs2_glock *gl);
void (*go_sync) (struct gfs2_glock *gl);
void (*go_inval) (struct gfs2_glock *gl, int flags);
int (*go_demote_ok) (struct gfs2_glock *gl);
int (*go_lock) (struct gfs2_holder *gh);
void (*go_unlock) (struct gfs2_holder *gh);
void (*go_callback) (struct gfs2_glock *gl, unsigned int state);
void (*go_greedy) (struct gfs2_glock *gl);
const int go_type;
};

Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/gfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
return error;

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

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

0 comments on commit b229a9a

Please sign in to comment.