Allow mounting of read-only snapshots
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 5 May 2011 16:40:57 +0000 (09:40 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 5 May 2011 17:13:38 +0000 (10:13 -0700)
With the addition of the mount helper we accidentally regressed
the ability to manually mount snapshots.  This commit updates
the mount helper to expect the possibility of a ZFS_TYPE_SNAPSHOT.
All snapshot will be automatically treated as 'legacy' type mounts
so they can be mounted manually.

cmd/mount_zfs/mount_zfs.c

index c38ba51..e97b2b8 100644 (file)
@@ -428,15 +428,20 @@ main(int argc, char **argv)
                return (MOUNT_SYSERR);
 
        /* try to open the dataset to access the mount point */
-       if ((zhp = zfs_open(g_zfs, dataset, ZFS_TYPE_FILESYSTEM)) == NULL) {
+       if ((zhp = zfs_open(g_zfs, dataset,
+           ZFS_TYPE_FILESYSTEM | ZFS_TYPE_SNAPSHOT)) == NULL) {
                (void) fprintf(stderr, gettext("filesystem '%s' cannot be "
                    "mounted, unable to open the dataset\n"), dataset);
                libzfs_fini(g_zfs);
                return (MOUNT_USAGE);
        }
 
-       (void) zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT, legacy,
-           sizeof (legacy), NULL, NULL, 0, B_FALSE);
+       /* treat all snapshots as legacy mount points */
+       if (zfs_get_type(zhp) == ZFS_TYPE_SNAPSHOT)
+               (void) strlcpy(legacy, ZFS_MOUNTPOINT_LEGACY, ZFS_MAXPROPLEN);
+       else
+               (void) zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT, legacy,
+                   sizeof (legacy), NULL, NULL, 0, B_FALSE);
 
        zfs_close(zhp);
        libzfs_fini(g_zfs);