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 */
41int
42ufs_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 */
60int
61ufs_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 */
83int
84ufs_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