svn commit: r242858 - stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Andriy Gapon
avg at FreeBSD.org
Sat Nov 10 12:06:25 UTC 2012
Author: avg
Date: Sat Nov 10 12:06:24 2012
New Revision: 242858
URL: http://svnweb.freebsd.org/changeset/base/242858
Log:
MFC r241773: zfs: wait in arc_lowmem only if curproc == pageproc
Modified:
stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/cddl/contrib/opensolaris/ (props changed)
Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
==============================================================================
--- stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Sat Nov 10 12:04:22 2012 (r242857)
+++ stable/9/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Sat Nov 10 12:06:24 2012 (r242858)
@@ -3718,8 +3718,16 @@ arc_lowmem(void *arg __unused, int howto
mutex_enter(&arc_reclaim_thr_lock);
needfree = 1;
cv_signal(&arc_reclaim_thr_cv);
- while (needfree)
- msleep(&needfree, &arc_reclaim_thr_lock, 0, "zfs:lowmem", 0);
+
+ /*
+ * It is unsafe to block here in arbitrary threads, because we can come
+ * here from ARC itself and may hold ARC locks and thus risk a deadlock
+ * with ARC reclaim thread.
+ */
+ if (curproc == pageproc) {
+ while (needfree)
+ msleep(&needfree, &arc_reclaim_thr_lock, 0, "zfs:lowmem", 0);
+ }
mutex_exit(&arc_reclaim_thr_lock);
mutex_exit(&arc_lowmem_lock);
}
More information about the svn-src-stable-9
mailing list