[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++;

---
(藤原)