HAMMER Utility - Refuse to expand the root filesystem
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 7 Dec 2009 06:56:30 +0000 (22:56 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 7 Dec 2009 06:56:30 +0000 (22:56 -0800)
* Refuse to expand a HAMMER filesystem mounted as the root filesystem.
  The DragonFly kernel is currently not able to mount a multi-volume
  HAMMER root.

Reported-by: Jan Lentfer <Jan.Lentfer@web.de>
sbin/hammer/cmd_expand.c
sbin/hammer/hammer.8

index dba9d23..d327d81 100644 (file)
@@ -50,6 +50,7 @@ void
 hammer_cmd_expand(char **av, int ac)
 {
        struct hammer_ioc_expand expand;
+       struct statfs sfs;
        int fd;
 
        if (ac != 2)
@@ -61,6 +62,26 @@ hammer_cmd_expand(char **av, int ac)
                exit(1);
        }
 
+       /*
+        * Make sure we aren't trying to expand the root filesystem.  The
+        * kernel can't handle multi-volume root mounts.
+        */
+       if (fstatfs(fd, &sfs) < 0) {
+               fprintf(stderr, "hammer expand: statvfs failed on %s: %s\n",
+                       av[0], strerror(errno));
+               exit(1);
+       }
+       if (strcmp(sfs.f_mntonname, "/") == 0 || sfs.f_mntonname[0] == 0) {
+               fprintf(stderr,
+                       "hammer expand: Refused attempt to expand root fs.\n"
+                       "The kernel is unable to boot from multi-volume\n"
+                       "HAMMER root filesystems.\n");
+               exit(1);
+       }
+
+       /*
+        * Expansion ioctl
+        */
        bzero(&expand, sizeof(expand));
        strncpy(expand.device_name, av[1], MAXPATHLEN);
        expand.vol_size = check_volume(av[1]);
index 0a98cf4..e8dbf71 100644 (file)
@@ -505,6 +505,10 @@ colon-separated to
 .Pa /etc/fstab
 and
 .Xr mount_hammer 8 .
+.Pp
+Any attempt to expand the root filesystem will fail with an error.
+.Dx
+is currently unable to boot from a multi-volume root.
 .\" ==== snapshot ====
 .It Cm snapshot Oo Ar filesystem Oc Ar snapshot-dir
 .It Cm snapshot Ar filesystem Ar snapshot-dir Op Ar note