Date: Wed, 12 Jul 2006 12:32:45 +0200 From: des@des.no (Dag-Erling =?iso-8859-1?Q?Sm=F8rgrav?=) To: Brooks Davis <brooks@one-eyed-alien.net> Cc: rc@freebsd.org Subject: Re: loopback mounts Message-ID: <86hd1ndsfm.fsf@xps.des.no> In-Reply-To: <20060711165409.GA459@odin.ac.hmc.edu> (Brooks Davis's message of "Tue, 11 Jul 2006 09:54:09 -0700") References: <86odvwzjjz.fsf@xps.des.no> <20060711155312.GA20418@odin.ac.hmc.edu> <86ac7gqeal.fsf@xps.des.no> <20060711165409.GA459@odin.ac.hmc.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Brooks Davis <brooks@one-eyed-alien.net> writes:
> On Tue, Jul 11, 2006 at 06:47:30PM +0200, Dag-Erling Smørgrav wrote:
> > You don't need any extra fields - just add "late" to the options
> > column and teach mount(8) to ignore it.
> Sorry, poor terminology on my part. That's what I meant to suggest.
OK, see attached patch.
DES
--
Dag-Erling Smørgrav - des@des.no
[-- Attachment #2 --]
Index: sbin/mount/mount.8
===================================================================
RCS file: /home/ncvs/src/sbin/mount/mount.8,v
retrieving revision 1.77
diff -u -r1.77 mount.8
--- sbin/mount/mount.8 19 May 2006 00:04:18 -0000 1.77
+++ sbin/mount/mount.8 12 Jul 2006 06:43:28 -0000
@@ -28,7 +28,7 @@
.\" @(#)mount.8 8.8 (Berkeley) 6/16/94
.\" $FreeBSD: src/sbin/mount/mount.8,v 1.77 2006/05/19 00:04:18 rodrigc Exp $
.\"
-.Dd November 26, 2004
+.Dd July 12, 2006
.Dt MOUNT 8
.Os
.Sh NAME
@@ -36,7 +36,7 @@
.Nd mount file systems
.Sh SYNOPSIS
.Nm
-.Op Fl adfpruvw
+.Op Fl adflpruvw
.Op Fl F Ar fstab
.Op Fl o Ar options
.Op Fl t Ar ufs | external_type
@@ -78,7 +78,12 @@
are mounted.
Exceptions are those marked as
.Dq noauto ,
-excluded by the
+those marked as
+.Dq late
+(unless the
+.Fl l
+option was specified),
+those excluded by the
.Fl t
flag (see below), or if they are already mounted (except the
root file system which is always remounted to preserve
@@ -101,6 +106,15 @@
Also
forces the R/W mount of an unclean file system (dangerous; use with
caution).
+.It Fl l
+When used in conjunction with the
+.Fl a
+option, also mount those file systems which are marked as
+.Dq late .
+.Xr fstab 5
+marked as
+.Dq late
+are mounted.
.It Fl o
Options are specified with a
.Fl o
@@ -142,6 +156,13 @@
flag, this is the same as specifying all the options listed in the
.Xr fstab 5
file for the file system.
+.It Cm late
+This file system should be skipped when
+.Nm is run with the
+.Fl a
+flag but without the
+.Fl l
+flag.
.It Cm multilabel
Enable multi-label Mandatory Access Control, or MAC, on the specified file
system.
Index: sbin/mount/mount.c
===================================================================
RCS file: /home/ncvs/src/sbin/mount/mount.c,v
retrieving revision 1.87
diff -u -r1.87 mount.c
--- sbin/mount/mount.c 10 Jun 2006 01:44:57 -0000 1.87
+++ sbin/mount/mount.c 12 Jul 2006 06:40:26 -0000
@@ -191,17 +191,17 @@
struct statfs *mntbuf;
FILE *mountdfp;
pid_t pid;
- int all, ch, i, init_flags, mntsize, rval, have_fstab;
+ int all, ch, i, init_flags, late, mntsize, rval, have_fstab;
char *cp, *ep, *options;
options = strdup("noro");
if (options == NULL)
errx(1, "malloc failed");
- all = init_flags = 0;
+ all = init_flags = late = 0;
vfslist = NULL;
vfstype = "ufs";
- while ((ch = getopt(argc, argv, "adF:fo:prwt:uv")) != -1)
+ while ((ch = getopt(argc, argv, "adlF:fo:prwt:uv")) != -1)
switch (ch) {
case 'a':
all = 1;
@@ -215,6 +215,9 @@
case 'f':
init_flags |= MNT_FORCE;
break;
+ case 'l':
+ late = 1;
+ break;
case 'o':
options = catopt(options, optarg);
break;
@@ -265,6 +268,8 @@
continue;
if (hasopt(fs->fs_mntops, "noauto"))
continue;
+ if (hasopt(fs->fs_mntops, "late") && !late)
+ continue;
if (!(init_flags & MNT_UPDATE) &&
ismounted(fs, mntbuf, mntsize))
continue;
@@ -628,6 +633,15 @@
* not a real mount option.
*/
continue;
+ } else if (strcmp(p, "late") == 0) {
+ /*
+ * "late" is used to prevent certain file
+ * systems from being mounted before late
+ * in the boot cycle; for instance,
+ * loopback NFS mounts can't be mounted
+ * before mountd starts.
+ */
+ continue;
} else if (strcmp(p, "userquota") == 0) {
continue;
} else if (strncmp(p, userquotaeq,
@@ -737,7 +751,7 @@
{
(void)fprintf(stderr, "%s\n%s\n%s\n",
-"usage: mount [-adfpruvw] [-F fstab] [-o options] [-t ufs | external_type]",
+"usage: mount [-adflpruvw] [-F fstab] [-o options] [-t ufs | external_type]",
" mount [-dfpruvw] special | node",
" mount [-dfpruvw] [-o options] [-t ufs | external_type] special node");
exit(1);
Index: etc/rc.d/Makefile
===================================================================
RCS file: /home/ncvs/src/etc/rc.d/Makefile,v
retrieving revision 1.73
diff -u -r1.73 Makefile
--- etc/rc.d/Makefile 1 Jun 2006 11:01:54 -0000 1.73
+++ etc/rc.d/Makefile 12 Jul 2006 07:17:35 -0000
@@ -21,7 +21,7 @@
jail \
kadmind kerberos kernel keyserv kldxref kpasswdd \
ldconfig local localpkg lpd \
- mixer motd mountcritlocal mountcritremote \
+ mixer motd mountcritlocal mountcritremote mountlate \
mdconfig mdconfig2 mountd moused mroute6d mrouted msgs \
named natd netif netoptions \
network_ipv6 newsyslog nfsclient nfsd \
Index: etc/rc.d/mountlate
===================================================================
RCS file: etc/rc.d/mountlate
diff -N etc/rc.d/mountlate
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ etc/rc.d/mountlate 12 Jul 2006 07:17:13 -0000
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: mountlate
+# REQUIRE: mountd
+# BEFORE: DAEMON
+# KEYWORD: nojail
+
+. /etc/rc.subr
+
+name="mountlate"
+start_cmd="mountlate_start"
+stop_cmd=":"
+
+mountlate_start()
+{
+ # Mount "late" filesystems.
+ mount -a -l
+
+ case $? in
+ 0)
+ ;;
+ *)
+ echo 'Mounting /etc/fstab filesystems failed,' \
+ ' startup aborted'
+ kill -QUIT $$
+ ;;
+ esac
+}
+
+load_rc_config $name
+run_rc_command "$1"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86hd1ndsfm.fsf>
