Home | History | Annotate | Download | only in ufs
      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, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*
     23  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     28 
     29 #include <sys/systm.h>
     30 #include <sys/vnode.h>
     31 #include <sys/uio.h>
     32 #include <sys/errno.h>
     33 #include <sys/fs/ufs_inode.h>
     34 
     35 #include <sys/fs/ufs_filio.h>
     36 #include <sys/fs/ufs_log.h>
     37 #include <sys/sunddi.h>
     38 #include <sys/file.h>
     39 
     40 /* ARGSUSED */
     41 int
     42 ufs_fiologenable(vnode_t *vp, fiolog_t *ufl, cred_t *cr, int flags)
     43 {
     44 	int		error = 0;
     45 	fiolog_t	fl;
     46 
     47 	/*
     48 	 * Enable logging
     49 	 */
     50 	if (ddi_copyin(ufl, &fl, sizeof (fl), flags))
     51 		return (EFAULT);
     52 	error = lufs_enable(vp, &fl, cr);
     53 	if (ddi_copyout(&fl, ufl, sizeof (*ufl), flags))
     54 		return (EFAULT);
     55 
     56 	return (error);
     57 }
     58 
     59 /* ARGSUSED */
     60 int
     61 ufs_fiologdisable(vnode_t *vp, fiolog_t *ufl, cred_t *cr, int flags)
     62 {
     63 	int		error = 0;
     64 	struct fiolog	fl;
     65 
     66 	/*
     67 	 * Disable logging
     68 	 */
     69 	if (ddi_copyin(ufl, &fl, sizeof (fl), flags))
     70 		return (EFAULT);
     71 	error = lufs_disable(vp, &fl);
     72 	if (ddi_copyout(&fl, ufl, sizeof (*ufl), flags))
     73 		return (EFAULT);
     74 
     75 	return (error);
     76 }
     77 
     78 /*
     79  * ufs_fioislog
     80  *	Return true if log is present and active; otherwise false
     81  */
     82 /* ARGSUSED */
     83 int
     84 ufs_fioislog(vnode_t *vp, uint32_t *islog, cred_t *cr, int flags)
     85 {
     86 	ufsvfs_t	*ufsvfsp	= VTOI(vp)->i_ufsvfs;
     87 	int		active;
     88 
     89 	active = (ufsvfsp && ufsvfsp->vfs_log);
     90 	if (flags & FKIOCTL)
     91 		*islog = active;
     92 	else if (suword32(islog, active))
     93 		return (EFAULT);
     94 	return (0);
     95 }
     96