diff options
author | Bryan Cantrill <bryan@joyent.com> | 2012-01-12 23:59:44 +0000 |
---|---|---|
committer | Bryan Cantrill <bryan@joyent.com> | 2012-01-12 23:59:44 +0000 |
commit | cc663ce2a435336bef777ce673fbd1fba233349b (patch) | |
tree | 375c6bedb2d20563fc61ad674bcef376f5f1ad32 | |
parent | 4b5a316acf0f02f1c4823637cdfa088b8bd2340b (diff) | |
download | illumos-joyent-cc663ce2a435336bef777ce673fbd1fba233349b.tar.gz |
OS-861 pages_pp_maximum/lotsfree discrepancy leads to mlock() failure
-rw-r--r-- | usr/src/uts/common/fs/zfs/arc.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/zfs/arc.c b/usr/src/uts/common/fs/zfs/arc.c index a4adb09e16..98aad58025 100644 --- a/usr/src/uts/common/fs/zfs/arc.c +++ b/usr/src/uts/common/fs/zfs/arc.c @@ -22,6 +22,7 @@ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2011 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. */ /* @@ -2018,6 +2019,16 @@ arc_reclaim_needed(void) if (availrmem < swapfs_minfree + swapfs_reserve + extra) return (1); + /* + * Check that we have enough availrmem that memory locking (e.g., via + * mlock(3C) or memcntl(2)) can still succeed. (pages_pp_maximum + * stores the number of pages that cannot be locked; when availrmem + * drops below pages_pp_maximum, page locking mechanisms such as + * page_pp_lock() will fail.) + */ + if (availrmem <= pages_pp_maximum) + return (1); + #if defined(__i386) /* * If we're on an i386 platform, it's possible that we'll exhaust the |