Home | History | Annotate | Line # | Download | only in genfs
      1 /*	$NetBSD: genfs_vfsops.c,v 1.11 2022/07/08 07:42:06 hannken Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2008, 2009, 2019 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  * POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #include <sys/cdefs.h>
     30 __KERNEL_RCSID(0, "$NetBSD: genfs_vfsops.c,v 1.11 2022/07/08 07:42:06 hannken Exp $");
     31 
     32 #include <sys/types.h>
     33 #include <sys/mount.h>
     34 #include <sys/fstrans.h>
     35 #include <sys/statvfs.h>
     36 #include <sys/vnode.h>
     37 
     38 #include <miscfs/genfs/genfs.h>
     39 #include <miscfs/genfs/genfs_node.h>
     40 
     41 int
     42 genfs_statvfs(struct mount *mp, struct statvfs *sbp)
     43 {
     44 
     45 	sbp->f_bsize = DEV_BSIZE;
     46 	sbp->f_frsize = DEV_BSIZE;
     47 	sbp->f_iosize = DEV_BSIZE;
     48 	sbp->f_blocks = 2;		/* 1k to keep df happy */
     49 	sbp->f_bfree = 0;
     50 	sbp->f_bavail = 0;
     51 	sbp->f_bresvd = 0;
     52 	sbp->f_files = 0;
     53 	sbp->f_ffree = 0;
     54 	sbp->f_favail = 0;
     55 	sbp->f_fresvd = 0;
     56 	copy_statvfs_info(sbp, mp);
     57 
     58 	return 0;
     59 }
     60 
     61 int
     62 genfs_renamelock_enter(struct mount *mp)
     63 {
     64 	mutex_enter(mp->mnt_renamelock);
     65 	/* Preserve possible error return in case we become interruptible. */
     66 	return 0;
     67 }
     68 
     69 void
     70 genfs_renamelock_exit(struct mount *mp)
     71 {
     72 	mutex_exit(mp->mnt_renamelock);
     73 }
     74 
     75 int
     76 genfs_suspendctl(struct mount *mp, int cmd)
     77 {
     78 	int error;
     79 
     80 	switch (cmd) {
     81 	case SUSPEND_SUSPEND:
     82 		error = fstrans_setstate(mp, FSTRANS_SUSPENDING);
     83 		if (error)
     84 			return error;
     85 		error = fstrans_setstate(mp, FSTRANS_SUSPENDED);
     86 		return error;
     87 
     88 	case SUSPEND_RESUME:
     89 		error = fstrans_setstate(mp, FSTRANS_NORMAL);
     90 		KASSERT(error == 0);
     91 		return 0;
     92 
     93 	default:
     94 		panic("%s: bogus command %d", __func__, cmd);
     95 	}
     96 }
     97