Move calls to gfs2_queue_verify_delete() into gfs2_evict_inode().
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
gfs2_holder_uninit(&gh);
}
-static bool gfs2_try_evict(struct gfs2_glock *gl)
+static void gfs2_try_evict(struct gfs2_glock *gl)
{
struct gfs2_inode *ip;
- bool evicted = false;
/*
* If there is contention on the iopen glock and we have an inode, try
gfs2_glock_poke(ip->i_gl);
iput(&ip->i_inode);
}
- evicted = !ip;
}
- return evicted;
}
bool gfs2_queue_try_to_evict(struct gfs2_glock *gl)
* care about compatibility with such nodes, we can skip this
* step entirely.
*/
- if (gfs2_try_evict(gl)) {
- if (!test_bit(SDF_KILL, &sdp->sd_flags)) {
- gfs2_glock_hold(gl);
- if (!gfs2_queue_verify_delete(gl, true))
- gfs2_glock_put(gl);
- }
- }
+ gfs2_try_evict(gl);
}
if (verify_delete) {
gfs2_holder_mark_uninitialized(&gh);
behavior = evict_should_delete(inode, &gh);
- if (behavior == EVICT_SHOULD_DEFER_DELETE)
+ if (behavior == EVICT_SHOULD_DEFER_DELETE &&
+ !test_bit(SDF_KILL, &sdp->sd_flags)) {
+ struct gfs2_glock *io_gl = ip->i_iopen_gh.gh_gl;
+
+ gfs2_glock_hold(io_gl);
+ if (!gfs2_queue_verify_delete(io_gl, true))
+ gfs2_glock_put(io_gl);
goto out;
+ }
if (behavior == EVICT_SHOULD_DELETE)
ret = evict_unlinked_inode(inode);
else