mount の修正2007年02月02日 13時00分18秒

mount プログラム 内部に全ての外部プログラムを列挙するのは不可能なのだ。

それなら、use_mountprog な内部で処理できるファイルシステム型を、把握していれば良い。


% cvs diff -u8
Index: mount.c
===================================================================
RCS file: /home/ncvs/src/sbin/mount/mount.c,v
retrieving revision 1.92
diff -u -u -8 -r1.92 mount.c
--- mount.c     14 Nov 2006 01:07:42 -0000      1.92
+++ mount.c     2 Feb 2007 02:18:27 -0000
@@ -128,28 +128,29 @@
 use_mountprog(const char *vfstype)
 {
        /* XXX: We need to get away from implementing external mount
         *      programs for every filesystem, and move towards having
         *      each filesystem properly implement the nmount() system call.
         */
        unsigned int i;
        const char *fs[] = {
-       "cd9660", "mfs", "msdosfs", "nfs", "nfs4", "ntfs",
-       "nwfs", "nullfs", "portalfs", "smbfs", "udf", "umapfs",
-       "unionfs",
+       "ufs",
+       "ext2fs",
+       "devfs", "fdescfs", "procfs", "linprocfs", "linsysfs",
+       "std",
        NULL
        };
 
        for (i = 0; fs[i] != NULL; ++i) {
                if (strcmp(vfstype, fs[i]) == 0)
-                       return (1);
+                       return (0);
        }

-       return (0);
+       return (1);
 }
 
 static int

コードのなかのコメントからして、外部プログラムを呼ぶのを止めて、nmount システムコールで各種ファイルシステムのマウントを実装する方向らしい。

マウントする為の作業は、ユーザランドの mount または 外部 mount コマンドを通してシステムコールを呼び出す作業が一つ。そして、システムコールにより、特定のメモリ領域をユーザがアクセス出来るように、管理する作業に分かれる。ufs、msdosfs、ext2fs などを代表とするマウントに関する主な作業は、後者の作業が大部分を締める。新しいファイルシステムを実装する場合の大方の作業は、カーネル内になる。mdmfs/mount_md の様な実装は例外的といってもいいだろう。

そのような事を考慮すると、mount が nmount システムコールの橋渡しに徹っし、カーネル内部で全てを処理するのも悪くはないのかもしれない。

前回