The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/coda/coda_fbsd.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * 
    3  *             Coda: an Experimental Distributed File System
    4  *                              Release 3.1
    5  * 
    6  *           Copyright (c) 1987-1998 Carnegie Mellon University
    7  *                          All Rights Reserved
    8  * 
    9  * Permission  to  use, copy, modify and distribute this software and its
   10  * documentation is hereby granted,  provided  that  both  the  copyright
   11  * notice  and  this  permission  notice  appear  in  all  copies  of the
   12  * software, derivative works or  modified  versions,  and  any  portions
   13  * thereof, and that both notices appear in supporting documentation, and
   14  * that credit is given to Carnegie Mellon University  in  all  documents
   15  * and publicity pertaining to direct or indirect use of this code or its
   16  * derivatives.
   17  * 
   18  * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
   19  * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
   20  * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
   21  * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
   22  * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
   23  * ANY DERIVATIVE WORK.
   24  * 
   25  * Carnegie  Mellon  encourages  users  of  this  software  to return any
   26  * improvements or extensions that  they  make,  and  to  grant  Carnegie
   27  * Mellon the rights to redistribute these changes without encumbrance.
   28  * 
   29  *      @(#) src/sys/coda/coda_fbsd.cr,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
   30  * $FreeBSD$
   31  * 
   32  */
   33 
   34 #include "vcoda.h"
   35 #include "opt_devfs.h"
   36 
   37 #include <sys/param.h>
   38 #include <sys/systm.h>
   39 #include <sys/kernel.h>
   40 #include <sys/proc.h>
   41 #include <sys/malloc.h>
   42 #include <sys/fcntl.h>
   43 #include <sys/ucred.h>
   44 #include <sys/vnode.h>
   45 #include <sys/conf.h>
   46 
   47 #include <vm/vm.h>
   48 #include <vm/vnode_pager.h>
   49 
   50 #include <coda/coda.h>
   51 #include <coda/cnode.h>
   52 #include <coda/coda_vnops.h>
   53 #include <coda/coda_psdev.h>
   54 
   55 #ifdef DEVFS
   56 #include <sys/devfsext.h>
   57 
   58 static  void    *cfs_devfs_token[NVCODA];
   59 static  void    *coda_devfs_token[NVCODA];
   60 #endif
   61 
   62 /* 
   63    From: "Jordan K. Hubbard" <jkh@time.cdrom.com>
   64    Subject: Re: New 3.0 SNAPshot CDROM about ready for production.. 
   65    To: "Robert.V.Baron" <rvb@GLUCK.CODA.CS.CMU.EDU>
   66    Date: Fri, 20 Feb 1998 15:57:01 -0800
   67 
   68    > Also I need a character device major number. (and might want to reserve
   69    > a block of 10 syscalls.)
   70 
   71    Just one char device number?  No block devices?  Very well, cdev 93 is yours!
   72 */
   73 
   74 #define VC_DEV_NO      93
   75 
   76 static struct cdevsw codadevsw =
   77 { 
   78   vc_nb_open,      vc_nb_close,    vc_nb_read,        vc_nb_write,      /*93*/
   79   vc_nb_ioctl,     nostop,         nullreset,         nodevtotty,
   80   vc_nb_poll,      nommap,         NULL,              "Coda", NULL, -1 
   81 };
   82 
   83 int     vcdebug = 1;
   84 #define VCDEBUG if (vcdebug) printf
   85 
   86 static int
   87 codadev_modevent(module_t mod, int type, void *data)
   88 {
   89         dev_t dev;
   90 #ifdef DEVFS
   91         int i;
   92 #endif
   93         static struct cdevsw *oldcdevsw;
   94 
   95         switch (type) {
   96         case MOD_LOAD:
   97                 dev = makedev(VC_DEV_NO, 0);
   98                 cdevsw_add(&dev,&codadevsw, &oldcdevsw);
   99 #ifdef DEVFS
  100                 /* tmp */
  101 #undef  NVCODA
  102 #define NVCODA 1
  103                 for (i = 0; i < NVCODA; i++) {
  104                         cfs_devfs_token[i] =
  105                                 devfs_add_devswf(&codadevsw, i,
  106                                         DV_CHR, UID_ROOT, GID_WHEEL, 0666,
  107                                         "cfs%d", i);
  108                         coda_devfs_token[i] =
  109                                 devfs_add_devswf(&codadevsw, i,
  110                                         DV_CHR, UID_ROOT, GID_WHEEL, 0666,
  111                                         "coda%d", i);
  112                 }
  113 #endif
  114                 break;
  115         case MOD_UNLOAD:
  116 #ifdef DEVFS
  117                 for (i = 0; i < NVCODA; i++) {
  118                         devfs_remove_dev(cfs_devfs_token[i]);
  119                         devfs_remove_dev(coda_devfs_token[i]);
  120                 }
  121 #endif
  122                 cdevsw_add(&dev, oldcdevsw, NULL);
  123                 break;
  124         default:
  125                 break;
  126         }
  127         return 0;
  128 }
  129 static moduledata_t codadev_mod = {
  130         "codadev",
  131         codadev_modevent,
  132         NULL
  133 };
  134 DECLARE_MODULE(codadev, codadev_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE+VC_DEV_NO);
  135 
  136 int
  137 coda_fbsd_getpages(v)
  138         void *v;
  139 {
  140     struct vop_getpages_args *ap = v;
  141     int ret = 0;
  142 
  143 #if     1
  144         /* ??? a_offset */
  145         ret = vnode_pager_generic_getpages(ap->a_vp, ap->a_m, ap->a_count,
  146                 ap->a_reqpage);
  147         return ret;
  148 #else
  149   {
  150     struct vnode *vp = ap->a_vp;
  151     struct cnode *cp = VTOC(vp);
  152     struct vnode *cfvp = cp->c_ovp;
  153     int opened_internally = 0;
  154     struct ucred *cred = (struct ucred *) 0;
  155     struct proc *p = curproc;
  156     int error = 0;
  157         
  158     if (IS_CTL_VP(vp)) {
  159         return(EINVAL);
  160     }
  161 
  162     /* Redirect the request to UFS. */
  163 
  164     if (cfvp == NULL) {
  165         opened_internally = 1;
  166 
  167         error = VOP_OPEN(vp, FREAD,  cred, p);
  168 printf("coda_getp: Internally Opening %p\n", vp);
  169 
  170         if (error) {
  171             printf("coda_getpage: VOP_OPEN on container failed %d\n", error);
  172                 return (error);
  173         }
  174         if (vp->v_type == VREG) {
  175             error = vfs_object_create(vp, p, cred);
  176             if (error != 0) {
  177                 printf("coda_getpage: vfs_object_create() returns %d\n", error);
  178                 vput(vp);
  179                 return(error);
  180             }
  181         }
  182 
  183         cfvp = cp->c_ovp;
  184     } else {
  185 printf("coda_getp: has container %p\n", cfvp);
  186     }
  187 
  188 printf("coda_fbsd_getpages: using container ");
  189 /*
  190     error = vnode_pager_generic_getpages(cfvp, ap->a_m, ap->a_count,
  191         ap->a_reqpage);
  192 */
  193     error = VOP_GETPAGES(cfvp, ap->a_m, ap->a_count,
  194         ap->a_reqpage, ap->a_offset);
  195 printf("error = %d\n", error);
  196 
  197     /* Do an internal close if necessary. */
  198     if (opened_internally) {
  199         (void)VOP_CLOSE(vp, FREAD, cred, p);
  200     }
  201 
  202     return(error);
  203   }
  204 #endif
  205 }
  206 
  207 int
  208 coda_fbsd_putpages(v)
  209         void *v;
  210 {
  211         struct vop_putpages_args *ap = v;
  212 
  213         /*??? a_offset */
  214         return vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count,
  215                 ap->a_sync, ap->a_rtvals);
  216 }

Cache object: 94652c3d8ca2cc58342726f74c83658a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.