#endif
#include <poll.h>
#include <time.h>
+#include <inttypes.h>
#include <libcfs/util/ioctl.h>
#include <libcfs/util/param.h>
rc = -EINVAL;
llapi_error(LLAPI_MSG_ERROR, rc, "error: bad stripe_size %llu, "
"must be an even multiple of %d bytes",
- stripe_size, page_size);
+ (unsigned long long)stripe_size, page_size);
goto out;
}
if (!llapi_stripe_index_is_valid(stripe_offset)) {
rc = -EINVAL;
llapi_error(LLAPI_MSG_ERROR, rc,
"error: stripe size '%llu' over 4GB limit",
- stripe_size);
+ (unsigned long long)stripe_size);
goto out;
}
int fd, rc;
if (foreign_lov == NULL) {
- llapi_error(LLAPI_MSG_ERROR, -EINVAL,
+ rc = -EINVAL;
+ llapi_error(LLAPI_MSG_ERROR, rc,
"foreign LOV EA content must be provided");
- return -EINVAL;
+ goto out_err;
}
len = strlen(foreign_lov);
if (len > XATTR_SIZE_MAX - offsetof(struct lov_foreign_md, lfm_value) ||
len <= 0) {
- llapi_error(LLAPI_MSG_ERROR, -EINVAL,
+ rc = -EINVAL;
+ llapi_error(LLAPI_MSG_ERROR, rc,
"foreign LOV EA size %zu (must be 0 < len < %zu)",
len, XATTR_SIZE_MAX -
offsetof(struct lov_foreign_md, lfm_value));
- return -EINVAL;
+ goto out_err;
}
lfm = malloc(len + offsetof(struct lov_foreign_md, lfm_value));
if (lfm == NULL) {
- llapi_error(LLAPI_MSG_ERROR, -ENOMEM,
+ rc = -ENOMEM;
+ llapi_error(LLAPI_MSG_ERROR, rc,
"failed to allocate lov_foreign_md");
- return -ENOMEM;
+ goto out_err;
}
fd = open(name, O_WRONLY|O_CREAT|O_LOV_DELAY_CREATE, mode);
if (fd == -1) {
- perror("open()");
- rc = -errno;
+ fd = -errno;
+ llapi_error(LLAPI_MSG_ERROR, fd, "open '%s' failed", name);
goto out_free;
}
if (ioctl(fd, LL_IOC_LOV_SETSTRIPE, lfm) != 0) {
char *errmsg = "stripe already set";
- char fsname[MAX_OBD_NAME + 1] = { 0 };
rc = -errno;
- if (errno != EEXIST && errno != EALREADY)
+ if (errno == ENOTTY)
+ errmsg = "not on a Lustre filesystem";
+ else if (errno == EEXIST || errno == EALREADY)
+ errmsg = "stripe already set";
+ else
errmsg = strerror(errno);
llapi_err_noerrno(LLAPI_MSG_ERROR,
"setstripe error for '%s': %s", name, errmsg);
- /* Make sure we are on a Lustre file system */
- if (rc == -ENOTTY && llapi_search_fsname(name, fsname))
- llapi_error(LLAPI_MSG_ERROR, rc,
- "'%s' is not on a Lustre filesystem",
- name);
-
close(fd);
fd = rc;
}
free(lfm);
return fd;
+
+out_err:
+ errno = -rc;
+ return rc;
}
int llapi_file_create(const char *name, unsigned long long stripe_size,
FILE *fp;
int idx = 0, len = 0, mntlen, fd;
int rc = -ENODEV;
+ int fsnamelen, mountlen;
/* get the mount point */
fp = setmntent(PROC_MOUNTS, "r");
ptr_end++;
/* Check the fsname for a match, if given */
+ mountlen = ptr_end - ptr;
if (!(want & WANT_FSNAME) && fsname != NULL &&
- (strlen(fsname) > 0) &&
- (strncmp(ptr, fsname, ptr_end - ptr) != 0))
- continue;
+ (fsnamelen = strlen(fsname)) > 0 &&
+ (fsnamelen != mountlen ||
+ (strncmp(ptr, fsname, mountlen) != 0)))
+ continue;
/* If the path isn't set return the first one we find */
if (path == NULL || strlen(path) == 0) {
strncpy(mntdir, mnt.mnt_dir, sizeof(mntdir) - 1);
- mntdir[strlen(mnt.mnt_dir)] = '\0';
+ mntdir[sizeof(mntdir) - 1] = '\0';
if ((want & WANT_FSNAME) && fsname != NULL) {
- strncpy(fsname, ptr, ptr_end - ptr);
- fsname[ptr_end - ptr] = '\0';
+ strncpy(fsname, ptr, mountlen);
+ fsname[mountlen] = '\0';
}
rc = 0;
break;
/* Otherwise find the longest matching path */
} else if ((strlen(path) >= mntlen) && (mntlen >= len) &&
(strncmp(mnt.mnt_dir, path, mntlen) == 0)) {
- strncpy(mntdir, mnt.mnt_dir, sizeof(mntdir));
- mntdir[strlen(mnt.mnt_dir)] = '\0';
+ strncpy(mntdir, mnt.mnt_dir, sizeof(mntdir) - 1);
+ mntdir[sizeof(mntdir) - 1] = '\0';
len = mntlen;
if ((want & WANT_FSNAME) && fsname != NULL) {
- strncpy(fsname, ptr, ptr_end - ptr);
- fsname[ptr_end - ptr] = '\0';
+ strncpy(fsname, ptr, mountlen);
+ fsname[mountlen] = '\0';
}
rc = 0;
}
ver = (__u32)(lmm_oi_id(&lum->lmm_oi) >> 32);
if (yaml)
llapi_printf(LLAPI_MSG_NORMAL, DFID_NOBRACE"\n",
- seq, oid, ver);
+ (unsigned long long)seq, oid, ver);
else
llapi_printf(LLAPI_MSG_NORMAL, DFID"\n",
- seq, oid, ver);
+ (unsigned long long)seq, oid, ver);
}
if (verbose & VERBOSE_STRIPE_COUNT) {
/* Extension size is in KiB */
llapi_printf(LLAPI_MSG_NORMAL, "%llu",
extension ?
- lum->lmm_stripe_size * SEL_UNIT_SIZE :
- lum->lmm_stripe_size);
+ (unsigned long long)(lum->lmm_stripe_size * SEL_UNIT_SIZE) :
+ (unsigned long long)lum->lmm_stripe_size);
}
if (!yaml && is_dir)
separator = " ";
"%4slcme_timestamp: ", " ");
if (yaml) {
llapi_printf(LLAPI_MSG_NORMAL, "%llu",
- entry->lcme_timestamp);
+ (unsigned long long)entry->lcme_timestamp);
} else {
time_t stamp = entry->lcme_timestamp;
char *date_str = asctime(localtime(&stamp));
llapi_printf(LLAPI_MSG_NORMAL,
"%4slcme_extent.e_start: ", " ");
llapi_printf(LLAPI_MSG_NORMAL, "%llu",
- entry->lcme_extent.e_start);
+ (unsigned long long)entry->lcme_extent.e_start);
separator = "\n";
}
llapi_printf(LLAPI_MSG_NORMAL, "%s", "EOF");
else
llapi_printf(LLAPI_MSG_NORMAL, "%llu",
- entry->lcme_extent.e_end);
+ (unsigned long long)entry->lcme_extent.e_end);
separator = "\n";
}
{
struct lov_comp_md_v1 *comp_v1 = NULL;
struct lov_user_md_v1 *v1 = ¶m->fp_lmd->lmd_lmm;
+ __u32 stripe_size = 0;
int ret, i, count = 1;
if (v1->lmm_magic == LOV_USER_MAGIC_FOREIGN)
ent = &comp_v1->lcm_entries[i];
if (ent->lcme_flags & LCME_FL_EXTENSION)
continue;
+ if (!(ent->lcme_flags & LCME_FL_INIT))
+ continue;
}
-
- ret = find_value_cmp(v1->lmm_stripe_size, param->fp_stripe_size,
- param->fp_stripe_size_sign,
- param->fp_exclude_stripe_size,
- param->fp_stripe_size_units, 0);
- /* If any stripe_size matches */
- if (ret != -1)
- break;
+ stripe_size = v1->lmm_stripe_size;
}
+ ret = find_value_cmp(stripe_size, param->fp_stripe_size,
+ param->fp_stripe_size_sign,
+ param->fp_exclude_stripe_size,
+ param->fp_stripe_size_units, 0);
+
return ret;
}
v1 = lov_comp_entry(comp_v1, i);
ent = &comp_v1->lcm_entries[i];
+ if (!(ent->lcme_flags & LCME_FL_INIT))
+ continue;
+
if (ent->lcme_flags & LCME_FL_EXTENSION)
continue;
}
- stripe_count += v1->lmm_stripe_count;
+ stripe_count = v1->lmm_stripe_count;
}
return stripe_count;
/* Is this a lustre fs? */
int llapi_is_lustre_mnttype(const char *type)
{
- return (strcmp(type, "lustre") == 0 || strcmp(type,"lustre_lite") == 0);
+ return strcmp(type, "lustre") == 0 || strcmp(type, "lustre_tgt") == 0;
}
/* Is this a lustre client fs? */