diff --git a/kmod/src/format.h b/kmod/src/format.h index d7736a38..7c8589bb 100644 --- a/kmod/src/format.h +++ b/kmod/src/format.h @@ -349,6 +349,7 @@ struct scoutfs_betimespec { #define member_sizeof(TYPE, MEMBER) (sizeof(((TYPE *)0)->MEMBER)) #define SCOUTFS_UUID_BYTES 16 +#define SCOUTFS_UNIQUE_NAME_MAX_BYTES 64 /* includes null */ /* XXX ipv6 */ struct scoutfs_inet_addr { diff --git a/kmod/src/options.c b/kmod/src/options.c index f4b7e472..2f1bef8d 100644 --- a/kmod/src/options.c +++ b/kmod/src/options.c @@ -29,6 +29,7 @@ static const match_table_t tokens = { {Opt_listen, "listen=%s"}, {Opt_cluster, "cluster=%s"}, + {Opt_uniq_name, "uniq_name=%s"}, {Opt_err, NULL} }; @@ -86,6 +87,12 @@ int scoutfs_parse_options(struct super_block *sb, char *options, match_strlcpy(parsed->cluster_name, args, MAX_CLUSTER_NAME_LEN); break; + case Opt_uniq_name: + len = match_strlcpy(parsed->uniq_name, args, + SCOUTFS_UNIQUE_NAME_MAX_BYTES); + if (len == 0 || len > SCOUTFS_UNIQUE_NAME_MAX_BYTES) + return -EINVAL; + break; default: scoutfs_err(sb, "Unknown or malformed option, \"%s\"\n", p); @@ -93,6 +100,11 @@ int scoutfs_parse_options(struct super_block *sb, char *options, } } + if (parsed->uniq_name[0] == '\0') { + scoutfs_err(sb, "must provide a uniq_name option"); + return -EINVAL; + } + return 0; } diff --git a/kmod/src/options.h b/kmod/src/options.h index 0c038c92..a1fffacf 100644 --- a/kmod/src/options.h +++ b/kmod/src/options.h @@ -12,6 +12,7 @@ enum { * the number of items in each block as though the blocks were tiny. */ Opt_btree_force_tiny_blocks, + Opt_uniq_name, Opt_err, }; @@ -20,6 +21,7 @@ struct mount_options { struct scoutfs_inet_addr listen_addr; char cluster_name[MAX_CLUSTER_NAME_LEN]; + char uniq_name[SCOUTFS_UNIQUE_NAME_MAX_BYTES]; }; int scoutfs_parse_options(struct super_block *sb, char *options,