gfs2: Allow immediate GLF_VERIFY_DELETE work
Add an argument to gfs2_queue_verify_delete() that allows it to queue GLF_VERIFY_DELETE work for immediate execution. This is used in the next patch. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
+6
-5
@@ -1012,14 +1012,15 @@ bool gfs2_queue_try_to_evict(struct gfs2_glock *gl)
|
||||
&gl->gl_delete, 0);
|
||||
}
|
||||
|
||||
static bool gfs2_queue_verify_delete(struct gfs2_glock *gl)
|
||||
static bool gfs2_queue_verify_delete(struct gfs2_glock *gl, bool later)
|
||||
{
|
||||
struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
|
||||
unsigned long delay;
|
||||
|
||||
if (test_and_set_bit(GLF_VERIFY_DELETE, &gl->gl_flags))
|
||||
return false;
|
||||
return queue_delayed_work(sdp->sd_delete_wq,
|
||||
&gl->gl_delete, 5 * HZ);
|
||||
delay = later ? 5 * HZ : 0;
|
||||
return queue_delayed_work(sdp->sd_delete_wq, &gl->gl_delete, delay);
|
||||
}
|
||||
|
||||
static void delete_work_func(struct work_struct *work)
|
||||
@@ -1051,7 +1052,7 @@ static void delete_work_func(struct work_struct *work)
|
||||
if (gfs2_try_evict(gl)) {
|
||||
if (test_bit(SDF_KILL, &sdp->sd_flags))
|
||||
goto out;
|
||||
if (gfs2_queue_verify_delete(gl))
|
||||
if (gfs2_queue_verify_delete(gl, true))
|
||||
return;
|
||||
}
|
||||
goto out;
|
||||
@@ -1063,7 +1064,7 @@ static void delete_work_func(struct work_struct *work)
|
||||
if (IS_ERR(inode)) {
|
||||
if (PTR_ERR(inode) == -EAGAIN &&
|
||||
!test_bit(SDF_KILL, &sdp->sd_flags) &&
|
||||
gfs2_queue_verify_delete(gl))
|
||||
gfs2_queue_verify_delete(gl, true))
|
||||
return;
|
||||
} else {
|
||||
d_prune_aliases(inode);
|
||||
|
||||
Reference in New Issue
Block a user