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/ufs/ufs/ufs_vfsops.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  * SPDX-License-Identifier: BSD-3-Clause
    3  *
    4  * Copyright (c) 1991, 1993, 1994
    5  *      The Regents of the University of California.  All rights reserved.
    6  * (c) UNIX System Laboratories, Inc.
    7  * All or some portions of this file are derived from material licensed
    8  * to the University of California by American Telephone and Telegraph
    9  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
   10  * the permission of UNIX System Laboratories, Inc.
   11  *
   12  * Redistribution and use in source and binary forms, with or without
   13  * modification, are permitted provided that the following conditions
   14  * are met:
   15  * 1. Redistributions of source code must retain the above copyright
   16  *    notice, this list of conditions and the following disclaimer.
   17  * 2. Redistributions in binary form must reproduce the above copyright
   18  *    notice, this list of conditions and the following disclaimer in the
   19  *    documentation and/or other materials provided with the distribution.
   20  * 3. Neither the name of the University nor the names of its contributors
   21  *    may be used to endorse or promote products derived from this software
   22  *    without specific prior written permission.
   23  *
   24  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   34  * SUCH DAMAGE.
   35  *
   36  *      @(#)ufs_vfsops.c        8.8 (Berkeley) 5/20/95
   37  */
   38 
   39 #include <sys/cdefs.h>
   40 __FBSDID("$FreeBSD$");
   41 
   42 #include "opt_quota.h"
   43 #include "opt_ufs.h"
   44 
   45 #include <sys/param.h>
   46 #include <sys/systm.h>
   47 #include <sys/kernel.h>
   48 #include <sys/lock.h>
   49 #include <sys/malloc.h>
   50 #include <sys/mount.h>
   51 #include <sys/proc.h>
   52 #include <sys/socket.h>
   53 #include <sys/vnode.h>
   54 
   55 #include <ufs/ufs/extattr.h>
   56 #include <ufs/ufs/quota.h>
   57 #include <ufs/ufs/inode.h>
   58 #include <ufs/ufs/ufsmount.h>
   59 #include <ufs/ufs/ufs_extern.h>
   60 #ifdef UFS_DIRHASH
   61 #include <ufs/ufs/dir.h>
   62 #include <ufs/ufs/dirhash.h>
   63 #endif
   64 
   65 MALLOC_DEFINE(M_UFSMNT, "ufs_mount", "UFS mount structure");
   66 
   67 /*
   68  * Return the root of a filesystem.
   69  */
   70 int
   71 ufs_root(struct mount *mp, int flags, struct vnode **vpp)
   72 {
   73         struct vnode *nvp;
   74         int error;
   75 
   76         error = VFS_VGET(mp, (ino_t)UFS_ROOTINO, flags, &nvp);
   77         if (error)
   78                 return (error);
   79         *vpp = nvp;
   80         return (0);
   81 }
   82 
   83 /*
   84  * Do operations associated with quotas
   85  */
   86 int
   87 ufs_quotactl(struct mount *mp, int cmds, uid_t id, void *arg, bool *mp_busy)
   88 {
   89 #ifndef QUOTA
   90         return (EOPNOTSUPP);
   91 #else
   92         struct thread *td;
   93         int cmd, type, error;
   94 
   95         td = curthread;
   96         cmd = cmds >> SUBCMDSHIFT;
   97         type = cmds & SUBCMDMASK;
   98         if (id == -1) {
   99                 switch (type) {
  100                 case USRQUOTA:
  101                         id = td->td_ucred->cr_ruid;
  102                         break;
  103 
  104                 case GRPQUOTA:
  105                         id = td->td_ucred->cr_rgid;
  106                         break;
  107 
  108                 default:
  109                         return (EINVAL);
  110                 }
  111         }
  112         if ((u_int)type >= MAXQUOTAS)
  113                 return (EINVAL);
  114 
  115         switch (cmd) {
  116         case Q_QUOTAON:
  117                 error = quotaon(td, mp, type, arg, mp_busy);
  118                 break;
  119 
  120         case Q_QUOTAOFF:
  121                 vfs_ref(mp);
  122                 KASSERT(*mp_busy,
  123                     ("%s called without busied mount", __func__));
  124                 vn_start_write(NULL, &mp, V_WAIT);
  125                 vfs_unbusy(mp);
  126                 *mp_busy = false;
  127                 error = quotaoff(td, mp, type);
  128                 vn_finished_write(mp);
  129                 vfs_rel(mp);
  130                 break;
  131 
  132         case Q_SETQUOTA32:
  133                 error = setquota32(td, mp, id, type, arg);
  134                 break;
  135 
  136         case Q_SETUSE32:
  137                 error = setuse32(td, mp, id, type, arg);
  138                 break;
  139 
  140         case Q_GETQUOTA32:
  141                 error = getquota32(td, mp, id, type, arg);
  142                 break;
  143 
  144         case Q_SETQUOTA:
  145                 error = setquota(td, mp, id, type, arg);
  146                 break;
  147 
  148         case Q_SETUSE:
  149                 error = setuse(td, mp, id, type, arg);
  150                 break;
  151 
  152         case Q_GETQUOTA:
  153                 error = getquota(td, mp, id, type, arg);
  154                 break;
  155 
  156         case Q_GETQUOTASIZE:
  157                 error = getquotasize(td, mp, id, type, arg);
  158                 break;
  159 
  160         case Q_SYNC:
  161                 error = qsync(mp);
  162                 break;
  163 
  164         default:
  165                 error = EINVAL;
  166                 break;
  167         }
  168         return (error);
  169 #endif
  170 }
  171 
  172 /*
  173  * Initial UFS filesystems, done only once.
  174  */
  175 int
  176 ufs_init(struct vfsconf *vfsp)
  177 {
  178 
  179 #ifdef QUOTA
  180         dqinit();
  181 #endif
  182 #ifdef UFS_DIRHASH
  183         ufsdirhash_init();
  184 #endif
  185         return (0);
  186 }
  187 
  188 /*
  189  * Uninitialise UFS filesystems, done before module unload.
  190  */
  191 int
  192 ufs_uninit(struct vfsconf *vfsp)
  193 {
  194 
  195 #ifdef QUOTA
  196         dquninit();
  197 #endif
  198 #ifdef UFS_DIRHASH
  199         ufsdirhash_uninit();
  200 #endif
  201         return (0);
  202 }

Cache object: 804f3117672cec55c6e228a32a65a48a


[ 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.