mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-28 16:53:49 +00:00
gfs2: Only defer deletes when we have an iopen glock
The mechanism to defer deleting unlinked inodes is tied to
delete_work_func(), which is tied to iopen glocks. When we don't have
an iopen glock, we must carry out deletes immediately instead.
Fixes a NULL pointer dereference in gfs2_evict_inode().
Fixes: 8c21c2c71e
("gfs2: Call gfs2_queue_verify_delete from gfs2_evict_inode")
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
parent
b6900ce151
commit
c5b7a2400e
@ -1503,10 +1503,13 @@ static void gfs2_evict_inode(struct inode *inode)
|
||||
!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 (io_gl) {
|
||||
gfs2_glock_hold(io_gl);
|
||||
if (!gfs2_queue_verify_delete(io_gl, true))
|
||||
gfs2_glock_put(io_gl);
|
||||
goto out;
|
||||
}
|
||||
behavior = EVICT_SHOULD_DELETE;
|
||||
}
|
||||
if (behavior == EVICT_SHOULD_DELETE)
|
||||
ret = evict_unlinked_inode(inode);
|
||||
|
Loading…
Reference in New Issue
Block a user