xref: /original-bsd/usr.sbin/amd/amd/ufs_ops.c (revision 065e4d72)
1398a5aebSmckusick /*
2398a5aebSmckusick  * Copyright (c) 1990 Jan-Simon Pendry
3398a5aebSmckusick  * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
44092c5ccSbostic  * Copyright (c) 1990, 1993
54092c5ccSbostic  *	The Regents of the University of California.  All rights reserved.
6398a5aebSmckusick  *
7398a5aebSmckusick  * This code is derived from software contributed to Berkeley by
8398a5aebSmckusick  * Jan-Simon Pendry at Imperial College, London.
9398a5aebSmckusick  *
10398a5aebSmckusick  * %sccs.include.redist.c%
11398a5aebSmckusick  *
12*065e4d72Spendry  *	@(#)ufs_ops.c	8.2 (Berkeley) 05/10/95
13c626267eSpendry  *
14cc0207dcSpendry  * $Id: ufs_ops.c,v 5.2.2.1 1992/02/09 15:09:08 jsp beta $
15c626267eSpendry  *
16398a5aebSmckusick  */
17398a5aebSmckusick 
18398a5aebSmckusick #include "am.h"
19398a5aebSmckusick 
20398a5aebSmckusick #ifdef HAS_UFS
21398a5aebSmckusick 
22398a5aebSmckusick #include <sys/stat.h>
23398a5aebSmckusick #ifdef NFS_3
24398a5aebSmckusick typedef nfs_fh fhandle_t;
25398a5aebSmckusick #endif /* NFS_3 */
26398a5aebSmckusick 
27*065e4d72Spendry #include <sys/mount.h>
28*065e4d72Spendry 
29398a5aebSmckusick #ifdef UFS_HDR
30398a5aebSmckusick #include UFS_HDR
31398a5aebSmckusick #endif /* UFS_HDR */
32398a5aebSmckusick 
33398a5aebSmckusick /*
34398a5aebSmckusick  * UN*X file system
35398a5aebSmckusick  */
36398a5aebSmckusick 
37398a5aebSmckusick /*
38398a5aebSmckusick  * UFS needs local filesystem and device.
39398a5aebSmckusick  */
408a89c22cSpendry static char *ufs_match P((am_opts *fo));
ufs_match(fo)418a89c22cSpendry static char *ufs_match(fo)
42398a5aebSmckusick am_opts *fo;
43398a5aebSmckusick {
44398a5aebSmckusick 	if (!fo->opt_dev) {
45398a5aebSmckusick 		plog(XLOG_USER, "ufs: no device specified");
46398a5aebSmckusick 		return 0;
47398a5aebSmckusick 	}
488a89c22cSpendry 
49398a5aebSmckusick #ifdef DEBUG
50398a5aebSmckusick 	dlog("UFS: mounting device \"%s\" on \"%s\"",
51398a5aebSmckusick 		fo->opt_dev, fo->opt_fs);
52398a5aebSmckusick #endif /* DEBUG */
53398a5aebSmckusick 
548a89c22cSpendry 	/*
558a89c22cSpendry 	 * Determine magic cookie to put in mtab
568a89c22cSpendry 	 */
578a89c22cSpendry 	return strdup(fo->opt_dev);
58398a5aebSmckusick }
59398a5aebSmckusick 
mount_ufs(dir,fs_name,opts)60398a5aebSmckusick static mount_ufs(dir, fs_name, opts)
61398a5aebSmckusick char *dir;
62398a5aebSmckusick char *fs_name;
63398a5aebSmckusick char *opts;
64398a5aebSmckusick {
65398a5aebSmckusick 	struct ufs_args ufs_args;
66398a5aebSmckusick 	struct mntent mnt;
67398a5aebSmckusick 	int flags;
68398a5aebSmckusick 
69398a5aebSmckusick 	/*
70398a5aebSmckusick 	 * Figure out the name of the file system type.
71398a5aebSmckusick 	 */
72398a5aebSmckusick #ifdef M_NEWTYPE
73398a5aebSmckusick 	char *type = MOUNT_TYPE_UFS;
74398a5aebSmckusick #else
75398a5aebSmckusick 	int type = MOUNT_TYPE_UFS;
76398a5aebSmckusick #endif /* M_NEWTYPE */
77398a5aebSmckusick 
78398a5aebSmckusick 	bzero((voidp) &ufs_args, sizeof(ufs_args));	/* Paranoid */
79398a5aebSmckusick 
80398a5aebSmckusick 	/*
81398a5aebSmckusick 	 * Fill in the mount structure
82398a5aebSmckusick 	 */
83398a5aebSmckusick 	mnt.mnt_dir = dir;
84398a5aebSmckusick 	mnt.mnt_fsname = fs_name;
85398a5aebSmckusick 	mnt.mnt_type = MTAB_TYPE_UFS;
86398a5aebSmckusick 	mnt.mnt_opts = opts;
87398a5aebSmckusick 	mnt.mnt_freq = 1;
88398a5aebSmckusick 	mnt.mnt_passno = 2;
89398a5aebSmckusick 
90398a5aebSmckusick 	flags = compute_mount_flags(&mnt);
91398a5aebSmckusick 
92398a5aebSmckusick #ifdef ULTRIX_HACK
93398a5aebSmckusick 	ufs_args.ufs_flags = flags;
94398a5aebSmckusick 	ufs_args.ufs_pgthresh = 64; /* 64K - XXX */
95398a5aebSmckusick 	flags &= M_RDONLY;
96398a5aebSmckusick #else
97398a5aebSmckusick 	ufs_args.fspec = fs_name;
98398a5aebSmckusick #endif /* ULTRIX_HACK */
99398a5aebSmckusick 
100398a5aebSmckusick 	/*
101398a5aebSmckusick 	 * Call generic mount routine
102398a5aebSmckusick 	 */
103398a5aebSmckusick 	return mount_fs(&mnt, flags, (caddr_t) &ufs_args, 0, type);
104398a5aebSmckusick }
105398a5aebSmckusick 
106398a5aebSmckusick /*ARGSUSED*/
ufs_fmount(mf)1078a89c22cSpendry static int ufs_fmount(mf)
1088a89c22cSpendry mntfs *mf;
109398a5aebSmckusick {
110398a5aebSmckusick 	int error;
111398a5aebSmckusick 
1128a89c22cSpendry 	error = mount_ufs(mf->mf_mount, mf->mf_info, mf->mf_mopts);
113398a5aebSmckusick 	if (error) {
114398a5aebSmckusick 		errno = error;
115398a5aebSmckusick 		plog(XLOG_ERROR, "mount_ufs: %m");
116398a5aebSmckusick 		return error;
117398a5aebSmckusick 	}
118398a5aebSmckusick 
119398a5aebSmckusick 	return 0;
120398a5aebSmckusick }
121398a5aebSmckusick 
ufs_fumount(mf)1228a89c22cSpendry static int ufs_fumount(mf)
1238a89c22cSpendry mntfs *mf;
124398a5aebSmckusick {
125398a5aebSmckusick 	return UMOUNT_FS(mf->mf_mount);
126398a5aebSmckusick }
127398a5aebSmckusick 
128398a5aebSmckusick /*
129398a5aebSmckusick  * Ops structure
130398a5aebSmckusick  */
131398a5aebSmckusick am_ops ufs_ops = {
132398a5aebSmckusick 	"ufs",
133398a5aebSmckusick 	ufs_match,
134398a5aebSmckusick 	0, /* ufs_init */
1358a89c22cSpendry 	auto_fmount,
1368a89c22cSpendry 	ufs_fmount,
1378a89c22cSpendry 	auto_fumount,
1388a89c22cSpendry 	ufs_fumount,
139398a5aebSmckusick 	efs_lookuppn,
140398a5aebSmckusick 	efs_readdir,
141398a5aebSmckusick 	0, /* ufs_readlink */
142398a5aebSmckusick 	0, /* ufs_mounted */
143398a5aebSmckusick 	0, /* ufs_umounted */
144398a5aebSmckusick 	find_afs_srvr,
145398a5aebSmckusick #ifdef FLUSH_KERNEL_NAME_CACHE
146398a5aebSmckusick 	FS_MKMNT|FS_NOTIMEOUT|FS_UBACKGROUND|FS_AMQINFO
147398a5aebSmckusick #else /* FLUSH_KERNEL_NAME_CACHE */
148398a5aebSmckusick 	FS_MKMNT|FS_NOTIMEOUT|FS_UBACKGROUND|FS_AMQINFO
149398a5aebSmckusick #endif /* FLUSH_KERNEL_NAME_CACHE */
150398a5aebSmckusick };
151398a5aebSmckusick 
152398a5aebSmckusick #endif /* HAS_UFS */
153