- if (strcmp("both", param) == 0)
- rc = nodemap_set_mapping_mode(nodemap_name,
- NODEMAP_MAP_BOTH);
- else if (strcmp("uid_only", param) == 0)
- rc = nodemap_set_mapping_mode(nodemap_name,
- NODEMAP_MAP_UID_ONLY);
- else if (strcmp("gid_only", param) == 0)
- rc = nodemap_set_mapping_mode(nodemap_name,
- NODEMAP_MAP_GID_ONLY);
- else
- rc = -EINVAL;
+ {
+ char *p;
+ __u8 map_mode = 0;
+
+ if ((p = strstr(param, "all")) != NULL) {
+ if ((p == param || *(p-1) == ',') &&
+ (*(p+3) == '\0' || *(p+3) == ',')) {
+ map_mode = NODEMAP_MAP_ALL;
+ } else {
+ rc = -EINVAL;
+ break;
+ }
+ } else {
+ while ((p = strsep(¶m, ",")) != NULL) {
+ if (!*p)
+ break;
+
+ if (strcmp("both", p) == 0)
+ map_mode |= NODEMAP_MAP_BOTH;
+ else if (strcmp("uid_only", p) == 0 ||
+ strcmp("uid", p) == 0)
+ map_mode |= NODEMAP_MAP_UID;
+ else if (strcmp("gid_only", p) == 0 ||
+ strcmp("gid", p) == 0)
+ map_mode |= NODEMAP_MAP_GID;
+ else if (strcmp("projid_only", p) == 0 ||
+ strcmp("projid", p) == 0)
+ map_mode |= NODEMAP_MAP_PROJID;
+ else
+ break;
+ }
+ if (p) {
+ rc = -EINVAL;
+ break;
+ }
+ }
+
+ rc = nodemap_set_mapping_mode(nodemap_name, map_mode);