+ if (copy_from_user(buffer, buf, len))
+ GOTO(out, rc = -EFAULT);
+ buffer[len] = 0;
+
+ /*
+ * format - [0x0000000200000007-0x0000000200000008):0:mdt
+ */
+ if (*buffer != '[')
+ GOTO(out, rc = -EINVAL);
+ buffer++;
+
+ tmp = strchr(buffer, '-');
+ if (!tmp)
+ GOTO(out, rc = -EINVAL);
+ *tmp++ = '\0';
+ rc = kstrtoull(buffer, 0, &range.lsr_start);
+ if (rc)
+ GOTO(out, rc);
+ buffer = tmp;
+
+ tmp = strchr(buffer, ')');
+ if (!tmp)
+ GOTO(out, rc = -EINVAL);
+ *tmp++ = '\0';
+ rc = kstrtoull(buffer, 0, &range.lsr_end);
+ if (rc)
+ GOTO(out, rc);
+ buffer = tmp;
+
+ if (*buffer != ':')
+ GOTO(out, rc = -EINVAL);
+ buffer++;
+
+ tmp = strchr(buffer, ':');
+ if (!tmp)
+ GOTO(out, rc = -EINVAL);
+ *tmp++ = '\0';
+ rc = kstrtouint(buffer, 0, &range.lsr_index);
+ if (rc)
+ GOTO(out, rc);
+ buffer = tmp;
+
+ if (strncmp(buffer, "mdt", 3) == 0)
+ range.lsr_flags = LU_SEQ_RANGE_MDT;
+ else if (strncmp(buffer, "ost", 3) == 0)
+ range.lsr_flags = LU_SEQ_RANGE_OST;
+ else
+ GOTO(out, rc = -EINVAL);
+
+ rc = seq_server_alloc_spec(param->fsp_seq->lss_site->ss_control_seq,
+ &range, ¶m->fsp_env);
+
+out:
+ RETURN(rc < 0 ? rc : len);