From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Gruenbacher Date: Wed, 31 May 2017 17:03:04 +0200 Subject: [Cluster-devel] [PATCH 0/8] GFS2 shrinker deadlock Message-ID: <1496242992-1607-1-git-send-email-agruenba@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit This patch queue fixes a long-standing GFS2 bug that can cause cluster nodes to lock up under memory pressure. Right now, when inodes are evicted, GFS2 calls into DLM. Inode eviction can be triggered by memory pressure, and it can happen in the context of a random user-space process. If DLM happens to block in the process in question (for example, it that process is a fence agent), it will deadlock. This patch queue stops GFS2 from calling into DLM on the inode evict path when under memory pressure. It does so by first decoupling destroying inodes and putting their associated glocks, which is what ends up calling into DLM. Second, when under memory pressure, it moves putting glocks into work queue context where it cannot block DLM. This patch queue is a bit complicated, so careful reviews would be very welcome ;-) Thanks, Andreas Andreas Gruenbacher (8): gfs2: Get rid of flush_delayed_work in gfs2_evict_inode gfs2: Protect gl->gl_object by spin lock gfs2: Clean up glock work enqueuing gfs2: Always check block type in gfs2_evict_inode gfs2: gfs2_glock_get: Wait on freeing glocks gfs2: Get rid of gfs2_set_nlink gfs2: gfs2_evict_inode: Put glocks asynchronously gfs2: Warn when not deleting inodes under memory pressure fs/gfs2/bmap.c | 7 +- fs/gfs2/dir.c | 6 +- fs/gfs2/glock.c | 247 ++++++++++++++++++++++++++++++++++++++++--------------- fs/gfs2/glock.h | 9 ++ fs/gfs2/glops.c | 77 +++++++++-------- fs/gfs2/incore.h | 2 + fs/gfs2/inode.c | 32 +++---- fs/gfs2/lops.c | 9 +- fs/gfs2/rgrp.c | 6 +- fs/gfs2/super.c | 57 ++++++++++--- fs/gfs2/xattr.c | 6 +- 11 files changed, 322 insertions(+), 136 deletions(-) -- 2.7.4