struct greedy {
struct gfs2_holder gr_gh;
- struct work_struct gr_work;
+ struct delayed_work gr_work;
};
struct gfs2_gl_hash_bucket {
if (gl->gl_aspace)
gfs2_aspace_put(gl->gl_aspace);
fail:
- kmem_cache_free(gfs2_glock_cachep, gl);
+ kmem_cache_free(gfs2_glock_cachep, gl);
return error;
}
gfs2_holder_uninit(gh);
kfree(container_of(gh, struct greedy, gr_gh));
- spin_lock(&gl->gl_spin);
+ spin_lock(&gl->gl_spin);
return 0;
}
if (existing) {
print_symbol(KERN_WARNING "original: %s\n", existing->gh_ip);
printk(KERN_INFO "pid : %d\n", existing->gh_owner->pid);
- printk(KERN_INFO "lock type : %d lock state : %d\n",
+ printk(KERN_INFO "lock type : %d lock state : %d\n",
existing->gh_gl->gl_name.ln_type, existing->gh_gl->gl_state);
print_symbol(KERN_WARNING "new: %s\n", gh->gh_ip);
printk(KERN_INFO "pid : %d\n", gh->gh_owner->pid);
- printk(KERN_INFO "lock type : %d lock state : %d\n",
+ printk(KERN_INFO "lock type : %d lock state : %d\n",
gl->gl_name.ln_type, gl->gl_state);
BUG();
}
if (gh->gh_flags & LM_FLAG_PRIORITY)
list_add(&gh->gh_list, &gl->gl_waiters3);
else
- list_add_tail(&gh->gh_list, &gl->gl_waiters3);
+ list_add_tail(&gh->gh_list, &gl->gl_waiters3);
}
/**
glops->go_xmote_th(gl, state, flags);
}
-static void greedy_work(void *data)
+static void greedy_work(struct work_struct *work)
{
- struct greedy *gr = data;
+ struct greedy *gr = container_of(work, struct greedy, gr_work.work);
struct gfs2_holder *gh = &gr->gr_gh;
struct gfs2_glock *gl = gh->gh_gl;
const struct gfs2_glock_operations *glops = gl->gl_ops;
gfs2_holder_init(gl, 0, 0, gh);
set_bit(HIF_GREEDY, &gh->gh_iflags);
- INIT_WORK(&gr->gr_work, greedy_work, gr);
+ INIT_DELAYED_WORK(&gr->gr_work, greedy_work);
set_bit(GLF_SKIP_WAITERS2, &gl->gl_flags);
schedule_delayed_work(&gr->gr_work, time);
for (;;) {
cont = 0;
for (x = 0; x < GFS2_GL_HASH_SIZE; x++) {
- if (examine_bucket(clear_glock, sdp, x))
+ if (examine_bucket(clear_glock, sdp, x))
cont = 1;
}