[Cluster-devel] [PATCH 0/8] GFS2 shrinker deadlock

Andreas Gruenbacher <[email protected]>
Newsgroups com.redhat.cluster-devel
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.