[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
__vfork14 ? ( Re: proc: table is full - increase kern.maxproc or NPROC)
> 千葉市中央区長洲
> 藤原 誠
全て snapshot/20010806 を使っている時の話です。
mount_ffs だけは 20010618 を入れておくと、一応動くので
sys/kern/kern_fork.c を最後のように変更したものを使って、
cdrom を載せて見ると下のようになります。つまり || のどちらか
なと思っ たので分けて見ただけですが。
この辺で 何か debug print したい時は何を使うのが普通でしょうか。
mount_ffs の中に __vfork14 というのが入っていますが、これは
(a) make する時に、下に書いた(ような)ものを static に link している
(b) そうではなくて kernel の中を呼出している
という疑問があるのですが、
・mount_ffs を入替ると、(mount 出来たり出来なかったりする)ので (a)
・でも下のように kernel を入替ると、動作はそれに依存するので (b)
となり、僕の理解を超えています。
(僕の理解を超えているものはこれに限ったことでなく NetBSD の殆ん
どの部分という説もありますが:-)
本当は(b)で、mount_ffs を入替えると○×するのは呼出し方が悪いのかな
と思うのですが、確かその辺は何も変更がないですよね。
http://cvsweb.netbsd.org/cgi-bin/cvsweb.cgi/basesrc/sbin/mount/?sortby=date#dirlist
----------------------------------------------------------------
i# mount -t cd9660 /dev/cd0c /cdrom
Aug 14 23:56:42 i /netbsd: proc: table is full - (2) increase kern.maxproc or NPROC
mount_cd9660: vfork: Resource temporarily unavailable
Aug 14 23:56:42 i /netbsd: proc: table is full - (2) increase kern.maxproc or NPROC
--- /export/20010801/sys/kern/kern_fork.c Sun Jul 8 08:33:54 2001
+++ /export/20010806/sys/kern/kern_fork.c Wed Aug 15 08:47:31 2001
@@ -202,9 +202,13 @@
* processes, maxproc is the limit.
*/
uid = p1->p_cred->p_ruid;
- if (__predict_false((nprocs >= maxproc - 1 && uid != 0) ||
- nprocs >= maxproc)) {
- tablefull("proc", "increase kern.maxproc or NPROC");
+ if (__predict_false(nprocs >= maxproc - 1 && uid != 0)) {
+ tablefull("proc", "(1) increase kern.maxproc or NPROC");
+ return (EAGAIN);
+ }
+ if (
+ nprocs >= maxproc ) {
+ tablefull("proc", "(2) increase kern.maxproc or NPROC");
return (EAGAIN);
}
nprocs++;
---
(藤原)