util: add spdk_strerror() wrapper with TLS support
This patch remove need for additional buffer when translating error code to string. Change-Id: Iaa60088b5c450581d3cdddbb425119b17d55a44b Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com> Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-on: https://review.gerrithub.io/386114 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
4ebe8214dd
commit
891c12a63c
@ -98,6 +98,16 @@ char *spdk_str_trim(char *s);
|
||||
*/
|
||||
void spdk_strerror_r(int errnum, char *buf, size_t buflen);
|
||||
|
||||
/**
|
||||
* Return the string version of an error from a static, thread-local buffer.
|
||||
* This function is thread safe.
|
||||
*
|
||||
* \param errnum Error code
|
||||
*
|
||||
* \return pointer to buffer upon success.
|
||||
*/
|
||||
const char *spdk_strerror(int errnum);
|
||||
|
||||
/**
|
||||
* Remove trailing newlines from the end of a string in place.
|
||||
*
|
||||
|
@ -66,16 +66,14 @@ static int
|
||||
bdev_aio_open(struct file_disk *disk)
|
||||
{
|
||||
int fd;
|
||||
char buf[64];
|
||||
|
||||
fd = open(disk->filename, O_RDWR | O_DIRECT);
|
||||
if (fd < 0) {
|
||||
/* Try without O_DIRECT for non-disk files */
|
||||
fd = open(disk->filename, O_RDWR);
|
||||
if (fd < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("open() failed (file:%s), errno %d: %s\n",
|
||||
disk->filename, errno, buf);
|
||||
disk->filename, errno, spdk_strerror(errno));
|
||||
disk->fd = -1;
|
||||
return -1;
|
||||
}
|
||||
@ -90,7 +88,6 @@ static int
|
||||
bdev_aio_close(struct file_disk *disk)
|
||||
{
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
if (disk->fd == -1) {
|
||||
return 0;
|
||||
@ -98,9 +95,8 @@ bdev_aio_close(struct file_disk *disk)
|
||||
|
||||
rc = close(disk->fd);
|
||||
if (rc < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("close() failed (fd=%d), errno %d: %s\n",
|
||||
disk->fd, errno, buf);
|
||||
disk->fd, errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,6 @@ _spdk_rpc_lvol_store_construct_cb(void *cb_arg, struct spdk_lvol_store *lvol_sto
|
||||
struct spdk_json_write_ctx *w;
|
||||
char lvol_store_uuid[UUID_STRING_LEN];
|
||||
struct spdk_jsonrpc_request *request = cb_arg;
|
||||
char buf[64];
|
||||
|
||||
if (lvserrno != 0) {
|
||||
goto invalid;
|
||||
@ -115,8 +114,8 @@ _spdk_rpc_lvol_store_construct_cb(void *cb_arg, struct spdk_lvol_store *lvol_sto
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-lvserrno, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-lvserrno));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -126,7 +125,6 @@ spdk_rpc_construct_lvol_store(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_construct_lvol_store req = {};
|
||||
struct spdk_bdev *bdev;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_construct_lvol_store_decoders,
|
||||
SPDK_COUNTOF(rpc_construct_lvol_store_decoders),
|
||||
@ -164,8 +162,8 @@ spdk_rpc_construct_lvol_store(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
free_rpc_construct_lvol_store(&req);
|
||||
}
|
||||
SPDK_RPC_REGISTER("construct_lvol_store", spdk_rpc_construct_lvol_store)
|
||||
@ -192,7 +190,6 @@ _spdk_rpc_lvol_store_destroy_cb(void *cb_arg, int lvserrno)
|
||||
{
|
||||
struct spdk_json_write_ctx *w;
|
||||
struct spdk_jsonrpc_request *request = cb_arg;
|
||||
char buf[64];
|
||||
|
||||
if (lvserrno != 0) {
|
||||
goto invalid;
|
||||
@ -208,8 +205,8 @@ _spdk_rpc_lvol_store_destroy_cb(void *cb_arg, int lvserrno)
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-lvserrno, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-lvserrno));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -219,7 +216,6 @@ spdk_rpc_destroy_lvol_store(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_destroy_lvol_store req = {};
|
||||
struct spdk_lvol_store *lvs = NULL;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_destroy_lvol_store_decoders,
|
||||
SPDK_COUNTOF(rpc_destroy_lvol_store_decoders),
|
||||
@ -241,8 +237,8 @@ spdk_rpc_destroy_lvol_store(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
free_rpc_destroy_lvol_store(&req);
|
||||
}
|
||||
SPDK_RPC_REGISTER("destroy_lvol_store", spdk_rpc_destroy_lvol_store)
|
||||
@ -274,7 +270,6 @@ _spdk_rpc_construct_lvol_bdev_cb(void *cb_arg, struct spdk_lvol *lvol, int lvole
|
||||
{
|
||||
struct spdk_json_write_ctx *w;
|
||||
struct spdk_jsonrpc_request *request = cb_arg;
|
||||
char buf[64];
|
||||
|
||||
if (lvolerrno != 0) {
|
||||
goto invalid;
|
||||
@ -292,8 +287,8 @@ _spdk_rpc_construct_lvol_bdev_cb(void *cb_arg, struct spdk_lvol *lvol, int lvole
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-lvolerrno, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-lvolerrno));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -303,7 +298,6 @@ spdk_rpc_construct_lvol_bdev(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_construct_lvol_bdev req = {};
|
||||
size_t sz;
|
||||
int rc;
|
||||
char buf[64];
|
||||
struct spdk_lvol_store *lvs = NULL;
|
||||
|
||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Creating blob\n");
|
||||
@ -338,8 +332,8 @@ spdk_rpc_construct_lvol_bdev(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
free_rpc_construct_lvol_bdev(&req);
|
||||
}
|
||||
|
||||
@ -366,7 +360,6 @@ _spdk_rpc_resize_lvol_bdev_cb(void *cb_arg, int lvolerrno)
|
||||
{
|
||||
struct spdk_json_write_ctx *w;
|
||||
struct spdk_jsonrpc_request *request = cb_arg;
|
||||
char buf[64];
|
||||
|
||||
if (lvolerrno != 0) {
|
||||
goto invalid;
|
||||
@ -382,8 +375,8 @@ _spdk_rpc_resize_lvol_bdev_cb(void *cb_arg, int lvolerrno)
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-lvolerrno, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-lvolerrno));
|
||||
}
|
||||
|
||||
static void __attribute__((unused))
|
||||
@ -392,7 +385,6 @@ spdk_rpc_resize_lvol_bdev(struct spdk_jsonrpc_request *request,
|
||||
{
|
||||
struct rpc_resize_lvol_bdev req = {};
|
||||
int rc = 0;
|
||||
char buf[64];
|
||||
|
||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Resizing lvol\n");
|
||||
|
||||
@ -419,8 +411,8 @@ spdk_rpc_resize_lvol_bdev(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
free_rpc_resize_lvol_bdev(&req);
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,6 @@ spdk_rpc_construct_pmem_bdev(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_construct_pmem req = {};
|
||||
struct spdk_json_write_ctx *w;
|
||||
struct spdk_bdev *bdev;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_construct_pmem_decoders,
|
||||
@ -97,8 +96,7 @@ spdk_rpc_construct_pmem_bdev(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(rc));
|
||||
free_rpc_construct_pmem_bdev(&req);
|
||||
}
|
||||
SPDK_RPC_REGISTER("construct_pmem_bdev", spdk_rpc_construct_pmem_bdev)
|
||||
|
@ -73,12 +73,11 @@ rpc_create_virtio_user_scsi_bdev_cb(void *ctx, int result, struct spdk_bdev **bd
|
||||
{
|
||||
struct rpc_virtio_user_scsi_dev *req = ctx;
|
||||
struct spdk_json_write_ctx *w;
|
||||
char buf[64];
|
||||
size_t i;
|
||||
|
||||
if (result) {
|
||||
spdk_strerror_r(-result, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(req->request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(req->request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-result));
|
||||
free_rpc_connect_virtio_user_scsi_dev(req);
|
||||
return;
|
||||
}
|
||||
@ -103,7 +102,6 @@ spdk_rpc_create_virtio_user_scsi_bdev(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_virtio_user_scsi_dev *req;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
req = calloc(1, sizeof(*req));
|
||||
@ -132,8 +130,8 @@ spdk_rpc_create_virtio_user_scsi_bdev(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
free_rpc_connect_virtio_user_scsi_dev(req);
|
||||
}
|
||||
SPDK_RPC_REGISTER("construct_virtio_user_scsi_bdev", spdk_rpc_create_virtio_user_scsi_bdev);
|
||||
|
@ -50,7 +50,6 @@ spdk_iscsi_portal_accept(void *arg)
|
||||
{
|
||||
struct spdk_iscsi_portal *portal = arg;
|
||||
int rc, sock;
|
||||
char buf[64];
|
||||
|
||||
if (portal->sock < 0) {
|
||||
return;
|
||||
@ -68,8 +67,7 @@ spdk_iscsi_portal_accept(void *arg)
|
||||
}
|
||||
} else {
|
||||
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("accept error(%d): %s\n", errno, buf);
|
||||
SPDK_ERRLOG("accept error(%d): %s\n", errno, spdk_strerror(errno));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -143,13 +143,10 @@ spdk_find_iscsi_connection_by_id(int cid)
|
||||
static int
|
||||
init_idle_conns(void)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
assert(g_poll_fd == 0);
|
||||
g_poll_fd = kqueue();
|
||||
if (g_poll_fd < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("kqueue() failed, errno %d: %s\n", errno, buf);
|
||||
SPDK_ERRLOG("kqueue() failed, errno %d: %s\n", errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -179,7 +176,6 @@ del_idle_conn(struct spdk_iscsi_conn *conn)
|
||||
{
|
||||
struct kevent event;
|
||||
struct timespec ts = {0};
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
EV_SET(&event, conn->sock, EVFILT_READ, EV_DELETE, 0, 0, NULL);
|
||||
@ -190,8 +186,7 @@ del_idle_conn(struct spdk_iscsi_conn *conn)
|
||||
return -1;
|
||||
}
|
||||
if (event.flags & EV_ERROR) {
|
||||
spdk_strerror_r(event.data, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("kevent(EV_DELETE) failed: %s\n", buf);
|
||||
SPDK_ERRLOG("kevent(EV_DELETE) failed: %s\n", spdk_strerror(event.data));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -248,13 +243,10 @@ check_idle_conns(void)
|
||||
static int
|
||||
init_idle_conns(void)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
assert(g_poll_fd == 0);
|
||||
g_poll_fd = epoll_create1(0);
|
||||
if (g_poll_fd < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("epoll_create1() failed, errno %d: %s\n", errno, buf);
|
||||
SPDK_ERRLOG("epoll_create1() failed, errno %d: %s\n", errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -963,7 +955,6 @@ spdk_iscsi_conn_read_data(struct spdk_iscsi_conn *conn, int bytes,
|
||||
void *buf)
|
||||
{
|
||||
int ret;
|
||||
char errbuf[64];
|
||||
|
||||
if (bytes == 0) {
|
||||
return 0;
|
||||
@ -979,9 +970,8 @@ spdk_iscsi_conn_read_data(struct spdk_iscsi_conn *conn, int bytes,
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
||||
return 0;
|
||||
} else {
|
||||
spdk_strerror_r(errno, errbuf, sizeof(errbuf));
|
||||
SPDK_ERRLOG("spdk_sock_recv() failed (fd=%d), errno %d: %s\n",
|
||||
conn->sock, errno, errbuf);
|
||||
conn->sock, errno, spdk_strerror(errno));
|
||||
}
|
||||
return SPDK_ISCSI_CONNECTION_FATAL;
|
||||
}
|
||||
@ -1189,7 +1179,6 @@ spdk_iscsi_conn_flush_pdus_internal(struct spdk_iscsi_conn *conn)
|
||||
uint32_t writev_offset;
|
||||
struct spdk_iscsi_pdu *pdu;
|
||||
int pdu_length;
|
||||
char buf[64];
|
||||
|
||||
pdu = TAILQ_FIRST(&conn->write_pdu_list);
|
||||
|
||||
@ -1238,9 +1227,8 @@ spdk_iscsi_conn_flush_pdus_internal(struct spdk_iscsi_conn *conn)
|
||||
if (errno == EWOULDBLOCK || errno == EAGAIN) {
|
||||
return 0;
|
||||
} else {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("spdk_sock_writev() failed (fd=%d), errno %d: %s\n",
|
||||
conn->sock, errno, buf);
|
||||
conn->sock, errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,6 @@ spdk_jsonrpc_server_listen(int domain, int protocol,
|
||||
{
|
||||
struct spdk_jsonrpc_server *server;
|
||||
int rc, val, flag;
|
||||
char buf[64];
|
||||
|
||||
server = calloc(1, sizeof(struct spdk_jsonrpc_server));
|
||||
if (server == NULL) {
|
||||
@ -65,8 +64,8 @@ spdk_jsonrpc_server_listen(int domain, int protocol,
|
||||
|
||||
flag = fcntl(server->sockfd, F_GETFL);
|
||||
if (fcntl(server->sockfd, F_SETFL, flag | O_NONBLOCK) < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n", server->sockfd, buf);
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n",
|
||||
server->sockfd, spdk_strerror(errno));
|
||||
close(server->sockfd);
|
||||
free(server);
|
||||
return NULL;
|
||||
@ -74,8 +73,7 @@ spdk_jsonrpc_server_listen(int domain, int protocol,
|
||||
|
||||
rc = bind(server->sockfd, listen_addr, addrlen);
|
||||
if (rc != 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("could not bind JSON-RPC server: %s\n", buf);
|
||||
SPDK_ERRLOG("could not bind JSON-RPC server: %s\n", spdk_strerror(errno));
|
||||
close(server->sockfd);
|
||||
free(server);
|
||||
return NULL;
|
||||
@ -137,7 +135,6 @@ spdk_jsonrpc_server_accept(struct spdk_jsonrpc_server *server)
|
||||
{
|
||||
struct spdk_jsonrpc_server_conn *conn;
|
||||
int rc, conn_idx, flag;
|
||||
char buf[64];
|
||||
|
||||
rc = accept(server->sockfd, NULL, NULL);
|
||||
if (rc >= 0) {
|
||||
@ -159,8 +156,8 @@ spdk_jsonrpc_server_accept(struct spdk_jsonrpc_server *server)
|
||||
|
||||
flag = fcntl(conn->sockfd, F_GETFL);
|
||||
if (fcntl(conn->sockfd, F_SETFL, flag | O_NONBLOCK) < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n", conn->sockfd, buf);
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n",
|
||||
conn->sockfd, spdk_strerror(errno));
|
||||
close(conn->sockfd);
|
||||
return -1;
|
||||
}
|
||||
@ -223,15 +220,13 @@ spdk_jsonrpc_server_conn_recv(struct spdk_jsonrpc_server_conn *conn)
|
||||
{
|
||||
ssize_t rc;
|
||||
size_t recv_avail = SPDK_JSONRPC_RECV_BUF_SIZE - conn->recv_len;
|
||||
char buf[64];
|
||||
|
||||
rc = recv(conn->sockfd, conn->recv_buf + conn->recv_len, recv_avail, 0);
|
||||
if (rc == -1) {
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
|
||||
return 0;
|
||||
}
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_DEBUGLOG(SPDK_LOG_RPC, "recv() failed: %s\n", buf);
|
||||
SPDK_DEBUGLOG(SPDK_LOG_RPC, "recv() failed: %s\n", spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -274,7 +269,6 @@ spdk_jsonrpc_server_conn_send(struct spdk_jsonrpc_server_conn *conn)
|
||||
{
|
||||
struct spdk_jsonrpc_request *request;
|
||||
ssize_t rc;
|
||||
char buf[64];
|
||||
|
||||
more:
|
||||
if (conn->outstanding_requests == 0) {
|
||||
@ -300,8 +294,7 @@ more:
|
||||
return 0;
|
||||
}
|
||||
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_DEBUGLOG(SPDK_LOG_RPC, "send() failed: %s\n", buf);
|
||||
SPDK_DEBUGLOG(SPDK_LOG_RPC, "send() failed: %s\n", spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -493,14 +493,12 @@ static void
|
||||
spdk_nbd_poll(void *arg)
|
||||
{
|
||||
struct spdk_nbd_disk *nbd = arg;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
rc = _spdk_nbd_poll(nbd);
|
||||
if (rc < 0) {
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
SPDK_INFOLOG(SPDK_LOG_NBD, "spdk_nbd_poll() returned %s (%d); closing connection\n",
|
||||
buf, rc);
|
||||
spdk_strerror(-rc), rc);
|
||||
spdk_nbd_stop(nbd);
|
||||
}
|
||||
}
|
||||
@ -534,7 +532,6 @@ spdk_nbd_start(const char *bdev_name, const char *nbd_path)
|
||||
pthread_t tid;
|
||||
int rc;
|
||||
int sp[2];
|
||||
char buf[64];
|
||||
int flag;
|
||||
|
||||
bdev = spdk_bdev_get_by_name(bdev_name);
|
||||
@ -584,29 +581,25 @@ spdk_nbd_start(const char *bdev_name, const char *nbd_path)
|
||||
|
||||
nbd->dev_fd = open(nbd_path, O_RDWR);
|
||||
if (nbd->dev_fd == -1) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("open(\"%s\") failed: %s\n", nbd_path, buf);
|
||||
SPDK_ERRLOG("open(\"%s\") failed: %s\n", nbd_path, spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
|
||||
rc = ioctl(nbd->dev_fd, NBD_SET_BLKSIZE, spdk_bdev_get_block_size(bdev));
|
||||
if (rc == -1) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_BLKSIZE) failed: %s\n", buf);
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_BLKSIZE) failed: %s\n", spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
|
||||
rc = ioctl(nbd->dev_fd, NBD_SET_SIZE_BLOCKS, spdk_bdev_get_num_blocks(bdev));
|
||||
if (rc == -1) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_SIZE_BLOCKS) failed: %s\n", buf);
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_SIZE_BLOCKS) failed: %s\n", spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
|
||||
rc = ioctl(nbd->dev_fd, NBD_CLEAR_SOCK);
|
||||
if (rc == -1) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("ioctl(NBD_CLEAR_SOCK) failed: %s\n", buf);
|
||||
SPDK_ERRLOG("ioctl(NBD_CLEAR_SOCK) failed: %s\n", spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
|
||||
@ -615,38 +608,34 @@ spdk_nbd_start(const char *bdev_name, const char *nbd_path)
|
||||
|
||||
rc = ioctl(nbd->dev_fd, NBD_SET_SOCK, nbd->kernel_sp_fd);
|
||||
if (rc == -1) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_SOCK) failed: %s\n", buf);
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_SOCK) failed: %s\n", spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
|
||||
#ifdef NBD_FLAG_SEND_TRIM
|
||||
rc = ioctl(nbd->dev_fd, NBD_SET_FLAGS, NBD_FLAG_SEND_TRIM);
|
||||
if (rc == -1) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_FLAGS) failed: %s\n", buf);
|
||||
SPDK_ERRLOG("ioctl(NBD_SET_FLAGS) failed: %s\n", spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
|
||||
rc = pthread_create(&tid, NULL, nbd_start_kernel, (void *)(intptr_t)nbd->dev_fd);
|
||||
if (rc != 0) {
|
||||
spdk_strerror_r(rc, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("could not create thread: %s\n", buf);
|
||||
SPDK_ERRLOG("could not create thread: %s\n", spdk_strerror(rc));
|
||||
goto err;
|
||||
}
|
||||
|
||||
rc = pthread_detach(tid);
|
||||
if (rc != 0) {
|
||||
spdk_strerror_r(rc, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("could not detach thread for nbd kernel: %s\n", buf);
|
||||
SPDK_ERRLOG("could not detach thread for nbd kernel: %s\n", spdk_strerror(rc));
|
||||
goto err;
|
||||
}
|
||||
|
||||
flag = fcntl(nbd->spdk_sp_fd, F_GETFL);
|
||||
if (fcntl(nbd->spdk_sp_fd, F_SETFL, flag | O_NONBLOCK) < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n", nbd->spdk_sp_fd, buf);
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n",
|
||||
nbd->spdk_sp_fd, spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
@ -156,7 +156,6 @@ spdk_rpc_stop_nbd_disk(struct spdk_jsonrpc_request *request,
|
||||
struct spdk_nbd_disk *nbd;
|
||||
pthread_t tid;
|
||||
struct nbd_disconnect_arg *thd_arg = NULL;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_stop_nbd_disk_decoders,
|
||||
@ -188,9 +187,8 @@ spdk_rpc_stop_nbd_disk(struct spdk_jsonrpc_request *request,
|
||||
*/
|
||||
thd_arg = malloc(sizeof(*thd_arg));
|
||||
if (!thd_arg) {
|
||||
spdk_strerror_r(-ENOMEM, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("could not allocate nbd disconnect thread arg: %s\n", buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, buf);
|
||||
SPDK_ERRLOG("could not allocate nbd disconnect thread arg\n");
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, "Out of memory");
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -203,17 +201,15 @@ spdk_rpc_stop_nbd_disk(struct spdk_jsonrpc_request *request,
|
||||
*/
|
||||
rc = pthread_create(&tid, NULL, nbd_disconnect_thread, (void *)thd_arg);
|
||||
if (rc != 0) {
|
||||
spdk_strerror_r(rc, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("could not create nbd disconnect thread: %s\n", buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, buf);
|
||||
SPDK_ERRLOG("could not create nbd disconnect thread: %s\n", spdk_strerror(rc));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, spdk_strerror(rc));
|
||||
free(thd_arg);
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = pthread_detach(tid);
|
||||
if (rc != 0) {
|
||||
spdk_strerror_r(rc, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("could not detach nbd disconnect thread: %s\n", buf);
|
||||
SPDK_ERRLOG("could not detach nbd disconnect thread: %s\n", spdk_strerror(rc));
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,6 @@ static uint32_t spdk_get_ifc_ipv4(void)
|
||||
int ret;
|
||||
int rtattrlen;
|
||||
int netlink_fd;
|
||||
char errbuf[64];
|
||||
uint32_t ipv4_addr;
|
||||
|
||||
struct {
|
||||
@ -91,16 +90,14 @@ static uint32_t spdk_get_ifc_ipv4(void)
|
||||
/* Send and recv the message from kernel */
|
||||
ret = send(netlink_fd, &req, req.n.nlmsg_len, 0);
|
||||
if (ret < 0) {
|
||||
spdk_strerror_r(errno, errbuf, sizeof(errbuf));
|
||||
SPDK_ERRLOG("netlink send failed: %s\n", errbuf);
|
||||
SPDK_ERRLOG("netlink send failed: %s\n", spdk_strerror(errno));
|
||||
ret = 1;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
ret = recv(netlink_fd, buf, sizeof(buf), 0);
|
||||
if (ret <= 0) {
|
||||
spdk_strerror_r(errno, errbuf, sizeof(errbuf));
|
||||
SPDK_ERRLOG("netlink recv failed: %s\n", errbuf);
|
||||
SPDK_ERRLOG("netlink recv failed: %s\n", spdk_strerror(errno));
|
||||
ret = 1;
|
||||
goto exit;
|
||||
}
|
||||
|
@ -197,13 +197,11 @@ nvme_rdma_get_event(struct rdma_event_channel *channel,
|
||||
{
|
||||
struct rdma_cm_event *event;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
rc = rdma_get_cm_event(channel, &event);
|
||||
if (rc < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Failed to get event from CM event channel. Error %d (%s)\n",
|
||||
errno, buf);
|
||||
errno, spdk_strerror(errno));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -223,13 +221,10 @@ nvme_rdma_qpair_init(struct nvme_rdma_qpair *rqpair)
|
||||
{
|
||||
int rc;
|
||||
struct ibv_qp_init_attr attr;
|
||||
char buf[64];
|
||||
|
||||
rqpair->cq = ibv_create_cq(rqpair->cm_id->verbs, rqpair->num_entries * 2, rqpair, NULL, 0);
|
||||
if (!rqpair->cq) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Unable to create completion queue\n");
|
||||
SPDK_ERRLOG("Errno %d: %s\n", errno, buf);
|
||||
SPDK_ERRLOG("Unable to create completion queue: errno %d: %s\n", errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1410,7 +1405,6 @@ nvme_rdma_qpair_submit_request(struct spdk_nvme_qpair *qpair,
|
||||
struct spdk_nvme_rdma_req *rdma_req;
|
||||
struct ibv_send_wr *wr, *bad_wr = NULL;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
rqpair = nvme_rdma_qpair(qpair);
|
||||
assert(rqpair != NULL);
|
||||
@ -1437,8 +1431,7 @@ nvme_rdma_qpair_submit_request(struct spdk_nvme_qpair *qpair,
|
||||
|
||||
rc = ibv_post_send(rqpair->cm_id->qp, wr, &bad_wr);
|
||||
if (rc) {
|
||||
spdk_strerror_r(rc, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Failure posting rdma send for NVMf completion: %d (%s)\n", rc, buf);
|
||||
SPDK_ERRLOG("Failure posting rdma send for NVMf completion: %d (%s)\n", rc, spdk_strerror(rc));
|
||||
}
|
||||
|
||||
return rc;
|
||||
@ -1495,7 +1488,6 @@ nvme_rdma_qpair_process_completions(struct spdk_nvme_qpair *qpair,
|
||||
int i, rc, batch_size;
|
||||
uint32_t reaped;
|
||||
struct ibv_cq *cq;
|
||||
char buf[64];
|
||||
|
||||
if (max_completions == 0) {
|
||||
max_completions = rqpair->num_entries;
|
||||
@ -1511,9 +1503,8 @@ nvme_rdma_qpair_process_completions(struct spdk_nvme_qpair *qpair,
|
||||
MAX_COMPLETIONS_PER_POLL);
|
||||
rc = ibv_poll_cq(cq, batch_size, wc);
|
||||
if (rc < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Error polling CQ! (%d): %s\n",
|
||||
errno, buf);
|
||||
errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
} else if (rc == 0) {
|
||||
/* Ran out of completions */
|
||||
|
@ -51,7 +51,6 @@ spdk_uevent_connect(void)
|
||||
struct sockaddr_nl addr;
|
||||
int netlink_fd;
|
||||
int size = 64 * 1024;
|
||||
char buf[64];
|
||||
int flag;
|
||||
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
@ -68,8 +67,8 @@ spdk_uevent_connect(void)
|
||||
|
||||
flag = fcntl(netlink_fd, F_GETFL);
|
||||
if (fcntl(netlink_fd, F_SETFL, flag | O_NONBLOCK) < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n", netlink_fd, buf);
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n", netlink_fd,
|
||||
spdk_strerror(errno));
|
||||
close(netlink_fd);
|
||||
return -1;
|
||||
}
|
||||
@ -174,7 +173,6 @@ spdk_get_uevent(int fd, struct spdk_uevent *uevent)
|
||||
{
|
||||
int ret;
|
||||
char buf[SPDK_UEVENT_MSG_LEN];
|
||||
char errbuf[64];
|
||||
|
||||
memset(uevent, 0, sizeof(struct spdk_uevent));
|
||||
memset(buf, 0, SPDK_UEVENT_MSG_LEN);
|
||||
@ -188,8 +186,7 @@ spdk_get_uevent(int fd, struct spdk_uevent *uevent)
|
||||
if (errno == EAGAIN || errno == EWOULDBLOCK) {
|
||||
return 0;
|
||||
} else {
|
||||
spdk_strerror_r(errno, errbuf, sizeof(errbuf));
|
||||
SPDK_ERRLOG("Socket read error(%d): %s\n", errno, errbuf);
|
||||
SPDK_ERRLOG("Socket read error(%d): %s\n", errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
@ -336,7 +336,6 @@ spdk_nvmf_rdma_qpair_initialize(struct spdk_nvmf_qpair *qpair)
|
||||
struct ibv_qp_init_attr attr;
|
||||
struct spdk_nvmf_rdma_recv *rdma_recv;
|
||||
struct spdk_nvmf_rdma_request *rdma_req;
|
||||
char buf[64];
|
||||
|
||||
rqpair = SPDK_CONTAINEROF(qpair, struct spdk_nvmf_rdma_qpair, qpair);
|
||||
rtransport = SPDK_CONTAINEROF(qpair->transport, struct spdk_nvmf_rdma_transport, transport);
|
||||
@ -352,9 +351,7 @@ spdk_nvmf_rdma_qpair_initialize(struct spdk_nvmf_qpair *qpair)
|
||||
|
||||
rc = rdma_create_qp(rqpair->cm_id, NULL, &attr);
|
||||
if (rc) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("rdma_create_qp failed\n");
|
||||
SPDK_ERRLOG("Errno %d: %s\n", errno, buf);
|
||||
SPDK_ERRLOG("rdma_create_qp failed: errno %d: %s\n", errno, spdk_strerror(errno));
|
||||
rdma_destroy_id(rqpair->cm_id);
|
||||
spdk_nvmf_rdma_qpair_destroy(rqpair);
|
||||
return -1;
|
||||
@ -1122,7 +1119,6 @@ spdk_nvmf_rdma_create(struct spdk_nvmf_tgt *tgt)
|
||||
struct spdk_nvmf_rdma_device *device, *tmp;
|
||||
struct ibv_context **contexts;
|
||||
uint32_t i;
|
||||
char buf[64];
|
||||
int flag;
|
||||
|
||||
rtransport = calloc(1, sizeof(*rtransport));
|
||||
@ -1145,17 +1141,15 @@ spdk_nvmf_rdma_create(struct spdk_nvmf_tgt *tgt)
|
||||
|
||||
rtransport->event_channel = rdma_create_event_channel();
|
||||
if (rtransport->event_channel == NULL) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("rdma_create_event_channel() failed, %s\n", buf);
|
||||
SPDK_ERRLOG("rdma_create_event_channel() failed, %s\n", spdk_strerror(errno));
|
||||
free(rtransport);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
flag = fcntl(rtransport->event_channel->fd, F_GETFL);
|
||||
if (fcntl(rtransport->event_channel->fd, F_SETFL, flag | O_NONBLOCK) < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("fcntl can't set nonblocking mode for socket, fd: %d (%s)\n",
|
||||
rtransport->event_channel->fd, buf);
|
||||
rtransport->event_channel->fd, spdk_strerror(errno));
|
||||
free(rtransport);
|
||||
return NULL;
|
||||
}
|
||||
@ -1404,7 +1398,6 @@ spdk_nvmf_rdma_accept(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn)
|
||||
struct spdk_nvmf_rdma_transport *rtransport;
|
||||
struct rdma_cm_event *event;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
rtransport = SPDK_CONTAINEROF(transport, struct spdk_nvmf_rdma_transport, transport);
|
||||
|
||||
@ -1445,8 +1438,7 @@ spdk_nvmf_rdma_accept(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn)
|
||||
rdma_ack_cm_event(event);
|
||||
} else {
|
||||
if (errno != EAGAIN && errno != EWOULDBLOCK) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Acceptor Event Error: %s\n", buf);
|
||||
SPDK_ERRLOG("Acceptor Event Error: %s\n", spdk_strerror(errno));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1759,14 +1751,12 @@ spdk_nvmf_rdma_poller_poll(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
int reaped, i;
|
||||
int count = 0;
|
||||
bool error = false;
|
||||
char buf[64];
|
||||
|
||||
/* Poll for completing operations. */
|
||||
reaped = ibv_poll_cq(rpoller->cq, 32, wc);
|
||||
if (reaped < 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Error polling CQ! (%d): %s\n",
|
||||
errno, buf);
|
||||
errno, spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -89,15 +89,13 @@ spdk_trace_init(const char *shm_name)
|
||||
{
|
||||
int trace_fd;
|
||||
int i = 0;
|
||||
char buf[64];
|
||||
|
||||
snprintf(g_shm_name, sizeof(g_shm_name), "%s", shm_name);
|
||||
|
||||
trace_fd = shm_open(shm_name, O_RDWR | O_CREAT, 0600);
|
||||
if (trace_fd == -1) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
fprintf(stderr, "could not shm_open spdk_trace\n");
|
||||
fprintf(stderr, "errno=%d %s\n", errno, buf);
|
||||
fprintf(stderr, "errno=%d %s\n", errno, spdk_strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
|
||||
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
||||
|
||||
C_SRCS = bit_array.c crc16.c crc32.c crc32c.c crc32_ieee.c fd.c io_channel.c string.c
|
||||
C_SRCS = bit_array.c crc16.c crc32.c crc32c.c crc32_ieee.c fd.c io_channel.c strerror_tls.c string.c
|
||||
LIBNAME = util
|
||||
|
||||
include $(SPDK_ROOT_DIR)/mk/spdk.lib.mk
|
||||
|
43
lib/util/strerror_tls.c
Normal file
43
lib/util/strerror_tls.c
Normal file
@ -0,0 +1,43 @@
|
||||
/*-
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright (c) Intel Corporation.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* * Neither the name of Intel Corporation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "spdk/string.h"
|
||||
|
||||
static __thread char strerror_message[64];
|
||||
|
||||
const char *
|
||||
spdk_strerror(int errnum)
|
||||
{
|
||||
spdk_strerror_r(errnum, strerror_message, sizeof(strerror_message));
|
||||
return strerror_message;
|
||||
}
|
@ -507,7 +507,6 @@ spdk_vhost_dev_construct(struct spdk_vhost_dev *vdev, const char *name, const ch
|
||||
unsigned ctrlr_num;
|
||||
char path[PATH_MAX];
|
||||
struct stat file_stat;
|
||||
char buf[64];
|
||||
uint64_t cpumask;
|
||||
|
||||
assert(vdev);
|
||||
@ -596,9 +595,8 @@ spdk_vhost_dev_construct(struct spdk_vhost_dev *vdev, const char *name, const ch
|
||||
g_spdk_vhost_devices[ctrlr_num] = vdev;
|
||||
|
||||
if (rte_vhost_driver_start(path) != 0) {
|
||||
spdk_strerror_r(errno, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Failed to start vhost driver for controller %s (%d): %s\n", name, errno,
|
||||
buf);
|
||||
spdk_strerror(errno));
|
||||
rte_vhost_driver_unregister(path);
|
||||
return -EIO;
|
||||
}
|
||||
@ -1009,7 +1007,6 @@ void
|
||||
spdk_vhost_shutdown_cb(void)
|
||||
{
|
||||
pthread_t tid;
|
||||
char buf[64];
|
||||
int rc;
|
||||
struct spdk_event *vhost_app_stop;
|
||||
|
||||
@ -1017,8 +1014,7 @@ spdk_vhost_shutdown_cb(void)
|
||||
|
||||
rc = pthread_create(&tid, NULL, &session_shutdown, vhost_app_stop);
|
||||
if (rc < 0) {
|
||||
spdk_strerror_r(rc, buf, sizeof(buf));
|
||||
SPDK_ERRLOG("Failed to start session shutdown thread (%d): %s\n", rc, buf);
|
||||
SPDK_ERRLOG("Failed to start session shutdown thread (%d): %s\n", rc, spdk_strerror(rc));
|
||||
abort();
|
||||
}
|
||||
pthread_detach(tid);
|
||||
|
@ -68,7 +68,6 @@ spdk_rpc_construct_vhost_scsi_controller(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_vhost_scsi_ctrlr req = {0};
|
||||
struct spdk_json_write_ctx *w;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_construct_vhost_ctrlr,
|
||||
SPDK_COUNTOF(rpc_construct_vhost_ctrlr),
|
||||
@ -95,9 +94,9 @@ spdk_rpc_construct_vhost_scsi_controller(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
free_rpc_vhost_scsi_ctrlr(&req);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
}
|
||||
SPDK_RPC_REGISTER("construct_vhost_scsi_controller", spdk_rpc_construct_vhost_scsi_controller)
|
||||
|
||||
@ -130,7 +129,6 @@ spdk_rpc_add_vhost_scsi_lun_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
struct spdk_jsonrpc_request *request = rpc->request;
|
||||
struct spdk_json_write_ctx *w;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
if (vdev == NULL) {
|
||||
rc = -ENODEV;
|
||||
@ -155,8 +153,8 @@ spdk_rpc_add_vhost_scsi_lun_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
|
||||
invalid:
|
||||
free_rpc_add_vhost_scsi_ctrlr_lun(rpc);
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -165,7 +163,6 @@ spdk_rpc_add_vhost_scsi_lun(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_add_vhost_scsi_ctrlr_lun *req;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
req = calloc(1, sizeof(*req));
|
||||
@ -197,8 +194,8 @@ invalid:
|
||||
if (req) {
|
||||
free_rpc_add_vhost_scsi_ctrlr_lun(req);
|
||||
}
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
}
|
||||
SPDK_RPC_REGISTER("add_vhost_scsi_lun", spdk_rpc_add_vhost_scsi_lun)
|
||||
|
||||
@ -245,7 +242,6 @@ spdk_rpc_remove_vhost_scsi_target_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
{
|
||||
struct rpc_remove_vhost_scsi_ctrlr_target *rpc = arg;
|
||||
struct spdk_jsonrpc_request *request = rpc->request;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
if (vdev == NULL) {
|
||||
@ -263,8 +259,7 @@ spdk_rpc_remove_vhost_scsi_target_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
|
||||
invalid:
|
||||
free_rpc_remove_vhost_scsi_ctrlr_target(rpc);
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -274,7 +269,6 @@ spdk_rpc_remove_vhost_scsi_target(struct spdk_jsonrpc_request *request,
|
||||
{
|
||||
struct rpc_remove_vhost_scsi_ctrlr_target *req;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
req = calloc(1, sizeof(*req));
|
||||
if (req == NULL) {
|
||||
@ -299,8 +293,8 @@ invalid:
|
||||
if (req) {
|
||||
free_rpc_remove_vhost_scsi_ctrlr_target(req);
|
||||
}
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
}
|
||||
|
||||
SPDK_RPC_REGISTER("remove_vhost_scsi_target", spdk_rpc_remove_vhost_scsi_target)
|
||||
@ -334,7 +328,6 @@ spdk_rpc_construct_vhost_blk_controller(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_vhost_blk_ctrlr req = {0};
|
||||
struct spdk_json_write_ctx *w;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_construct_vhost_blk_ctrlr,
|
||||
SPDK_COUNTOF(rpc_construct_vhost_blk_ctrlr),
|
||||
@ -361,10 +354,9 @@ spdk_rpc_construct_vhost_blk_controller(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
free_rpc_vhost_blk_ctrlr(&req);
|
||||
spdk_jsonrpc_send_error_response(request,
|
||||
SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
|
||||
}
|
||||
SPDK_RPC_REGISTER("construct_vhost_blk_controller", spdk_rpc_construct_vhost_blk_controller)
|
||||
@ -393,7 +385,6 @@ spdk_rpc_remove_vhost_controller_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
struct spdk_jsonrpc_request *request = ctx->request;
|
||||
struct spdk_json_write_ctx *w;
|
||||
int rc;
|
||||
char buf[64];
|
||||
|
||||
if (vdev == NULL) {
|
||||
rc = -ENODEV;
|
||||
@ -418,9 +409,8 @@ spdk_rpc_remove_vhost_controller_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
|
||||
invalid:
|
||||
free_rpc_remove_vhost_ctrlr(ctx);
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request,
|
||||
SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -429,7 +419,6 @@ spdk_rpc_remove_vhost_controller(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_remove_vhost_ctrlr *req;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
req = calloc(1, sizeof(*req));
|
||||
@ -453,9 +442,8 @@ invalid:
|
||||
if (req) {
|
||||
free_rpc_remove_vhost_ctrlr(req);
|
||||
}
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request,
|
||||
SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
|
||||
}
|
||||
SPDK_RPC_REGISTER("remove_vhost_controller", spdk_rpc_remove_vhost_controller)
|
||||
@ -503,7 +491,6 @@ spdk_rpc_get_vhost_controllers(struct spdk_jsonrpc_request *request,
|
||||
{
|
||||
struct rpc_get_vhost_ctrlrs *ctx;
|
||||
struct spdk_json_write_ctx *w;
|
||||
char buf[64];
|
||||
|
||||
if (params != NULL) {
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
@ -520,8 +507,8 @@ spdk_rpc_get_vhost_controllers(struct spdk_jsonrpc_request *request,
|
||||
|
||||
ctx = calloc(1, sizeof(*ctx));
|
||||
if (ctx == NULL) {
|
||||
spdk_strerror_r(-ENOMEM, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||
spdk_strerror(ENOMEM));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -561,7 +548,6 @@ spdk_rpc_set_vhost_controller_coalescing_cb(struct spdk_vhost_dev *vdev, void *a
|
||||
{
|
||||
struct rpc_vhost_ctrlr_coalescing *req = arg;
|
||||
struct spdk_json_write_ctx *w;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
if (vdev == NULL) {
|
||||
@ -584,8 +570,8 @@ spdk_rpc_set_vhost_controller_coalescing_cb(struct spdk_vhost_dev *vdev, void *a
|
||||
return 0;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
spdk_jsonrpc_send_error_response(req->request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(req->request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
free_rpc_set_vhost_controllers_event_coalescing(req);
|
||||
return 0;
|
||||
}
|
||||
@ -595,7 +581,6 @@ spdk_rpc_set_vhost_controller_coalescing(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_vhost_ctrlr_coalescing *req;
|
||||
char buf[64];
|
||||
int rc;
|
||||
|
||||
req = calloc(1, sizeof(struct rpc_vhost_ctrlr_coalescing));
|
||||
@ -616,9 +601,9 @@ spdk_rpc_set_vhost_controller_coalescing(struct spdk_jsonrpc_request *request,
|
||||
return;
|
||||
|
||||
invalid:
|
||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||
free_rpc_set_vhost_controllers_event_coalescing(req);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
spdk_strerror(-rc));
|
||||
}
|
||||
SPDK_RPC_REGISTER("set_vhost_controller_coalescing", spdk_rpc_set_vhost_controller_coalescing)
|
||||
|
||||
|
@ -237,12 +237,10 @@ static uint64_t
|
||||
virtio_user_get_features(struct virtio_dev *vdev)
|
||||
{
|
||||
struct virtio_user_dev *dev = vdev->ctx;
|
||||
char err_str[64];
|
||||
uint64_t features;
|
||||
|
||||
if (dev->ops->send_request(dev, VHOST_USER_GET_FEATURES, &features) < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("get_features failed: %s\n", err_str);
|
||||
SPDK_ERRLOG("get_features failed: %s\n", spdk_strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -285,7 +283,6 @@ virtio_user_setup_queue(struct virtio_dev *vdev, struct virtqueue *vq)
|
||||
struct virtio_user_dev *dev = vdev->ctx;
|
||||
uint16_t queue_idx = vq->vq_queue_index;
|
||||
uint64_t desc_addr, avail_addr, used_addr;
|
||||
char err_str[64];
|
||||
int callfd;
|
||||
int kickfd;
|
||||
|
||||
@ -300,15 +297,13 @@ virtio_user_setup_queue(struct virtio_dev *vdev, struct virtqueue *vq)
|
||||
*/
|
||||
callfd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK);
|
||||
if (callfd < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("callfd error, %s\n", err_str);
|
||||
SPDK_ERRLOG("callfd error, %s\n", spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
kickfd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK);
|
||||
if (kickfd < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("kickfd error, %s\n", err_str);
|
||||
SPDK_ERRLOG("kickfd error, %s\n", spdk_strerror(errno));
|
||||
close(callfd);
|
||||
return -1;
|
||||
}
|
||||
@ -355,11 +350,9 @@ virtio_user_notify_queue(struct virtio_dev *vdev, struct virtqueue *vq)
|
||||
{
|
||||
uint64_t buf = 1;
|
||||
struct virtio_user_dev *dev = vdev->ctx;
|
||||
char err_str[64];
|
||||
|
||||
if (write(dev->kickfds[vq->vq_queue_index], &buf, sizeof(buf)) < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("failed to kick backend: %s.\n", err_str);
|
||||
SPDK_ERRLOG("failed to kick backend: %s.\n", spdk_strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
@ -405,7 +398,6 @@ virtio_user_dev_init(struct virtio_dev *vdev, const char *name, const char *path
|
||||
uint32_t queue_size)
|
||||
{
|
||||
struct virtio_user_dev *dev;
|
||||
char err_str[64];
|
||||
int rc;
|
||||
|
||||
if (name == NULL) {
|
||||
@ -441,8 +433,7 @@ virtio_user_dev_init(struct virtio_dev *vdev, const char *name, const char *path
|
||||
}
|
||||
|
||||
if (dev->ops->send_request(dev, VHOST_USER_SET_OWNER, NULL) < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("set_owner fails: %s\n", err_str);
|
||||
SPDK_ERRLOG("set_owner fails: %s\n", spdk_strerror(errno));
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
@ -289,7 +289,6 @@ vhost_user_sock(struct virtio_user_dev *dev,
|
||||
{
|
||||
struct vhost_user_msg msg;
|
||||
struct vhost_vring_file *file = 0;
|
||||
char err_str[64];
|
||||
int need_reply = 0;
|
||||
int fds[VHOST_MEMORY_MAX_NREGIONS];
|
||||
int fd_num = 0;
|
||||
@ -370,9 +369,8 @@ vhost_user_sock(struct virtio_user_dev *dev,
|
||||
|
||||
len = VHOST_USER_HDR_SIZE + msg.size;
|
||||
if (vhost_user_write(vhostfd, &msg, len, fds, fd_num) < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("%s failed: %s\n",
|
||||
vhost_msg_strings[req], err_str);
|
||||
vhost_msg_strings[req], spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -383,8 +381,7 @@ vhost_user_sock(struct virtio_user_dev *dev,
|
||||
|
||||
if (need_reply) {
|
||||
if (vhost_user_read(vhostfd, &msg) < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_WARNLOG("Received msg failed: %s\n", err_str);
|
||||
SPDK_WARNLOG("Received msg failed: %s\n", spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -433,19 +430,16 @@ vhost_user_setup(struct virtio_user_dev *dev)
|
||||
int flag;
|
||||
struct sockaddr_un un;
|
||||
ssize_t rc;
|
||||
char err_str[64];
|
||||
|
||||
fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
if (fd < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("socket() error, %s\n", err_str);
|
||||
SPDK_ERRLOG("socket() error, %s\n", spdk_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
flag = fcntl(fd, F_GETFD);
|
||||
if (fcntl(fd, F_SETFD, flag | FD_CLOEXEC) < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("fcntl failed, %s\n", err_str);
|
||||
SPDK_ERRLOG("fcntl failed, %s\n", spdk_strerror(errno));
|
||||
}
|
||||
|
||||
memset(&un, 0, sizeof(un));
|
||||
@ -457,8 +451,7 @@ vhost_user_setup(struct virtio_user_dev *dev)
|
||||
return -1;
|
||||
}
|
||||
if (connect(fd, (struct sockaddr *)&un, sizeof(un)) < 0) {
|
||||
spdk_strerror_r(errno, err_str, sizeof(err_str));
|
||||
SPDK_ERRLOG("connect error, %s\n", err_str);
|
||||
SPDK_ERRLOG("connect error, %s\n", spdk_strerror(errno));
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ APP = stub
|
||||
|
||||
C_SRCS := stub.c
|
||||
|
||||
SPDK_LIB_LIST = event conf nvme util log trace rpc jsonrpc json
|
||||
SPDK_LIB_LIST = event conf nvme log trace rpc jsonrpc json util
|
||||
|
||||
LIBS += $(SPDK_LIB_LINKER_ARGS)
|
||||
LIBS += $(ENV_LINKER_ARGS)
|
||||
|
@ -35,7 +35,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../../../../..)
|
||||
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
||||
include $(SPDK_ROOT_DIR)/mk/spdk.app.mk
|
||||
|
||||
SPDK_LIB_LIST = log util cunit trace conf
|
||||
SPDK_LIB_LIST = log cunit trace conf util
|
||||
|
||||
CFLAGS += -I$(SPDK_ROOT_DIR)/test
|
||||
CFLAGS += -I$(SPDK_ROOT_DIR)/lib
|
||||
|
Loading…
Reference in New Issue
Block a user