[issue1537] null mount does not accept -o update
YONETANI Tomokazu
qhwt+dfly at les.ath.cx
Thu Nov 19 23:35:37 PST 2009
On Thu, Nov 19, 2009 at 08:40:46AM +0000, Stathis Kamperis (via DragonFly issue tracker) wrote:
>
> Stathis Kamperis <ekamperi at gmail.com> added the comment:
>
> Ping!
>
> Anyone interested with time and clue to review the patch ?
> I'd like to push it at some point, before it gets too stale, but ain't gonna
> happen if at least someone else gives me a thumbs up.
I noticed that I can't remount nullfs by mount(8). The patched
mount_null accepts only one argument (the mountpoint to be remounted)
when MNT_UPDATE is specified either by -u or by -o update, but
what mount(8) passes to filesystem-specific mount commands like this:
# mount -ur /mnt/pt
-> mount_${foo} -o ro -o update /path/to/special /mnt/pt
# mount -uw /mnt/pt
-> mount_${foo} -o noro -o update /path/to/special /mnt/pt
I think that the following patch on top of yours does this for you,
although I only tested it slightly.
diff --git a/sbin/mount_null/mount_null.c b/sbin/mount_null/mount_null.c
index b9c595a..9e02b6d 100644
--- a/sbin/mount_null/mount_null.c
+++ b/sbin/mount_null/mount_null.c
@@ -88,29 +88,20 @@ main(int argc, char **argv)
argv += optind;
/*
- * Only the mount point need be specified in update mode.
+ * Resolve target and source with realpath(3). Only the mount point
+ * needs be specified in update mode, but mount(8) passes us two
+ * arguments, the second of which is the source directory.
*/
- if (mntflags & MNT_UPDATE) {
- if (argc != 1) {
- usage();
- /* not reached */
- }
+ if ((mntflags & MNT_UPDATE) && argc == 1) {
+ args.target = NULL;
checkpath(argv[0], source);
- error = getvfsbyname("null", &vfc);
- if (error)
- err(1, "getvfsbyname");
- if (mount(vfc.vfc_name, source, mntflags, &args))
- err(1, "mount");
- exit(0);
- }
-
- if (argc < 2)
+ } else if (argc == 2) {
+ args.target = target;
+ checkpath(argv[0], target);
+ checkpath(argv[1], source);
+ } else
usage();
- /* resolve target and source with realpath(3) */
- checkpath(argv[0], target);
- checkpath(argv[1], source);
-
/*
* Mount points that did not use distinct paths (e.g. / on /mnt)
* used to be disallowed because mount linkages were stored in
@@ -118,7 +109,6 @@ main(int argc, char **argv)
* stores mount linkages in the namecache topology and does not
* have this problem, so paths no longer need to be distinct.
*/
- args.target = target;
error = getvfsbyname("null", &vfc);
if (error && vfsisloadable("null")) {
More information about the Bugs
mailing list