gfs2: Cease delete work during unmount
Add a check to delete_work_func() so that it quits when it finds that the filesystem is deactivating. This speeds up the delete workqueue draining in gfs2_kill_sb(). In addition, make sure that iopen_go_callback() won't queue any new delete work while the filesystem is deactivating. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
parent
1c9001515e
commit
6c0246a96e
@ -1022,6 +1022,8 @@ static void delete_work_func(struct work_struct *work)
|
||||
* step entirely.
|
||||
*/
|
||||
if (gfs2_try_evict(gl)) {
|
||||
if (test_bit(SDF_DEACTIVATING, &sdp->sd_flags))
|
||||
goto out;
|
||||
if (gfs2_queue_verify_evict(gl))
|
||||
return;
|
||||
}
|
||||
@ -1033,6 +1035,7 @@ static void delete_work_func(struct work_struct *work)
|
||||
GFS2_BLKST_UNLINKED);
|
||||
if (IS_ERR(inode)) {
|
||||
if (PTR_ERR(inode) == -EAGAIN &&
|
||||
!test_bit(SDF_DEACTIVATING, &sdp->sd_flags) &&
|
||||
gfs2_queue_verify_evict(gl))
|
||||
return;
|
||||
} else {
|
||||
|
@ -648,7 +648,8 @@ static void iopen_go_callback(struct gfs2_glock *gl, bool remote)
|
||||
struct gfs2_inode *ip = gl->gl_object;
|
||||
struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
|
||||
|
||||
if (!remote || sb_rdonly(sdp->sd_vfs))
|
||||
if (!remote || sb_rdonly(sdp->sd_vfs) ||
|
||||
test_bit(SDF_DEACTIVATING, &sdp->sd_flags))
|
||||
return;
|
||||
|
||||
if (gl->gl_demote_state == LM_ST_UNLOCKED &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user