svn commit: r224294 - in head: sbin/mount sys/kern sys/sys
sys/ufs/ffs sys/ufs/ufs
Jilles Tjoelker
jilles at stack.nl
Mon Jul 25 22:32:25 UTC 2011
On Sun, Jul 24, 2011 at 06:27:09PM +0000, Kirk McKusick wrote:
> Author: mckusick
> Date: Sun Jul 24 18:27:09 2011
> New Revision: 224294
> URL: http://svn.freebsd.org/changeset/base/224294
> Log:
> Move the MNTK_SUJ flag in mnt_kern_flag to MNT_SUJ in mnt_flag
> so that it is visible to userland programs. This change enables
> the `mount' command with no arguments to be able to show if a
> filesystem is mounted using journaled soft updates as opposed
> to just normal soft updates.
> Approved by: re (bz)
[snip]
> Modified: head/sbin/mount/mount.c
> ==============================================================================
> --- head/sbin/mount/mount.c Sun Jul 24 18:16:14 2011 (r224293)
> +++ head/sbin/mount/mount.c Sun Jul 24 18:27:09 2011 (r224294)
[snip good change]
> @@ -316,7 +317,7 @@ main(int argc, char *argv[])
> rval = 0;
> switch (argc) {
> case 0:
> - if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
> + if ((mntsize = getmntinfo(&mntbuf, MNT_WAIT)) == 0)
> err(1, "getmntinfo");
> if (all) {
> while ((fs = getfsent()) != NULL) {
> @@ -665,7 +666,7 @@ getmntpt(const char *name)
> struct statfs *mntbuf;
> int i, mntsize;
>
> - mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
> + mntsize = getmntinfo(&mntbuf, MNT_WAIT);
> for (i = mntsize - 1; i >= 0; i--) {
> if (strcmp(mntbuf[i].f_mntfromname, name) == 0 ||
> strcmp(mntbuf[i].f_mntonname, name) == 0)
These two hunks make it impossible (or at least very hard) to do
'mount', 'mount -p' or 'mount -u <fs>' while there is a non-responsive
NFS filesystem.
The effect of the lines appears to be avoiding both "soft-updates" and
"journaled soft-updates" texts in mount output. This is because the code
in kern_getfsstat() in sys/kern/vfs_syscalls.c copies mp->mnt_flag and
subsequently calls VFS_STATFS in the MNT_WAIT case:
% /*
% * Set these in case the underlying filesystem
% * fails to do so.
% */
% sp->f_version = STATFS_VERSION;
% sp->f_namemax = NAME_MAX;
% sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
followed by code that will call VFS_STATFS(mp, sp) in the MNT_WAIT case.
Only in the latter case is MNT_SOFTDEP turned off if MNT_SUJ is on.
I don't think kern_getfsstat() should know about MNT_SOFTDEP and
MNT_SUJ, which would suggest giving up on preventing
MNT_SOFTDEP-with-MNT_SUJ in userland. However, what I care about is
mount(8) working while there are unrelated hung filesystems.
--
Jilles Tjoelker
More information about the svn-src-all
mailing list