int add_param(char *buf, char *key, char *val)
{
- int end = sizeof(((struct lustre_disk_data *)0)->ldd_params);
- int start = strlen(buf);
- int keylen = 0;
+ char *sub_val = NULL;
+ int buflen = strlen(buf);
+ int end = sizeof(((struct lustre_disk_data *)0)->ldd_params);
+ int start = 0;
+ int keylen = 0;
- if (key)
+ if (key != NULL)
keylen = strlen(key);
- if (start + 1 + keylen + strlen(val) >= end) {
- fprintf(stderr, "%s: params are too long-\n%s %s%s\n",
- progname, buf, key ? key : "", val);
- return 1;
+
+ start = buflen;
+ while ((sub_val = strsep(&val, ",")) != NULL) {
+ if (*sub_val == 0)
+ continue;
+
+ if (start + 1 + keylen + strlen(sub_val) >= end) {
+ fprintf(stderr, "%s: params are too long-\n%s %s%s\n",
+ progname, buf, key != NULL ? key : "", sub_val);
+ buf[buflen] = '\0';
+ return 1;
+ }
+
+ sprintf(buf + start, " %s%s", key != NULL ? key : "", sub_val);
+ start = strlen(buf);
}
- sprintf(buf + start, " %s%s", key ? key : "", val);
return 0;
}
int loop_cleanup(struct mkfs_opts *mop)
{
char cmd[150];
- int ret = 1;
+ int ret = 0;
+
if ((mop->mo_flags & MO_IS_LOOP) && *mop->mo_loopdev) {
+ int tries;
+
sprintf(cmd, "losetup -d %s", mop->mo_loopdev);
- ret = run_command(cmd, sizeof(cmd));
+ for (tries = 0; tries < 3; tries++) {
+ ret = run_command(cmd, sizeof(cmd));
+ if (ret == 0)
+ break;
+ sleep(1);
+ }
}
+
+ if (ret != 0)
+ fprintf(stderr, "cannot cleanup %s: rc = %d\n",
+ mop->mo_loopdev, ret);
return ret;
}
*/
size_max = (off_t)1 << (_FILE_OFFSET_BITS - 1 - 10);
if (size >= size_max) {
- fprintf(stderr, "%s: %llu KB: Backing store size must be "
- "smaller than %llu KB\n", progname, size, size_max);
+ fprintf(stderr, "%s: "LPU64" KB: Backing store size must be "
+ "smaller than "LPU64" KB\n", progname, size, size_max);
return EFBIG;
}