There is a small race between the procfs caller and the memory hotplug caller
of setup_per_zone_pages_min(). Not a big deal, but the next patch will add yet
another caller. Time to close the gap.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
mm/page_alloc.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
Index: linux-2.6/mm/page_alloc.c
===================================================================
--- linux-2.6.orig/mm/page_alloc.c
+++ linux-2.6/mm/page_alloc.c
@@ -117,6 +117,7 @@ static char * const zone_names[MAX_NR_ZO
"Movable",
};
+static DEFINE_SPINLOCK(min_free_lock);
int min_free_kbytes = 1024;
unsigned long __meminitdata nr_kernel_pages;
@@ -4180,12 +4181,12 @@ static void setup_per_zone_lowmem_reserv
}
/**
- * setup_per_zone_pages_min - called when min_free_kbytes changes.
+ * __setup_per_zone_pages_min - called when min_free_kbytes changes.
*
* Ensures that the pages_{min,low,high} values for each zone are set correctly
* with respect to min_free_kbytes.
*/
-void setup_per_zone_pages_min(void)
+static void __setup_per_zone_pages_min(void)
{
unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
unsigned long lowmem_pages = 0;
@@ -4240,6 +4241,15 @@ void setup_per_zone_pages_min(void)
calculate_totalreserve_pages();
}
+void setup_per_zone_pages_min(void)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&min_free_lock, flags);
+ __setup_per_zone_pages_min();
+ spin_unlock_irqrestore(&min_free_lock, flags);
+}
+
/*
* Initialise min_free_kbytes.
*
@@ -4275,7 +4285,7 @@ static int __init init_per_zone_pages_mi
min_free_kbytes = 128;
if (min_free_kbytes > 65536)
min_free_kbytes = 65536;
- setup_per_zone_pages_min();
+ __setup_per_zone_pages_min();
setup_per_zone_lowmem_reserve();
return 0;
}
--
--
| David Miller | Slow DOWN, please!!! |
| Tomasz Kłoczko | Is it time for remove (crap) ALSA from kernel tree ? |
| holzheu | [RFC/PATCH] Documentation of kernel messages |
| Jiri Kosina | HID merge plans for 2.6.28 |
git: | |
| ir0s | Local branch ahead of tracked remote branch but git push claims everything up-to-d... |
| Elijah Newren | Trying to use git-filter-branch to compress history by removing large, obsolete bi... |
| Shawn O. Pearce | Re: pack operation is thrashing my server |
| Aubrey Li | git proxy issue |
| KOSAKI Motohiro | [bug?] tg3: Failed to load firmware "tigon/tg3_tso.bin" |
| Jussi Kivilinna | [PATCH 01/14] Fix sparse warning: returning void-valued expression |
| Roland Dreier | Re: setsockopt() |
| Shyam_Iyer | RE: [RFC][PATCH 1/1] cxgb3i: cxgb3 iSCSI initiator |
| L. V. Lammert | 'Nother broken package - git-1.5.4.2 |
| Jason Dixon | Wasting our Freedom |
| Pau | acer aspire one dmesg? |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| high memory | 57 minutes ago | Linux kernel |
| semaphore access speed | 3 hours ago | Applications and Utilities |
| the kernel how to power off the machine | 4 hours ago | Linux kernel |
| Easter Eggs in windows XP | 7 hours ago | Windows |
| Shared swap partition | 8 hours ago | Linux general |
| Root password | 8 hours ago | Linux general |
| Where/when DNOTIFY is used? | 10 hours ago | Linux kernel |
| How to convert Linux Kernel built-in module into a loadable module | 12 hours ago | Linux kernel |
| Linux 2.6.24 and I/O schedulers | 13 hours ago | Linux kernel |
| USB Driver -- Interrupt Polling -- A Little Help Please | 18 hours ago | Linux general |
