Commit c5b7a240 authored by Andreas Gruenbacher's avatar Andreas Gruenbacher
Browse files

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: 8c21c2c7 ("gfs2: Call gfs2_queue_verify_delete from gfs2_evict_inode")
Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
parent b6900ce1
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -1503,11 +1503,14 @@ 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;

		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);
	else