David Ford <david@kalifornia.com> writes:
> Very correct except for one thing, allocation fails and ipcs -u
> shows 4097 when the limit shows 4096. safemode reports that
> eventually the kernel crashes. This may be due to the test9
> 'features' and a side affect, or it may be something to keep in mind
> once we get things nailed down a bit.
Oh, yes that's a off by one error in the statistics. (I hate the
/dev/zero stuff...) There was also some incorrect double
accounting. The appended patch fixes this. Linus please apply. It
fixes obvious bugs.
Greetings
Christoph
--- linux/ipc/shm.c.orig Mon Sep 25 10:16:50 2000
+++ linux/ipc/shm.c Mon Sep 25 10:28:40 2000
@@ -206,7 +206,6 @@
/* some statistics */
static ulong swap_attempts;
static ulong swap_successes;
-static ulong used_segs;
void __init shm_init (void)
{
@@ -364,7 +363,9 @@
buf->f_blocks = shm_ctlall;
buf->f_bavail = buf->f_bfree = shm_ctlall - shm_tot;
buf->f_files = shm_ctlmni;
- buf->f_ffree = shm_ctlmni - used_segs;
+ shm_lockall();
+ buf->f_ffree = shm_ctlmni - shm_ids.in_use + 1;
+ shm_unlockall();
buf->f_namelen = SHM_NAME_LEN;
return 0;
}
@@ -593,7 +594,6 @@
if (doacc) {
shm_lockall();
shm_tot += pages;
- used_segs++;
shm_unlockall();
}
return ret;
@@ -646,7 +646,6 @@
shm_rss -= rss;
shm_swp -= swp;
shm_tot -= pages;
- used_segs--;
shm_unlockall();
}
}
@@ -970,7 +969,7 @@
memset(&shm_info,0,sizeof(shm_info));
shm_lockall();
- shm_info.used_ids = shm_ids.in_use;
+ shm_info.used_ids = shm_ids.in_use - 1; /* correct the /dev/zero hack */
shm_info.shm_rss = shm_rss;
shm_info.shm_tot = shm_tot;
shm_info.shm_swp = shm_swp;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Sep 30 2000 - 21:00:13 EST