static struct ioc_dev ioc_dev_list[10];
+#ifndef ARRAY_SIZE
+# define ARRAY_SIZE(a) ((sizeof(a)) / (sizeof((a)[0])))
+#endif /* !ARRAY_SIZE */
+
static int
open_ioc_dev(int dev_id)
{
const char *dev_name;
- if (dev_id < 0 ||
- dev_id >= sizeof(ioc_dev_list) / sizeof(ioc_dev_list[0]))
- return -EINVAL;
+ if (dev_id < 0 || dev_id >= ARRAY_SIZE(ioc_dev_list)) {
+ errno = EINVAL;
+ return -errno;
+ }
dev_name = ioc_dev_list[dev_id].dev_name;
if (!dev_name) {
fprintf(stderr, "unknown device id: %d\n", dev_id);
- return -EINVAL;
+ errno = EINVAL;
+ return -errno;
}
if (ioc_dev_list[dev_id].dev_fd < 0) {
fprintf(stderr, "opening %s failed: %s\n"
"hint: the kernel modules may not be loaded\n",
dev_name, strerror(errno));
- return fd;
+ return -errno;
}
ioc_dev_list[dev_id].dev_fd = fd;
}
rc = ioctl(fd, opc, buf);
- return rc;
+ return rc < 0 ? -errno : rc;
}
/* register a device to send ioctls to. */
}
rc = range_insert(&config->nmc_range_tree, range);
- if (rc != 0) {
- CERROR("cannot insert nodemap range into '%s': rc = %d\n",
- nodemap->nm_name, rc);
+ if (rc) {
+ CDEBUG_LIMIT(rc == -EEXIST ? D_INFO : D_ERROR,
+ "cannot insert nodemap range into '%s': rc = %d\n",
+ nodemap->nm_name, rc);
up_write(&config->nmc_range_tree_lock);
list_del(&range->rn_list);
range_destroy(range);
- GOTO(out, rc = -ENOMEM);
+ GOTO(out, rc);
}
list_add(&range->rn_list, &nodemap->nm_ranges);
out:
return rc;
}
+
int nodemap_add_range(const char *name, const lnet_nid_t nid[2])
{
struct lu_nodemap *nodemap = NULL;
memset(buf, 0, sizeof(rawbuf));
rc = llapi_ioctl_pack(&data, &buf, sizeof(rawbuf));
- if (rc != 0) {
+ if (rc) {
fprintf(stderr,
- "error: invalid ioctl: %08x errno: %d with rc=%d\n",
- cmd, errno, rc);
+ "error: invalid ioctl request: %08x errno: %d: %s\n",
+ cmd, errno, strerror(-rc));
goto out;
}
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_NODEMAP, buf);
- if (rc != 0) {
+ if (rc) {
fprintf(stderr,
- "error: invalid ioctl: %08x errno: %d with rc=%d\n",
- cmd, errno, rc);
+ "error: invalid ioctl: %08x errno: %d: %s\n",
+ cmd, errno, strerror(errno));
goto out;
}
if (ret_data) {
rc = llapi_ioctl_unpack(&data, buf, sizeof(rawbuf));
- if (rc != 0)
+ if (rc)
goto out;
if (ret_size > data.ioc_plen1)
fprintf(stderr,
"error: nodemap_xxx_range: can't parse nid range: %s\n",
nodemap_range);
- return -1;
+ return -EINVAL;
}
rc = cfs_nidrange_find_min_max(&nidlist, &min_nid[0], &max_nid[0],
* --name nodemap name
* --range properly formatted nid range
*
- * \retval 0 on success
+ * \retval 0 on success, -errno on error
*/
int jt_nodemap_add_range(int argc, char **argv)
{
if (!nodemap_name || !nodemap_range) {
fprintf(stderr,
"usage: nodemap_add_range --name <name> --range <range>\n");
- return -1;
+ return -EINVAL;
}
rc = parse_nid_range(nodemap_range, nid_range, sizeof(nid_range));
if (rc) {
- errno = -rc;
return rc;
}
rc = nodemap_cmd(LCFG_NODEMAP_ADD_RANGE, NULL, 0, argv[0],
nodemap_name, nid_range, NULL);
- if (rc != 0) {
- errno = -rc;
+ if (rc) {
fprintf(stderr,
- "error: %s: cannot add range '%s' to nodemap '%s': rc = %d\n",
- jt_cmdname(argv[0]), nodemap_range, nodemap_name, rc);
+ "error: %s: cannot add range '%s' to nodemap '%s': %s\n",
+ jt_cmdname(argv[0]), nodemap_range, nodemap_name,
+ strerror(-rc));
}
return rc;
}
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_GET_OBJ_VERSION, buf);
- if (rc == -1) {
+ if (rc) {
fprintf(stderr, "error: %s: ioctl: %s\n",
jt_cmdname(argv[0]), strerror(errno));
return -errno;