ext4: fix race between truncate and __ext4_journalled_writepage()
[pandora-kernel.git] / fs / gfs2 / lock_dlm.c
index 6e493ae..98c80d8 100644 (file)
@@ -22,7 +22,6 @@ static void gdlm_ast(void *arg)
 {
        struct gfs2_glock *gl = arg;
        unsigned ret = gl->gl_state;
-       struct gfs2_sbd *sdp = gl->gl_sbd;
 
        BUG_ON(gl->gl_lksb.sb_flags & DLM_SBF_DEMOTED);
 
@@ -31,12 +30,7 @@ static void gdlm_ast(void *arg)
 
        switch (gl->gl_lksb.sb_status) {
        case -DLM_EUNLOCK: /* Unlocked, so glock can be freed */
-               if (gl->gl_ops->go_flags & GLOF_ASPACE)
-                       kmem_cache_free(gfs2_glock_aspace_cachep, gl);
-               else
-                       kmem_cache_free(gfs2_glock_cachep, gl);
-               if (atomic_dec_and_test(&sdp->sd_glock_disposal))
-                       wake_up(&sdp->sd_glock_wait);
+               gfs2_glock_free(gl);
                return;
        case -DLM_ECANCEL: /* Cancel while getting lock */
                ret |= LM_OUT_CANCELED;
@@ -164,16 +158,14 @@ static int gdlm_lock(struct gfs2_glock *gl, unsigned int req_state,
                        GDLM_STRNAME_BYTES - 1, 0, gdlm_ast, gl, gdlm_bast);
 }
 
-static void gdlm_put_lock(struct kmem_cache *cachep, struct gfs2_glock *gl)
+static void gdlm_put_lock(struct gfs2_glock *gl)
 {
        struct gfs2_sbd *sdp = gl->gl_sbd;
        struct lm_lockstruct *ls = &sdp->sd_lockstruct;
        int error;
 
        if (gl->gl_lksb.sb_lkid == 0) {
-               kmem_cache_free(cachep, gl);
-               if (atomic_dec_and_test(&sdp->sd_glock_disposal))
-                       wake_up(&sdp->sd_glock_wait);
+               gfs2_glock_free(gl);
                return;
        }