* optionals pivot_root, rootfs mount paths
* @path : the rootfs source (directory or device)
* @mount : where it is mounted
- * @options : mount options
* @bev_type : optional backing store type
+ * @options : mount options
+ * @mountflags : the portion of @options that are flags
+ * @data : the porition of @options that are not flags
*/
struct lxc_rootfs {
char *path;
char *mount;
- char *options;
char *bdev_type;
+ char *options;
+ unsigned long mountflags;
+ char *data;
};
/*
static int set_config_rootfs_options(const char *key, const char *value,
struct lxc_conf *lxc_conf, void *data)
{
- return set_config_string_item(&lxc_conf->rootfs.options, value);
+ int ret;
+ unsigned long mflags = 0, pflags = 0;
+ char *mdata = NULL, *opts = NULL;
+ struct lxc_rootfs *rootfs = &lxc_conf->rootfs;
+
+ ret = parse_mntopts(value, &mflags, &mdata);
+ if (ret < 0)
+ return -EINVAL;
+
+ ret = parse_propagationopts(value, &pflags);
+ if (ret < 0) {
+ free(mdata);
+ return -EINVAL;
+ }
+
+ ret = set_config_string_item(&opts, value);
+ if (ret < 0) {
+ free(mdata);
+ return -ENOMEM;
+ }
+
+ rootfs->mountflags = mflags | pflags;
+ rootfs->options = opts;
+ rootfs->data = mdata;
+
+ return 0;
}
static int set_config_uts_name(const char *key, const char *value,
{
free(c->rootfs.options);
c->rootfs.options = NULL;
+
+ free(c->rootfs.data);
+ c->rootfs.data = NULL;
+
return 0;
}