mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-23 11:18:54 +00:00
From njw@cs.city.ac.uk (Nick Williams):
/sbin/umount does not return the correct exit status due to incorrect logic in its internals. Further, because of the nature of the code, you *cannot* use it to umount a directory from a union mountpoint. Well, you can sometimes, it depends on if the directory is at the top of the union stack or not :) Submitted by: njw@cs.city.ac.uk (Nick Williams)
This commit is contained in:
parent
fce9eaf109
commit
5974081cea
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=4142
@ -116,6 +116,28 @@ file system table
|
||||
.Xr unmount 2 ,
|
||||
.Xr fstab 5 ,
|
||||
.Xr mount 8
|
||||
.Sh BUGS
|
||||
When using union filesystems,
|
||||
.Xr umount 8
|
||||
cannot always determine the node which is the mountpoint.
|
||||
In this case,
|
||||
it is necessary to specify the relevant directory to be unmounted
|
||||
in the same form as that displayed by
|
||||
.Xr mount 8 .
|
||||
For example, given a mount entry like this:
|
||||
.Bd -literal -offset indent
|
||||
<above>/tmpdir on /cdrom (local, user mount)
|
||||
.Ed
|
||||
.Pp
|
||||
then the command:
|
||||
.Bd -literal -offset indent
|
||||
umount '<above>/tmpdir'
|
||||
.Ed
|
||||
.Pp
|
||||
would unmount
|
||||
.Ar /tmpdir
|
||||
from the mountpoint
|
||||
.Ar /cdrom .
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Nm umount
|
||||
|
@ -128,8 +128,7 @@ main(argc, argv)
|
||||
errs = umountall();
|
||||
} else
|
||||
for (errs = 0; *argv != NULL; ++argv)
|
||||
if (umountfs(*argv) == 0)
|
||||
errs = 1;
|
||||
errs += umountfs(*argv);
|
||||
exit(errs);
|
||||
}
|
||||
|
||||
@ -174,6 +173,7 @@ umountall()
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Returns 1 on failure, 0 on success */
|
||||
int
|
||||
umountfs(name)
|
||||
char *name;
|
||||
@ -188,8 +188,8 @@ umountfs(name)
|
||||
char *delimp, *hostp, *mntpt, rname[MAXPATHLEN];
|
||||
|
||||
if (realpath(name, rname) == NULL) {
|
||||
warn("%s", rname);
|
||||
return (0);
|
||||
/* Continue and let the system call check it... */
|
||||
strcpy(rname, name);
|
||||
}
|
||||
|
||||
name = rname;
|
||||
|
Loading…
Reference in New Issue
Block a user