トップ 一覧 Farm 検索 ヘルプ RSS ログイン

FreeBSDmsdosfsの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category FreeBSD}}

!!!FreeBSDのmsdosfsの実装より

!!FreeBSD 5.1-RELEASEのソースコードより

!VNODEに関する操作?

/sys/fs/msdosfs/msdosfs_vnops.c

 /* Global vfs data structures for msdosfs */
 vop_t **msdosfs_vnodeop_p;
 static struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = {
     { &vop_default_desc,        (vop_t *) vop_defaultop },
     { &vop_access_desc,     (vop_t *) msdosfs_access },
     { &vop_bmap_desc,       (vop_t *) msdosfs_bmap },
     { &vop_cachedlookup_desc,   (vop_t *) msdosfs_lookup },
     { &vop_close_desc,      (vop_t *) msdosfs_close },
     { &vop_create_desc,     (vop_t *) msdosfs_create },
     { &vop_fsync_desc,      (vop_t *) msdosfs_fsync },
     { &vop_getattr_desc,        (vop_t *) msdosfs_getattr },
     { &vop_inactive_desc,       (vop_t *) msdosfs_inactive },
     { &vop_link_desc,       (vop_t *) msdosfs_link },
     { &vop_lookup_desc,     (vop_t *) vfs_cache_lookup },
     { &vop_mkdir_desc,      (vop_t *) msdosfs_mkdir },
     { &vop_mknod_desc,      (vop_t *) msdosfs_mknod },
     { &vop_pathconf_desc,       (vop_t *) msdosfs_pathconf },
     { &vop_print_desc,      (vop_t *) msdosfs_print },
     { &vop_read_desc,       (vop_t *) msdosfs_read },
     { &vop_readdir_desc,        (vop_t *) msdosfs_readdir },
     { &vop_reclaim_desc,        (vop_t *) msdosfs_reclaim },
     { &vop_remove_desc,     (vop_t *) msdosfs_remove },
     { &vop_rename_desc,     (vop_t *) msdosfs_rename },
     { &vop_rmdir_desc,      (vop_t *) msdosfs_rmdir },
     { &vop_setattr_desc,        (vop_t *) msdosfs_setattr },
     { &vop_strategy_desc,       (vop_t *) msdosfs_strategy },
     { &vop_symlink_desc,        (vop_t *) msdosfs_symlink },
     { &vop_write_desc,      (vop_t *) msdosfs_write },
     { NULL, NULL }
 };
 static struct vnodeopv_desc msdosfs_vnodeop_opv_desc =
     { &msdosfs_vnodeop_p, msdosfs_vnodeop_entries };

!VFSとしてのインターフェース?

/sys/fs/msdosfs/msdosfs_vfsops.c

 static struct vfsops msdosfs_vfsops = {
     .vfs_fhtovp =       msdosfs_fhtovp,
     .vfs_init =     msdosfs_init,
     .vfs_mount =        msdosfs_mount,
     .vfs_root =     msdosfs_root,
     .vfs_statfs =       msdosfs_statfs,
     .vfs_sync =     msdosfs_sync,
     .vfs_uninit =       msdosfs_uninit,
     .vfs_unmount =      msdosfs_unmount,
     .vfs_vptofh =       msdosfs_vptofh,
 };

!init関数?

/sys/fs/msdosfs/msdosfs_denode.c

 /*ARGSUSED*/
 int
 msdosfs_init(vfsp)
     struct vfsconf *vfsp;
 {
     /*
      * The following lines prevent us from initializing the mutex
      * init multiple times.  I'm not sure why we get called multiple
      * times, but the following prevents the panic when we initalize
      * the mutext the second time.  XXX BAD XXX
      */
     if (dehash_init) {
         printf("Warning: msdosfs_init called more than once!?n");
         return (0);
     }
     dehash_init++;
     dehashtbl = hashinit(desiredvnodes/2, M_MSDOSFSMNT, &dehash);
     mtx_init(&dehash_mtx, "msdosfs dehash", NULL, MTX_DEF);
     return (0);
 }

!struct vfsconf

/usr/include/sys/mount.h

 /*
  * Filesystem configuration information. One of these exists for each
  * type of filesystem supported by the kernel. These are searched at
  * mount time to identify the requested filesystem.
  */
 struct vfsconf {
     struct  vfsops *vfc_vfsops; /* filesystem operations vector */
     char    vfc_name[MFSNAMELEN];   /* filesystem type name */
     int vfc_typenum;        /* historic filesystem type number */
     int vfc_refcount;       /* number mounted of this type */
     int vfc_flags;      /* permanent flags */
     struct  vfsoptdecl *vfc_opts;   /* mount options */
     struct  vfsconf *vfc_next;  /* next in list */
 };

!ユーザーランド?気になる

 /* Userland version of the struct vfsconf. */
 struct xvfsconf{...}