scoutfs: add uniq_name mount option

Each mount is getting a specified unique name.  This can be used to
identify a reconnecting mount that indicates that an old instance of the
same unique name can no longer exist and doesn't need to be fenced.

Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
Zach Brown
2019-04-12 10:54:07 -07:00
committed by Zach Brown
parent 8fedfef1cc
commit e9f6e79d67
3 changed files with 15 additions and 0 deletions
+1
View File
@@ -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 {
+12
View File
@@ -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;
}
+2
View File
@@ -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,