diff options
author | Dan Swartzendruber <[email protected]> | 2014-10-28 21:29:53 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2014-11-06 11:13:18 -0800 |
commit | 5f91bd3dea49a529e87e0aa39595f074fd09736a (patch) | |
tree | f303ca549a14c998e55024070a0b5237ae6fb8b9 | |
parent | 11662bf969b3503b66d5ccd81d024c0f4473100c (diff) |
Improve zvol symlink handling.
Change the zvol helper program to replace any embedded spaces
in the pool or dataset names with '+' to ensure we have valid
symlinks.
The '+' character was choosen because it is not a valid character
for a dataset name but it is allowed by udev. This ensures that
all dataset names with an embedded space will be translated to
a unique /dev/zvol/ symlink.
Signed-off-by: Dan Swartzendruber <[email protected]>
Signed-off-by: Darik Horn <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #2834
-rw-r--r-- | cmd/zvol_id/zvol_id_main.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/cmd/zvol_id/zvol_id_main.c b/cmd/zvol_id/zvol_id_main.c index d9c80b3f9..8f0504ae9 100644 --- a/cmd/zvol_id/zvol_id_main.c +++ b/cmd/zvol_id/zvol_id_main.c @@ -23,6 +23,8 @@ * Use is subject to license terms. */ +#include <ctype.h> +#include <string.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> @@ -56,6 +58,7 @@ main(int argc, char **argv) char *dev_name; struct stat64 statbuf; int dev_minor, dev_part; + int i; if (argc < 2) { printf("Usage: %s /dev/zvol_device_node\n", argv[0]); @@ -89,6 +92,11 @@ main(int argc, char **argv) else snprintf(zvol_name_part, ZFS_MAXNAMELEN, "%s", zvol_name); + for (i = 0; i < strlen(zvol_name_part); i++) { + if (isblank(zvol_name_part[i])) + zvol_name_part[i] = '+'; + } + printf("%s\n", zvol_name_part); close(fd); return (error); |