Home | History | Annotate | Download | only in objfs
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 /*
     22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     27 
     28 #include <sys/errno.h>
     29 #include <sys/file.h>
     30 #include <sys/objfs.h>
     31 #include <sys/objfs_impl.h>
     32 
     33 /*
     34  * For directories, make sure we are using large-file aware interfaces and we
     35  * aren't trying to open it writeable.
     36  */
     37 /* ARGSUSED */
     38 int
     39 objfs_dir_open(vnode_t **cpp, int flag, cred_t *cr,
     40     caller_context_t *ct)
     41 {
     42 	if ((flag & (FOFFMAX | FWRITE)) != FOFFMAX)
     43 		return (EINVAL);
     44 
     45 	return (0);
     46 }
     47 
     48 /*
     49  * For all vnodes which have no cleanup to do at close time.
     50  */
     51 /* ARGSUSED */
     52 int
     53 objfs_common_close(vnode_t *vp, int flag, int count, offset_t off, cred_t *cr,
     54     caller_context_t *ct)
     55 {
     56 	return (0);
     57 }
     58 
     59 /*
     60  * For directories, ensure we're not open for writing.
     61  */
     62 /* ARGSUSED */
     63 int
     64 objfs_dir_access(vnode_t *vp, int mode, int flags, cred_t *cr,
     65     caller_context_t *ct)
     66 {
     67 	if (mode & VWRITE)
     68 		return (EACCES);
     69 
     70 	return (0);
     71 }
     72 
     73 /*
     74  * Fills in common fields for getattr().
     75  */
     76 int
     77 objfs_common_getattr(vnode_t *vp, vattr_t *vap)
     78 {
     79 	vap->va_uid = 0;
     80 	vap->va_gid = 0;
     81 	vap->va_rdev = 0;
     82 	vap->va_blksize = DEV_BSIZE;
     83 	vap->va_nblocks = howmany(vap->va_size, vap->va_blksize);
     84 	vap->va_seq = 0;
     85 	vap->va_fsid = vp->v_vfsp->vfs_dev;
     86 
     87 	return (0);
     88 }
     89 
     90 /*
     91  * Returns the number objects currently loaded in the system.
     92  */
     93 int
     94 objfs_nobjs(void)
     95 {
     96 	int count = 0;
     97 	struct modctl *mp;
     98 
     99 	mutex_enter(&mod_lock);
    100 	mp = &modules;
    101 
    102 	do {
    103 		if (mp->mod_loaded)
    104 			count++;
    105 	} while ((mp = mp->mod_next) != &modules);
    106 
    107 	mutex_exit(&mod_lock);
    108 
    109 	return (count);
    110 }
    111