* Use is subject to license terms.
*/
/*
+ * Copyright (c) 2011 Whamcloud, Inc.
+ */
+/*
* This file is part of Lustre, http://www.lustre.org/
* Lustre is a trademark of Sun Microsystems, Inc.
*
llapi_msg_level = level;
}
-void llapi_err(int level, char *fmt, ...)
+/* llapi_error will preserve errno */
+void llapi_error(int level, int _rc, char *fmt, ...)
{
va_list args;
- int tmp_errno = abs(errno);
+ int tmp_errno = errno;
+ /* to protect using errno as _rc argument */
+ int rc = abs(_rc);
if ((level & LLAPI_MSG_MASK) > llapi_msg_level)
return;
if (level & LLAPI_MSG_NO_ERRNO)
fprintf(stderr, "\n");
else
- fprintf(stderr, ": %s (%d)\n", strerror(tmp_errno), tmp_errno);
+ fprintf(stderr, ": %s (%d)\n", strerror(rc), rc);
+ errno = tmp_errno;
}
-#define llapi_err_noerrno(level, fmt, a...) \
- llapi_err((level) | LLAPI_MSG_NO_ERRNO, fmt, ## a)
-
+/* llapi_printf will preserve errno */
void llapi_printf(int level, char *fmt, ...)
{
va_list args;
+ int tmp_errno = errno;
if ((level & LLAPI_MSG_MASK) > llapi_msg_level)
return;
va_start(args, fmt);
vfprintf(stdout, fmt, args);
va_end(args);
+ errno = tmp_errno;
}
/**
- * size_units is unchanged if no specifier used
+ * size_units is to be initialized (or zeroed) by caller.
*/
int parse_size(char *optarg, unsigned long long *size,
unsigned long long *size_units, int bytes_spec)
{
char *end;
+ if (strncmp(optarg, "-", 1) == 0)
+ return -1;
+
+ if (*size_units == 0)
+ *size_units = 1;
+
*size = strtoull(optarg, &end, 0);
if (*end != '\0') {
if ((*end == 'b') && *(end+1) == '\0' &&
(*size & (~0ULL << (64 - 9))) == 0 &&
!bytes_spec) {
- *size <<= 9;
*size_units = 1 << 9;
} else if ((*end == 'b') && *(end+1) == '\0' &&
bytes_spec) {
} else if ((*end == 'k' || *end == 'K') &&
*(end+1) == '\0' && (*size &
(~0ULL << (64 - 10))) == 0) {
- *size <<= 10;
*size_units = 1 << 10;
} else if ((*end == 'm' || *end == 'M') &&
*(end+1) == '\0' && (*size &
(~0ULL << (64 - 20))) == 0) {
- *size <<= 20;
*size_units = 1 << 20;
} else if ((*end == 'g' || *end == 'G') &&
*(end+1) == '\0' && (*size &
(~0ULL << (64 - 30))) == 0) {
- *size <<= 30;
*size_units = 1 << 30;
} else if ((*end == 't' || *end == 'T') &&
*(end+1) == '\0' && (*size &
(~0ULL << (64 - 40))) == 0) {
- *size <<= 40;
*size_units = 1ULL << 40;
} else if ((*end == 'p' || *end == 'P') &&
*(end+1) == '\0' && (*size &
(~0ULL << (64 - 50))) == 0) {
- *size <<= 50;
*size_units = 1ULL << 50;
} else if ((*end == 'e' || *end == 'E') &&
*(end+1) == '\0' && (*size &
(~0ULL << (64 - 60))) == 0) {
- *size <<= 60;
*size_units = 1ULL << 60;
} else {
return -1;
}
}
-
+ *size *= *size_units;
return 0;
}
+/* XXX: llapi_xxx() functions return negative values upon failure */
+
int llapi_stripe_limit_check(unsigned long long stripe_size, int stripe_offset,
int stripe_count, int stripe_pattern)
{
- int page_size;
+ int page_size, rc;
/* 64 KB is the largest common page size I'm aware of (on ia64), but
* check the local page size just in case. */
LOV_MIN_STRIPE_SIZE);
}
if (stripe_size < 0 || (stripe_size & (LOV_MIN_STRIPE_SIZE - 1))) {
- llapi_err(LLAPI_MSG_ERROR, "error: bad stripe_size %lu, "
- "must be an even multiple of %d bytes",
- stripe_size, page_size);
- return -EINVAL;
+ rc = -EINVAL;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: bad stripe_size %lu, "
+ "must be an even multiple of %d bytes",
+ stripe_size, page_size);
+ return rc;
}
if (stripe_offset < -1 || stripe_offset > MAX_OBD_DEVICES) {
- errno = -EINVAL;
- llapi_err(LLAPI_MSG_ERROR, "error: bad stripe offset %d",
- stripe_offset);
- return -EINVAL;
+ rc = -EINVAL;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: bad stripe offset %d",
+ stripe_offset);
+ return rc;
}
if (stripe_count < -1 || stripe_count > LOV_MAX_STRIPE_COUNT) {
- errno = -EINVAL;
- llapi_err(LLAPI_MSG_ERROR, "error: bad stripe count %d",
- stripe_count);
- return -EINVAL;
+ rc = -EINVAL;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: bad stripe count %d",
+ stripe_count);
+ return rc;
}
if (stripe_size >= (1ULL << 32)){
- errno = -EINVAL;
- llapi_err(LLAPI_MSG_ERROR, "warning: stripe size larger than 4G"
- " is not currently supported and would wrap");
- return -EINVAL;
+ rc = -EINVAL;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "warning: stripe size larger than 4G "
+ "is not currently supported and would wrap");
+ return rc;
}
return 0;
}
if (rc)
return rc;
- if ((fd = fopen(buffer, "r")) == NULL)
- return -EINVAL;
+ fd = fopen(buffer, "r");
+ if (fd == NULL)
+ return -errno;
while (fgets(buffer, sizeof(buffer), fd) != NULL) {
if (poolname == NULL) {
if (pool_name != NULL) {
char fsname[MAX_OBD_NAME + 1], *ptr;
- if (llapi_search_fsname(name, fsname)) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "'%s' is not on a Lustre filesystem", name);
- return -EINVAL;
+ rc = llapi_search_fsname(name, fsname);
+ if (rc) {
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "'%s' is not on a Lustre filesystem",
+ name);
+ return rc;
}
/* in case user gives the full pool name <fsname>.<poolname>,
*ptr = '\0';
if (strcmp(pool_name, fsname) != 0) {
*ptr = '.';
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "Pool '%s' is not on filesystem '%s'",
- pool_name, fsname);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "Pool '%s' is not on filesystem '%s'",
+ pool_name, fsname);
return -EINVAL;
}
pool_name = ptr + 1;
}
/* Make sure the pool exists and is non-empty */
- if ((rc = llapi_search_ost(fsname, pool_name, NULL)) < 1) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "pool '%s.%s' %s", fsname, pool_name,
- rc == 0 ? "has no OSTs" : "does not exist");
+ rc = llapi_search_ost(fsname, pool_name, NULL);
+ if (rc < 1) {
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "pool '%s.%s' %s", fsname, pool_name,
+ rc == 0 ? "has no OSTs" : "does not exist");
return -EINVAL;
}
}
if (fd < 0) {
rc = -errno;
- llapi_err(LLAPI_MSG_ERROR, "unable to open '%s'", name);
+ llapi_error(LLAPI_MSG_ERROR, rc, "unable to open '%s'", name);
return rc;
}
- if ((rc = llapi_stripe_limit_check(stripe_size, stripe_offset,
- stripe_count, stripe_pattern)) != 0){
- errno = rc;
+ rc = llapi_stripe_limit_check(stripe_size, stripe_offset, stripe_count,
+ stripe_pattern);
+ if (rc != 0)
goto out;
- }
/* Initialize IOCTL striping pattern structure */
lum.lmm_magic = LOV_USER_MAGIC_V3;
/* get the mount point */
fp = setmntent(MOUNTED, "r");
if (fp == NULL) {
- llapi_err(LLAPI_MSG_ERROR,
- "setmntent(%s) failed: %s:", MOUNTED,
- strerror (errno));
- return -EIO;
+ rc = -EIO;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "setmntent(%s) failed", MOUNTED);
+ return rc;
}
while (1) {
if (getmntent_r(fp, &mnt, buf, sizeof(buf)) == NULL)
if (want & WANT_FD) {
fd = open(mntdir, O_RDONLY | O_DIRECTORY | O_NONBLOCK);
if (fd < 0) {
- perror("open");
rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "error opening '%s'", mntdir);
+
} else {
*outfd = fd;
}
}
} else if (want & WANT_ERROR)
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "can't find fs root for '%s': %d",
- (want & WANT_PATH) ? fsname : path, rc);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "can't find fs root for '%s': %d",
+ (want & WANT_PATH) ? fsname : path, rc);
return rc;
}
*ptr = '\0';
path = realpath(buf, NULL);
if (path == NULL) {
- llapi_err(LLAPI_MSG_ERROR,
- "pathname '%s' cannot expand",
- pathname);
- return -errno;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "pathname '%s' cannot expand",
+ pathname);
+ return rc;
}
}
}
return rc;
}
+int llapi_getname(const char *path, char *buf, size_t size)
+{
+ struct obd_uuid uuid_buf;
+ char *uuid = uuid_buf.uuid;
+ int rc, nr;
+
+ memset(&uuid_buf, 0, sizeof(uuid_buf));
+ rc = llapi_file_get_lov_uuid(path, &uuid_buf);
+ if (rc)
+ return rc;
+
+ /* We want to turn lustre-clilov-ffff88002738bc00 into
+ * lustre-ffff88002738bc00. */
+
+ nr = snprintf(buf, size, "%.*s-%s",
+ (int) (strlen(uuid) - 24), uuid,
+ uuid + strlen(uuid) - 16);
+
+ if (nr >= size)
+ rc = -ENAMETOOLONG;
+
+ return rc;
+}
+
+
/* return the first file matching this pattern */
static int first_match(char *pattern, char *buffer)
{
rc = poolpath(fsname, NULL, pathname);
if (rc != 0) {
- errno = -rc;
- llapi_err(LLAPI_MSG_ERROR, "Lustre filesystem '%s' not found",
- fsname);
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Lustre filesystem '%s' not found",
+ fsname);
return rc;
}
llapi_printf(LLAPI_MSG_NORMAL, "Pool: %s.%s\n", fsname, pool);
sprintf(path, "%s/%s", pathname, pool);
- if ((fd = fopen(path, "r")) == NULL) {
- llapi_err(LLAPI_MSG_ERROR, "Cannot open %s", path);
- return -EINVAL;
+ fd = fopen(path, "r");
+ if (fd == NULL) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "Cannot open %s", path);
+ return rc;
}
rc = 0;
break;
}
/* remove '\n' */
- if ((tmp = strchr(buf, '\n')) != NULL)
+ tmp = strchr(buf, '\n');
+ if (tmp != NULL)
*tmp='\0';
if (used + strlen(buf) + 1 > buffer_size) {
rc = -EOVERFLOW;
/* only absolute pathname is supported */
if (*name != '/')
return -EINVAL;
+
if (!realpath(name, rname)) {
rc = -errno;
- llapi_err(LLAPI_MSG_ERROR, "invalid path '%s'", name);
+ llapi_error(LLAPI_MSG_ERROR, rc, "invalid path '%s'",
+ name);
return rc;
}
rc = poolpath(NULL, rname, pathname);
if (rc != 0) {
- errno = -rc;
- llapi_err(LLAPI_MSG_ERROR, "'%s' is not"
- " a Lustre filesystem", name);
+ llapi_error(LLAPI_MSG_ERROR, rc, "'%s' is not"
+ " a Lustre filesystem", name);
return rc;
}
strcpy(fsname, rname);
rc = poolpath(fsname, NULL, pathname);
}
if (rc != 0) {
- errno = -rc;
- llapi_err(LLAPI_MSG_ERROR, "Lustre filesystem '%s' not found",
- name);
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Lustre filesystem '%s' not found", name);
return rc;
}
llapi_printf(LLAPI_MSG_NORMAL, "Pools from %s:\n", fsname);
- if ((dir = opendir(pathname)) == NULL) {
- llapi_err(LLAPI_MSG_ERROR, "Could not open pool list for '%s'",
- name);
- return -errno;
+ dir = opendir(pathname);
+ if (dir == NULL) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Could not open pool list for '%s'",
+ name);
+ return rc;
}
while(1) {
rc = readdir_r(dir, &pool, &cookie);
if (rc != 0) {
- llapi_err(LLAPI_MSG_ERROR,
- "Error reading pool list for '%s'", name);
- return -errno;
- } else if ((rc == 0) && (cookie == NULL))
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Error reading pool list for '%s'", name);
+ return rc;
+ } else if ((rc == 0) && (cookie == NULL)) {
/* end of directory */
break;
+ }
/* ignore . and .. */
if (!strcmp(pool.d_name, ".") || !strcmp(pool.d_name, ".."))
static int common_param_init(struct find_param *param)
{
param->lumlen = lov_mds_md_size(MAX_LOV_UUID_COUNT, LOV_MAGIC_V3);
- if ((param->lmd = malloc(sizeof(lstat_t) + param->lumlen)) == NULL) {
- llapi_err(LLAPI_MSG_ERROR,
- "error: allocation of %d bytes for ioctl",
- sizeof(lstat_t) + param->lumlen);
+ param->lmd = malloc(sizeof(lstat_t) + param->lumlen);
+ if (param->lmd == NULL) {
+ llapi_error(LLAPI_MSG_ERROR, -ENOMEM,
+ "error: allocation of %d bytes for ioctl",
+ sizeof(lstat_t) + param->lumlen);
return -ENOMEM;
}
return 0;
}
+/* set errno upon failure */
static DIR *opendir_parent(char *path)
{
DIR *parent;
* Do the regular lstat(2) instead. */
ret = lstat_f(path, st);
if (ret) {
- llapi_err(LLAPI_MSG_ERROR,
- "error: %s: lstat failed for %s",
- __func__, path);
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "error: %s: lstat failed for %s",
+ __func__, path);
return ret;
}
} else if (errno == ENOENT) {
- llapi_err(LLAPI_MSG_WARN,
- "warning: %s: %s does not exist",
- __func__, path);
- return -ENOENT;
+ ret = -errno;
+ llapi_error(LLAPI_MSG_WARN, ret,
+ "warning: %s: %s does not exist",
+ __func__, path);
+ return ret;
} else {
- llapi_err(LLAPI_MSG_ERROR,
- "error: %s: IOC_MDC_GETFILEINFO failed for %s",
- __func__, path);
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "error: %s: IOC_MDC_GETFILEINFO failed for %s",
+ __func__, path);
return ret;
}
}
d = opendir(path);
if (!d && errno != ENOTDIR) {
- llapi_err(LLAPI_MSG_ERROR, "%s: Failed to open '%s'",
- __func__, path);
- return -EINVAL;
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret, "%s: Failed to open '%s'",
+ __func__, path);
+ return ret;
} else if (!d && !parent) {
/* ENOTDIR. Open the parent dir. */
p = opendir_parent(path);
if (!p)
- GOTO(out, ret = -EINVAL);
+ GOTO(out, ret = -errno);
}
if (sem_init && (ret = sem_init(path, parent ?: p, d, data, de)))
path[len] = 0;
if ((len + dent->d_reclen + 2) > size) {
- llapi_err(LLAPI_MSG_ERROR,
- "error: %s: string buffer is too small",
- __func__);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "error: %s: string buffer is too small",
+ __func__);
break;
}
strcat(path, "/");
switch (dent->d_type) {
case DT_UNKNOWN:
- llapi_err(LLAPI_MSG_ERROR,
- "error: %s: '%s' is UNKNOWN type %d",
- __func__, dent->d_name, dent->d_type);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "error: %s: '%s' is UNKNOWN type %d",
+ __func__, dent->d_name, dent->d_type);
break;
case DT_DIR:
ret = llapi_semantic_traverse(path, size, d, sem_init,
char *buf;
if (len > PATH_MAX) {
- llapi_err(LLAPI_MSG_ERROR, "Path name '%s' is too long", path);
- return -EINVAL;
+ ret = -EINVAL;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "Path name '%s' is too long", path);
+ return ret;
}
buf = (char *)malloc(PATH_MAX + 1);
{
int rc = ioctl(fd, OBD_IOC_GETNAME, lov_name);
if (rc) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "error: can't get lov name.");
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: can't get lov name.");
}
return rc;
}
fd = open(path, O_RDONLY);
if (fd < 0) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "error opening %s", path);
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error opening %s", path);
return rc;
}
rc = llapi_file_fget_lov_uuid(fd, lov_uuid);
close(fd);
-
return rc;
}
lov_name.uuid);
fp = fopen(buf, "r");
if (fp == NULL) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "error: opening '%s'", buf);
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: opening '%s'", buf);
return rc;
}
return -EOVERFLOW;
*ost_count = index;
- return rc;
+ return 0;
}
int llapi_get_obd_count(char *mnt, int *count, int is_mdt)
root = opendir(mnt);
if (!root) {
- llapi_err(LLAPI_MSG_ERROR, "open %s failed", mnt);
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "open %s failed", mnt);
+ return rc;
}
*count = is_mdt;
rc = ioctl(dirfd(root), LL_IOC_GETOBDCOUNT, count);
+ if (rc < 0)
+ rc = -errno;
closedir(root);
return rc;
/* Get the lov name */
rc = llapi_file_fget_lov_uuid(dirfd(dir), &lov_uuid);
if (rc) {
- if (errno != ENOTTY) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR,
- "error: can't get lov name: %s", dname);
+ if (rc != -ENOTTY) {
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "error: can't get lov name: %s", dname);
} else {
rc = 0;
}
lov_uuid.uuid);
fp = fopen(buf, "r");
if (fp == NULL) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "error: opening '%s'", buf);
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: opening '%s'", buf);
return rc;
}
ret = -ENOMEM;
}
- llapi_err(LLAPI_MSG_ERROR, "get ost uuid failed");
+ llapi_error(LLAPI_MSG_ERROR, ret, "get ost uuid failed");
return ret;
}
char buffer[PATH_MAX + 1];
if (fsname == NULL) {
- if ((rc = llapi_search_fsname(pathname, buffer)) != 0)
+ rc = llapi_search_fsname(pathname, buffer);
+ if (rc != 0)
return rc;
fsname = buffer;
}
snprintf(pattern, sizeof(pattern), "/proc/fs/lustre/lov/%s-clilov-*",
fsname);
- if ((rc = first_match(pattern, buffer)) != 0)
+ rc = first_match(pattern, buffer);
+ if (rc != 0)
return rc;
strncpy(clilovpath, buffer, sizeof(buffer));
char line[PATH_MAX + 1];
int rc = 0;
- if ((f = fopen(fpath, "r")) == NULL) {
- llapi_err(LLAPI_MSG_ERROR, "Cannot open '%s'", fpath);
- return errno;
+ f = fopen(fpath, "r");
+ if (f == NULL) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "Cannot open '%s'", fpath);
+ return rc;
}
if (fgets(line, sizeof(line), f) != NULL) {
*attr = atoi(line);
} else {
- llapi_err(LLAPI_MSG_ERROR, "Cannot read from '%s'", fpath);
+ llapi_error(LLAPI_MSG_ERROR, errno, "Cannot read from '%s'", fpath);
rc = 1;
}
char dpath[PATH_MAX + 1];
char fpath[PATH_MAX + 1];
- if ((rc = clilovpath(fsname, pathname, dpath)) != 0)
+ rc = clilovpath(fsname, pathname, dpath);
+ if (rc != 0)
return rc;
if (scount) {
snprintf(fpath, PATH_MAX, "%s/stripecount", dpath);
- if ((rc = sattr_read_attr(fpath, scount)) != 0)
+ rc = sattr_read_attr(fpath, scount);
+ if (rc != 0)
return rc;
}
if (ssize) {
snprintf(fpath, PATH_MAX, "%s/stripesize", dpath);
- if ((rc = sattr_read_attr(fpath, ssize)) != 0)
+ rc = sattr_read_attr(fpath, ssize);
+ if (rc != 0)
return rc;
}
if (soffset) {
snprintf(fpath, PATH_MAX, "%s/stripeoffset", dpath);
- if ((rc = sattr_read_attr(fpath, soffset)) != 0)
+ rc = sattr_read_attr(fpath, soffset);
+ if (rc != 0)
return rc;
}
char fsname_buf[PATH_MAX + 1];
unsigned int tmp[3];
- if (fsname == NULL)
- llapi_search_fsname(pathname, fsname_buf);
- else
+ if (fsname == NULL) {
+ rc = llapi_search_fsname(pathname, fsname_buf);
+ if (rc)
+ return rc;
+ } else {
strncpy(fsname_buf, fsname, PATH_MAX);
+ }
if (strncmp(fsname_buf, cache.fsname, PATH_MAX) != 0) {
/*
* successfully retrieved and stored in tmp before writing to
* cache.
*/
- if ((rc = sattr_get_defaults(fsname_buf, NULL, &tmp[0],
- &tmp[1], &tmp[2])) != 0)
+ rc = sattr_get_defaults(fsname_buf, NULL, &tmp[0], &tmp[1],
+ &tmp[2]);
+ if (rc != 0)
return rc;
cache.stripecount = tmp[0];
{
char *prefix = is_dir ? "" : "lmm_";
char nl = is_dir ? ' ' : '\n';
+ int rc;
if (is_dir && lum->lmm_object_seq == FID_SEQ_LOV_DEFAULT) {
lum->lmm_object_seq = FID_SEQ_OST_MDT0;
if (is_dir) {
if (!raw && lum->lmm_stripe_count == 0) {
unsigned int scount;
- if (sattr_cache_get_defaults(NULL, path,
- &scount, NULL,
- NULL) == 0)
- llapi_printf(LLAPI_MSG_NORMAL, "%u%c",
+ rc = sattr_cache_get_defaults(NULL, path,
+ &scount, NULL,
+ NULL);
+ if (rc == 0)
+ llapi_printf(LLAPI_MSG_NORMAL, "%d%c",
scount, nl);
else
- llapi_err(LLAPI_MSG_ERROR,
- "Cannot determine default"
- " stripe count.");
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Cannot determine default"
+ " stripe count.");
} else {
llapi_printf(LLAPI_MSG_NORMAL, "%d%c",
lum->lmm_stripe_count ==
prefix);
if (is_dir && !raw && lum->lmm_stripe_size == 0) {
unsigned int ssize;
- if (sattr_cache_get_defaults(NULL, path, NULL, &ssize,
- NULL) == 0)
+ rc = sattr_cache_get_defaults(NULL, path, NULL, &ssize,
+ NULL);
+ if (rc == 0)
llapi_printf(LLAPI_MSG_NORMAL, "%u%c", ssize,
nl);
else
- llapi_err(LLAPI_MSG_ERROR,
- "Cannot determine default"
- " stripe size.");
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Cannot determine default"
+ " stripe size.");
} else {
llapi_printf(LLAPI_MSG_NORMAL, "%u%c",
lum->lmm_stripe_size, nl);
lum->lmm_pattern, nl);
}
+ if ((verbose & VERBOSE_GENERATION) && !is_dir) {
+ if (verbose & ~VERBOSE_GENERATION)
+ llapi_printf(LLAPI_MSG_NORMAL, "%slayout_gen: ",
+ prefix);
+ llapi_printf(LLAPI_MSG_NORMAL, "%u%c",
+ (int)lum->u.lum_layout_gen, nl);
+ }
+
if (verbose & VERBOSE_OFFSET) {
if (verbose & ~VERBOSE_OFFSET)
llapi_printf(LLAPI_MSG_NORMAL, "%sstripe_offset: ",
if (fname == NULL) {
dname = (char *)malloc(2);
if (dname == NULL)
- return ENOMEM;
+ return -ENOMEM;
strcpy(dname, ".");
fname = (char *)path;
} else {
dname = (char *)malloc(fname - path + 1);
if (dname == NULL)
- return ENOMEM;
+ return -ENOMEM;
strncpy(dname, path, fname - path);
dname[fname - path] = '\0';
fname++;
}
- if ((fd = open(dname, O_RDONLY)) == -1) {
- rc = errno;
+ fd = open(dname, O_RDONLY);
+ if (fd == -1) {
+ rc = -errno;
free(dname);
return rc;
}
strcpy((char *)lum, fname);
if (ioctl(fd, IOC_MDC_GETFILESTRIPE, (void *)lum) == -1)
- rc = errno;
+ rc = -errno;
if (close(fd) == -1 && rc == 0)
- rc = errno;
+ rc = -errno;
free(dname);
-
return rc;
}
rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf));
if (rc) {
- llapi_err(LLAPI_MSG_ERROR,
- "error: IOC_MDC_LOOKUP pack failed for '%s': rc %d",
- name, rc);
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "error: IOC_MDC_LOOKUP pack failed for '%s': rc %d",
+ name, rc);
return rc;
}
- return ioctl(dirfd, IOC_MDC_LOOKUP, buf);
+ rc = ioctl(dirfd, IOC_MDC_LOOKUP, buf);
+ if (rc < 0)
+ rc = -errno;
+ return rc;
}
/* Check if the value matches 1 of the given criteria (e.g. --atime +/-N).
* sign), 1st column is the answer for the MDS value, the 2nd is for the OST:
* --------------------------------------
* 1 | file > limit; sign > 0 | -1 / -1 |
- * 2 | file = limit; sign > 0 | ? / 1 |
+ * 2 | file = limit; sign > 0 | -1 / -1 |
* 3 | file < limit; sign > 0 | ? / 1 |
* 4 | file > limit; sign = 0 | -1 / -1 |
* 5 | file = limit; sign = 0 | ? / 1 | <- (see the Note below)
* --------------------------------------
* Note: 5th actually means that the value is within the interval
* (limit - margin, limit]. */
-static int find_value_cmp(unsigned int file, unsigned int limit, int sign,
- int negopt, unsigned long long margin, int mds)
+static int find_value_cmp(unsigned long long file, unsigned long long limit,
+ int sign, int negopt, unsigned long long margin,
+ int mds)
{
int ret = -1;
-
+
if (sign > 0) {
- if (file <= limit)
+ /* Drop the fraction of margin (of days). */
+ if (file + margin <= limit)
ret = mds ? 0 : 1;
} else if (sign == 0) {
- if (file <= limit && file + margin >= limit)
+ if (file <= limit && file + margin > limit)
ret = mds ? 0 : 1;
else if (file + margin <= limit)
ret = mds ? 0 : -1;
} else if (sign < 0) {
- if (file >= limit)
+ if (file > limit)
ret = 1;
else if (mds)
ret = 0;
static int find_time_check(lstat_t *st, struct find_param *param, int mds)
{
int ret;
- int rc = 0;
+ int rc = 1;
/* Check if file is accepted. */
if (param->atime) {
ret = find_value_cmp(st->st_atime, param->atime,
- param->asign, param->exclude_atime,
+ param->asign, param->exclude_atime,
24 * 60 * 60, mds);
if (ret < 0)
return ret;
if (param->mtime) {
ret = find_value_cmp(st->st_mtime, param->mtime,
- param->msign, param->exclude_mtime,
+ param->msign, param->exclude_mtime,
24 * 60 * 60, mds);
if (ret < 0)
return ret;
LASSERT(parent != NULL || dir != NULL);
- param->lmd->lmd_lmm.lmm_stripe_count = 0;
+ if (param->have_fileinfo == 0)
+ param->lmd->lmd_lmm.lmm_stripe_count = 0;
/* If a regular expression is presented, make the initial decision */
if (param->pattern != NULL) {
}
- /* If a time or OST should be checked, the decision is not taken yet. */
- if (param->atime || param->ctime || param->mtime || param->obduuid ||
- param->check_size)
+ ret = 0;
+
+ /* Request MDS for the stat info if some of these parameters need
+ * to be compared. */
+ if (param->obduuid || param->check_uid || param->check_gid ||
+ param->check_pool || param->atime || param->ctime ||
+ param->mtime || param->check_size)
+ decision = 0;
+ if (param->type && checked_type == 0)
decision = 0;
- ret = 0;
- /* Request MDS for the stat info. */
- if (param->have_fileinfo == 0) {
+ if (param->have_fileinfo == 0 && decision == 0) {
if (dir) {
/* retrieve needed file info */
ret = ioctl(dirfd(dir), LL_IOC_MDC_GETINFO,
lustre_fs = 0;
ret = lstat_f(path, st);
if (ret) {
- llapi_err(LLAPI_MSG_ERROR,
- "error: %s: lstat failed for %s",
- __func__, path);
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "error: %s: lstat failed for %s",
+ __func__, path);
return ret;
}
} else if (errno == ENOENT) {
- llapi_err(LLAPI_MSG_WARN,
+ llapi_error(LLAPI_MSG_WARN, -ENOENT,
"warning: %s: %s does not exist",
__func__, path);
goto decided;
} else {
- llapi_err(LLAPI_MSG_ERROR,"error: %s: %s failed for %s",
- __func__, dir ? "LL_IOC_MDC_GETINFO" :
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "error: %s: %s failed for %s",
+ __func__, dir ? "LL_IOC_MDC_GETINFO" :
"IOC_MDC_GETFILEINFO", path);
return ret;
}
lmm_objects[i].l_ost_idx) {
if (param->exclude_obd)
goto decided;
- goto obd_matches;
+ break;
}
}
+ /* If an OBD matches, just break */
+ if (j != param->num_obds)
+ break;
}
if (i == param->lmd->lmd_lmm.lmm_stripe_count) {
- if (param->exclude_obd)
- goto obd_matches;
- goto decided;
+ if (!param->exclude_obd)
+ goto decided;
}
}
}
}
/* Check the time on mds. */
- if (!decision) {
+ decision = 1;
+ if (param->atime || param->ctime || param->mtime) {
int for_mds;
for_mds = lustre_fs ? (S_ISREG(st->st_mode) &&
param->lmd->lmd_lmm.lmm_stripe_count)
: 0;
decision = find_time_check(st, param, for_mds);
+ if (decision == -1)
+ goto decided;
}
-obd_matches:
/* If file still fits the request, ask ost for updated info.
The regular stat is almost of the same speed as some new
'glimpse-size-ioctl'. */
- if (!decision && S_ISREG(st->st_mode) &&
- param->lmd->lmd_lmm.lmm_stripe_count &&
- (param->check_size ||param->atime || param->mtime || param->ctime)) {
+
+ if (param->check_size && S_ISREG(st->st_mode) &&
+ param->lmd->lmd_lmm.lmm_stripe_count)
+ decision = 0;
+
+ while (!decision) {
+ /* For regular files with the stripe the decision may have not
+ * been taken yet if *time or size is to be checked. */
+ LASSERT(S_ISREG(st->st_mode) &&
+ param->lmd->lmd_lmm.lmm_stripe_count);
+
if (param->obdindex != OBD_NOT_FOUND) {
/* Check whether the obd is active or not, if it is
* not active, just print the object affected by this
param->obdindex, &stat_buf,
&uuid_buf);
if (ret) {
- if (ret == -ENODATA || ret == -ENODEV
- || ret == -EIO)
- errno = EIO;
llapi_printf(LLAPI_MSG_NORMAL,
"obd_uuid: %s failed %s ",
param->obduuid->uuid,
strerror(errno));
- goto print_path;
+ break;
}
}
if (dir) {
if (ret) {
if (errno == ENOENT) {
- llapi_err(LLAPI_MSG_ERROR,
- "warning: %s: %s does not exist",
- __func__, path);
+ llapi_error(LLAPI_MSG_ERROR, -ENOENT,
+ "warning: %s: %s does not exist",
+ __func__, path);
goto decided;
} else {
- llapi_err(LLAPI_MSG_ERROR,
- "%s: IOC_LOV_GETINFO on %s failed",
- __func__, path);
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "%s: IOC_LOV_GETINFO on %s failed",
+ __func__, path);
return ret;
}
}
decision = find_time_check(st, param, 0);
if (decision == -1)
goto decided;
+
+ break;
}
if (param->check_size)
param->size_sign, param->exclude_size,
param->size_units, 0);
-print_path:
if (decision != -1) {
llapi_printf(LLAPI_MSG_NORMAL, "%s", path);
if (param->zeroend)
ret = llapi_file_fget_mdtidx(fd, &mdtidx);
close(fd);
} else {
- ret = fd;
+ ret = -errno;
}
}
if (ret) {
- if (errno == ENODATA) {
+ if (ret == -ENODATA) {
if (!param->obduuid)
llapi_printf(LLAPI_MSG_NORMAL,
"%s has no stripe info\n", path);
goto out;
- } else if (errno == ENOTTY) {
- llapi_err(LLAPI_MSG_ERROR,
- "%s: '%s' not on a Lustre fs?",
- __func__, path);
- } else if (errno == ENOENT) {
- llapi_err(LLAPI_MSG_WARN,
- "warning: %s: %s does not exist",
- __func__, path);
+ } else if (ret == -ENOENT) {
+ llapi_error(LLAPI_MSG_WARN, ret,
+ "warning: %s: %s does not exist",
+ __func__, path);
goto out;
+ } else if (ret == -ENOTTY) {
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "%s: '%s' not on a Lustre fs?",
+ __func__, path);
} else {
- llapi_err(LLAPI_MSG_ERROR,
- "error: %s: LL_IOC_GET_MDTIDX failed for %s",
- __func__, path);
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "error: %s: LL_IOC_GET_MDTIDX failed for %s",
+ __func__, path);
}
return ret;
}
llapi_printf(LLAPI_MSG_NORMAL,
"%s has no stripe info\n", path);
goto out;
- } else if (errno == ENOTTY) {
- llapi_err(LLAPI_MSG_ERROR,
- "%s: '%s' not on a Lustre fs?",
- __func__, path);
} else if (errno == ENOENT) {
- llapi_err(LLAPI_MSG_WARN,
- "warning: %s: %s does not exist",
- __func__, path);
+ llapi_error(LLAPI_MSG_WARN, -ENOENT,
+ "warning: %s: %s does not exist",
+ __func__, path);
goto out;
+ } else if (errno == ENOTTY) {
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "%s: '%s' not on a Lustre fs?",
+ __func__, path);
} else {
- llapi_err(LLAPI_MSG_ERROR,
- "error: %s: %s failed for %s",
- __func__, d ? "LL_IOC_LOV_GETSTRIPE" :
- "IOC_MDC_GETFILESTRIPE", path);
+ ret = -errno;
+ llapi_error(LLAPI_MSG_ERROR, ret,
+ "error: %s: %s failed for %s",
+ __func__, d ? "LL_IOC_LOV_GETSTRIPE" :
+ "IOC_MDC_GETFILESTRIPE", path);
}
return ret;
data.ioc_pbuf2 = (char *)uuid_buf;
data.ioc_plen2 = sizeof(struct obd_uuid);
- if ((rc = obd_ioctl_pack(&data, &rawbuf, sizeof(raw))) != 0) {
- llapi_err(LLAPI_MSG_ERROR,
- "llapi_obd_statfs: error packing ioctl data");
+ rc = obd_ioctl_pack(&data, &rawbuf, sizeof(raw));
+ if (rc != 0) {
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "llapi_obd_statfs: error packing ioctl data");
return rc;
}
if (fd < 0) {
rc = errno ? -errno : -EBADF;
- llapi_err(LLAPI_MSG_ERROR, "error: %s: opening '%s'",
- __func__, path);
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: %s: opening '%s'",
+ __func__, path);
return rc;
}
rc = ioctl(fd, IOC_OBD_STATFS, (void *)rawbuf);
fd = open(path, O_WRONLY);
if (fd < 0) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "error opening %s", path);
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error opening %s", path);
return rc;
}
rc = write(fd, buf, 1);
+ if (rc < 0)
+ rc = -errno;
close(fd);
if (rc == 1)
return rc;
}
-int llapi_target_iterate(int type_num, char **obd_type,void *args,llapi_cb_t cb)
+int llapi_target_iterate(int type_num, char **obd_type,
+ void *args, llapi_cb_t cb)
{
char buf[MAX_STRING_SIZE];
FILE *fp = fopen(DEVICES_LIST, "r");
int i, rc = 0;
if (fp == NULL) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "error: opening "DEVICES_LIST);
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: opening "DEVICES_LIST);
return rc;
}
char *obd_name = NULL;
char *obd_uuid = NULL;
char *bufp = buf;
- struct obd_ioctl_data datal = { 0, };
struct obd_statfs osfs_buffer;
while(bufp[0] == ' ')
memset(&osfs_buffer, 0, sizeof (osfs_buffer));
- datal.ioc_pbuf1 = (char *)&osfs_buffer;
- datal.ioc_plen1 = sizeof(osfs_buffer);
-
for (i = 0; i < type_num; i++) {
if (strcmp(obd_type_name, obd_type[i]) != 0)
continue;
}
}
fclose(fp);
- return rc;
+ return 0;
}
static void do_target_check(char *obd_type_name, char *obd_name,
if (rc == ENOTCONN) {
llapi_printf(LLAPI_MSG_NORMAL, "%s inactive.\n", obd_name);
} else if (rc) {
- llapi_err(LLAPI_MSG_ERROR, "error: check '%s'", obd_name);
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: check '%s'", obd_name);
} else {
llapi_printf(LLAPI_MSG_NORMAL, "%s active.\n", obd_name);
}
root = opendir(dir);
if (root == NULL) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "open %s failed", dir);
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "open %s failed", dir);
return rc;
}
rc = ioctl(dirfd(root), OBD_IOC_LLOG_CATINFO, buf);
- if (rc)
- llapi_err(LLAPI_MSG_ERROR, "ioctl OBD_IOC_CATINFO failed");
- else
+ if (rc) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "ioctl OBD_IOC_CATINFO failed");
+ } else {
llapi_printf(LLAPI_MSG_NORMAL, "%s", data.ioc_pbuf1);
+ }
closedir(root);
return rc;
root = opendir(mnt);
if (!root) {
- llapi_err(LLAPI_MSG_ERROR, "open %s failed", mnt);
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "open %s failed", mnt);
+ return rc;
}
rc = ioctl(dirfd(root), LL_IOC_QUOTACHECK, check_type);
+ if (rc < 0)
+ rc = -errno;
closedir(root);
return rc;
root = opendir(mnt);
if (!root) {
- llapi_err(LLAPI_MSG_ERROR, "open %s failed", mnt);
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "open %s failed", mnt);
+ return rc;
}
while (1) {
}
closedir(root);
- return rc;
+ return 0;
}
int llapi_quotactl(char *mnt, struct if_quotactl *qctl)
root = opendir(mnt);
if (!root) {
- llapi_err(LLAPI_MSG_ERROR, "open %s failed", mnt);
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "open %s failed", mnt);
+ return rc;
}
rc = ioctl(dirfd(root), LL_IOC_QUOTACTL, qctl);
+ if (rc < 0)
+ rc = -errno;
closedir(root);
return rc;
if (rc) {
if (errno == ENODATA) {
if (!param->obduuid && !param->quiet)
- llapi_err(LLAPI_MSG_ERROR,
+ llapi_error(LLAPI_MSG_ERROR, -ENODATA,
"%s has no stripe info", path);
rc = 0;
} else if (errno == ENOENT) {
- llapi_err(LLAPI_MSG_ERROR,
+ llapi_error(LLAPI_MSG_ERROR, -ENOENT,
"warning: %s: %s does not exist",
__func__, path);
rc = 0;
} else if (errno != EISDIR) {
- rc = errno;
- llapi_err(LLAPI_MSG_ERROR, "%s ioctl failed for %s.",
- d ? "LL_IOC_MDC_GETINFO" :
- "IOC_MDC_GETFILEINFO", path);
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "%s ioctl failed for %s.",
+ d ? "LL_IOC_MDC_GETINFO" :
+ "IOC_MDC_GETFILEINFO", path);
}
return rc;
}
* invoke syscall directly. */
rc = syscall(SYS_chown, path, -1, -1);
if (rc)
- llapi_err(LLAPI_MSG_ERROR,"error: chown %s (%u,%u)", path);
+ llapi_error(LLAPI_MSG_ERROR, errno,
+ "error: chown %s", path);
rc = chmod(path, st->st_mode);
- if (rc)
- llapi_err(LLAPI_MSG_ERROR, "error: chmod %s (%hu)",
- path, st->st_mode);
+ if (rc) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "error: chmod %s (%hu)",
+ path, st->st_mode);
+ }
return rc;
}
fp = setmntent(MOUNTED, "r");
if (fp == NULL) {
- perror("setmntent");
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "error setmntent(%s)", MOUNTED);
+ return rc;
}
while (1) {
fd = open(mnt->mnt_dir, O_RDONLY | O_DIRECTORY);
if (fd < 0) {
- perror("open");
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Can't open '%s'\n", mnt->mnt_dir);
+ return rc;
}
rc = ioctl(fd, LL_IOC_RMTACL, ops);
if (rc < 0) {
- perror("ioctl");
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "ioctl %d\n", fd);
+ return rc;
}
found++;
if (is_user) {
struct passwd *pw;
- if ((pw = getpwnam(name)) == NULL)
+ pw = getpwnam(name);
+ if (pw == NULL)
return INVALID_ID;
else
return (int)(pw->pw_uid);
} else {
struct group *gr;
- if ((gr = getgrnam(name)) == NULL)
+ gr = getgrnam(name);
+ if (gr == NULL)
return INVALID_ID;
else
return (int)(gr->gr_gid);
static int do_rmtacl(int argc, char *argv[], int ops, int (output_func)(char *))
{
pid_t pid = 0;
- int fd[2], status;
+ int fd[2], status, rc;
FILE *fp;
char buf[PIPE_BUF];
if (output_func) {
if (pipe(fd) < 0) {
- perror("pipe");
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "Can't create pipe\n");
+ return rc;
}
- if ((pid = fork()) < 0) {
- perror("fork");
+ pid = fork();
+ if (pid < 0) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "Can't fork\n");
close(fd[0]);
close(fd[1]);
- return -1;
+ return rc;
} else if (!pid) {
/* child process redirects its output. */
close(fd[0]);
close(1);
if (dup2(fd[1], 1) < 0) {
- perror("dup2");
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "Can't dup2 %d\n", fd[1]);
close(fd[1]);
- return -1;
+ return rc;
}
} else {
close(fd[1]);
if (!pid) {
status = rmtacl_notify(ops);
if (status < 0)
- return -1;
+ return -errno;
exit(execvp(argv[0], argv));
}
/* the following is parent process */
- if ((fp = fdopen(fd[0], "r")) == NULL) {
- perror("fdopen");
+ fp = fdopen(fd[0], "r");
+ if (fp == NULL) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "fdopen %d failed\n", fd[0]);
kill(pid, SIGKILL);
close(fd[0]);
- return -1;
+ return rc;
}
while (fgets(buf, PIPE_BUF, fp) != NULL) {
close(fd[0]);
if (waitpid(pid, &status, 0) < 0) {
- perror("waitpid");
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "waitpid %d failed\n", pid);
+ return rc;
}
return child_status(status);
rc = rmtacl_notify(RMT_RSETFACL);
if (rc < 0)
- return -1;
+ return rc;
exit(execvp(argv[0], argv));
}
rc = rmtacl_notify(RMT_LGETFACL);
if (rc < 0)
- return -1;
+ return rc;
exit(execvp(argv[0], argv));
}
suffix[0] = '\0';
} else {
/* Not enough room to add suffix */
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "MDT name too long |%s|", name);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "MDT name too long |%s|", name);
return -EINVAL;
}
}
}
if (rc < 0) {
if (want_error)
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "Can't open %s: %d\n", mdtname, rc);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "Can't open %s: %d\n", mdtname, rc);
return rc;
}
else
rc = 0;
if (rc && want_error)
- llapi_err(LLAPI_MSG_ERROR, "ioctl %d err %d", opc, rc);
+ llapi_error(LLAPI_MSG_ERROR, rc, "ioctl %d err %d", opc, rc);
close(fd);
return rc;
if ((kuch->kuc_transport != KUC_TRANSPORT_CHANGELOG) ||
((kuch->kuc_msgtype != CL_RECORD) &&
(kuch->kuc_msgtype != CL_EOF))) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "Unknown changelog message type %d:%d\n",
- kuch->kuc_transport, kuch->kuc_msgtype);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "Unknown changelog message type %d:%d\n",
+ kuch->kuc_transport, kuch->kuc_msgtype);
rc = -EPROTO;
goto out_free;
}
int id;
if (endrec < 0) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "can't purge negative records\n");
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "can't purge negative records\n");
return -EINVAL;
}
id = strtol(idstr + strlen(CHANGELOG_USER_PREFIX), NULL, 10);
if ((id == 0) || (strncmp(idstr, CHANGELOG_USER_PREFIX,
strlen(CHANGELOG_USER_PREFIX)) != 0)) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "expecting id of the form '"CHANGELOG_USER_PREFIX
- "<num>'; got '%s'\n", idstr);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "expecting id of the form '"
+ CHANGELOG_USER_PREFIX
+ "<num>'; got '%s'\n", idstr);
return -EINVAL;
}
sscanf(fidstr, SFID, RFID(&fid));
if (!fid_is_sane(&fid)) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "bad FID format [%s], should be "DFID"\n",
- fidstr, (__u64)1, 2, 0);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "bad FID format [%s], should be "DFID"\n",
+ fidstr, (__u64)1, 2, 0);
return -EINVAL;
}
rc = root_ioctl(device, OBD_IOC_FID2PATH, gf, NULL, 0);
if (rc) {
if (rc != -ENOENT)
- llapi_err(LLAPI_MSG_ERROR, "ioctl err %d", rc);
+ llapi_error(LLAPI_MSG_ERROR, rc, "ioctl err %d", rc);
} else {
memcpy(buf, gf->gf_path, gf->gf_pathlen);
*recno = gf->gf_recno;
int rc;
if (archive_count > 0 && archives == NULL) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "NULL archive numbers");
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "NULL archive numbers");
return -EINVAL;
}
ct->archives = 0;
for (rc = 0; rc < archive_count; rc++) {
if (archives[rc] > sizeof(ct->archives)) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "Maximum of %d archives supported",
- sizeof(ct->archives));
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "Maximum of %d archives supported",
+ sizeof(ct->archives));
goto out_err;
}
ct->archives |= 1 << archives[rc];
if (kuch->kuc_transport != KUC_TRANSPORT_HSM ||
kuch->kuc_msgtype != HMT_ACTION_LIST) {
- llapi_err(LLAPI_MSG_ERROR | LLAPI_MSG_NO_ERRNO,
- "Unknown HSM message type %d:%d\n",
- kuch->kuc_transport, kuch->kuc_msgtype);
+ llapi_err_noerrno(LLAPI_MSG_ERROR,
+ "Unknown HSM message type %d:%d\n",
+ kuch->kuc_transport, kuch->kuc_msgtype);
rc = -EPROTO;
goto out_free;
}
/* Check that we have registered for this archive # */
if (((1 << hal->hal_archive_num) & ct->archives) == 0) {
- llapi_err(LLAPI_MSG_INFO | LLAPI_MSG_NO_ERRNO,
- "Ignoring request for archive #%d (bitmask %#x)\n",
- hal->hal_archive_num, ct->archives);
+ llapi_err_noerrno(LLAPI_MSG_INFO,
+ "Ignoring request for archive #%d (bitmask %#x)\n",
+ hal->hal_archive_num, ct->archives);
rc = 0;
goto out_free;
}
root = opendir(mnt);
if (!root) {
- llapi_err(LLAPI_MSG_ERROR, "open %s failed", mnt);
- return -1;
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc, "open %s failed", mnt);
+ return rc;
}
rc = ioctl(dirfd(root), LL_IOC_GET_CONNECT_FLAGS, flags);
+ if (rc < 0) {
+ rc = -errno;
+ llapi_error(LLAPI_MSG_ERROR, rc,
+ "ioctl on %s for getting connect flags failed", mnt);
+ }
closedir(root);
- if (rc < 0)
- llapi_err(LLAPI_MSG_ERROR,
- "ioctl on %s for getting connect flags failed", mnt);
return rc;
}
rc = ioctl(fd, OBD_GET_VERSION, buffer);
if (rc == -1) {
- rc = errno;
+ rc = -errno;
close(fd);
- return -rc;
+ return rc;
}
close(fd);
*version = data->ioc_bulk;