scst: Normalize userspace indentation and line wrapping

Normalize userspace indentation, operator spacing, pointer placement,
continuation alignment and long declarations, calls and expressions.
Keep changes at existing argument/operator boundaries and retain
literal contents, operand evaluation order and preprocessor branches.
Keep conditional directives at column zero; align their continued
operands independently.

Checkpatch reports SPACING, CODE_INDENT, POINTER_LOCATION. One example:

  No space is necessary after a cast

Checkpatch reports SUSPECT_CODE_INDENT:

  suspect code indent for conditional statements (24, 40)

Checkpatch reports SPACING, PARENTHESIS_ALIGNMENT, LINE_SPACING. One
example:

  spaces preferred around that '|' (ctx:VxV)

Checkpatch reports BLOCK_COMMENT_STYLE, OPEN_BRACE. One example:

  Block comments use * on subsequent lines

Checkpatch reports INDENTED_LABEL, PARENTHESIS_ALIGNMENT. One example:

  labels should not be indented

Checkpatch reports PARENTHESIS_ALIGNMENT, SWITCH_CASE_INDENT_LEVEL. One
example:

  Alignment should match open parenthesis

Checkpatch reports LONG_LINE:

  line length of 125 exceeds 100 columns

Checkpatch reports OPEN_ENDED_LINE:

  Lines should not end with a '('
This commit is contained in:
Gleb Chesnokov
2026-10-22 14:30:26 +03:00
parent 2cf6fb9631
commit ec2e02306f
27 changed files with 454 additions and 421 deletions
+12 -9
View File
@@ -225,7 +225,8 @@ static void encode_base64_string(const u8 *intnum, long length, char *string)
strptr += 4;
} else if (delta == 2) {
string[strptr] = base64code[(intnum[count] & 0xfc) >> 2];
string[strptr + 1] = base64code[((intnum[count] & 0x03) << 4) | ((intnum[count + 1] & 0xf0) >> 4)];
string[strptr + 1] = base64code[((intnum[count] & 0x03) << 4) |
((intnum[count + 1] & 0xf0) >> 4)];
string[strptr + 2] = base64code[(intnum[count + 1] & 0x0f) << 2];
string[strptr + 3] = base64code[64];
strptr += 4;
@@ -288,7 +289,7 @@ static int chap_decode_string(char *encoded, u8 *decode_buf, int buf_len, int en
if (encoding_fmt == HEX_FORMAT) {
if ((strlen(encoded) - 2) > (2 * buf_len)) {
log_error("%s(%d) BUG? buf[%d] !sufficient to decode string[%d]",
__func__, __LINE__, buf_len, (int) strlen(encoded));
__func__, __LINE__, buf_len, (int)strlen(encoded));
return CHAP_TARGET_ERROR;
}
decode_hex_string(encoded + 2, decode_buf, buf_len);
@@ -296,7 +297,7 @@ static int chap_decode_string(char *encoded, u8 *decode_buf, int buf_len, int en
} else if (encoding_fmt == BASE64_FORMAT) {
if ((strlen(encoded) - 2) > ((buf_len - 1) / 3 + 1) * 4) {
log_error("%s(%d) BUG? buf[%d] !sufficient to decode string[%d]",
__func__, __LINE__, buf_len, (int) strlen(encoded));
__func__, __LINE__, buf_len, (int)strlen(encoded));
return CHAP_TARGET_ERROR;
}
decode_base64_string(encoded + 2, decode_buf, buf_len);
@@ -308,7 +309,8 @@ static int chap_decode_string(char *encoded, u8 *decode_buf, int buf_len, int en
return 0;
}
static inline void chap_encode_string(const u8 *intnum, int buf_len, char *encode_buf, int encoding_fmt)
static inline void chap_encode_string(const u8 *intnum, int buf_len, char *encode_buf,
int encoding_fmt)
{
encode_buf[0] = '0';
if (encoding_fmt == HEX_FORMAT) {
@@ -321,7 +323,7 @@ static inline void chap_encode_string(const u8 *intnum, int buf_len, char *encod
}
static inline void chap_calc_digest_md5(char chap_id, const char *secret, int secret_len,
const u8 *challenge, int challenge_len, u8 *digest)
const u8 *challenge, int challenge_len, u8 *digest)
{
struct md5_ctx ctx;
@@ -333,7 +335,7 @@ static inline void chap_calc_digest_md5(char chap_id, const char *secret, int se
}
static inline void chap_calc_digest_sha1(char chap_id, const char *secret, int secret_len,
const u8 *challenge, int challenge_len, u8 *digest)
const u8 *challenge, int challenge_len, u8 *digest)
{
struct sha1_ctx ctx;
@@ -468,7 +470,6 @@ static int chap_initiator_auth_create_challenge(struct connection *conn)
conn->auth_state = CHAP_AUTH_STATE_CHALLENGE;
break;
}
}
if (!p)
return CHAP_INITIATOR_ERROR;
@@ -753,11 +754,13 @@ static int chap_target_auth_create_response(struct connection *conn)
switch (conn->auth.chap.digest_alg) {
case CHAP_DIGEST_ALG_MD5:
chap_calc_digest_md5(chap_id, ISCSI_USER_PASS(user),
strlen(ISCSI_USER_PASS(user)), challenge, challenge_len, digest);
strlen(ISCSI_USER_PASS(user)), challenge, challenge_len,
digest);
break;
case CHAP_DIGEST_ALG_SHA1:
chap_calc_digest_sha1(chap_id, ISCSI_USER_PASS(user),
strlen(ISCSI_USER_PASS(user)), challenge, challenge_len, digest);
strlen(ISCSI_USER_PASS(user)), challenge, challenge_len,
digest);
break;
case CHAP_DIGEST_ALG_SHA256:
res = chap_calc_digest_sha256(chap_id, ISCSI_USER_PASS(user),
+31 -25
View File
@@ -49,8 +49,8 @@ struct iscsi_key user_keys[] = {
static struct __qelem discovery_users_in = LIST_HEAD_INIT(discovery_users_in);
static struct __qelem discovery_users_out = LIST_HEAD_INIT(discovery_users_out);
struct iscsi_attr *iscsi_attr_lookup_by_sysfs_name(
const struct __qelem *attrs_list, const char *sysfs_name)
struct iscsi_attr *iscsi_attr_lookup_by_sysfs_name(const struct __qelem *attrs_list,
const char *sysfs_name)
{
struct iscsi_attr *attr;
@@ -62,8 +62,7 @@ struct iscsi_attr *iscsi_attr_lookup_by_sysfs_name(
return NULL;
}
struct iscsi_attr *iscsi_attr_lookup_by_key(
const struct __qelem *attrs_list, const char *key)
struct iscsi_attr *iscsi_attr_lookup_by_key(const struct __qelem *attrs_list, const char *key)
{
struct iscsi_attr *attr;
@@ -103,7 +102,7 @@ void iscsi_attrs_free(struct __qelem *attrs_list)
}
int iscsi_attr_create(int attr_size, struct __qelem *attrs_list,
const char *sysfs_name_tmpl, const char *key, const char *val,
const char *sysfs_name_tmpl, const char *key, const char *val,
u32 mode, struct iscsi_attr **res_attr)
{
int res = 0;
@@ -153,7 +152,7 @@ int iscsi_attr_create(int attr_size, struct __qelem *attrs_list,
if (num == 0)
num++;
snprintf(attr->sysfs_name, sizeof(attr->sysfs_name),
"%s%d", sysfs_name_tmpl, num);
"%s%d", sysfs_name_tmpl, num);
if (!iscsi_attr_lookup_by_sysfs_name(attrs_list, attr->sysfs_name))
break;
num++;
@@ -173,7 +172,7 @@ out_free:
}
int iscsi_attr_replace(const struct __qelem *attrs_list, const char *sysfs_name,
char *raw_value)
char *raw_value)
{
int res = 0;
struct iscsi_attr *attr, *a;
@@ -194,7 +193,7 @@ int iscsi_attr_replace(const struct __qelem *attrs_list, const char *sysfs_name,
if (a && a != attr) {
log_error("Attr %s (sysfs_name %s) already exists\n", key,
a->sysfs_name);
a->sysfs_name);
res = -EEXIST;
goto out;
}
@@ -295,7 +294,8 @@ static char *config_gets(char *buf, int size, const char *data, int *offset)
{
int offs = *offset, i = 0;
while ((i < size-1) && (data[offs] != '\n') && (data[offs] != ';') && (data[offs] != '\0'))
while ((i < size - 1) && (data[offs] != '\n') &&
(data[offs] != ';') && (data[offs] != '\0'))
buf[i++] = data[offs++];
if (i == 0 && (data[offs] == '\0'))
@@ -329,7 +329,7 @@ int accounts_empty(u32 tid, int dir)
}
static struct iscsi_attr *__account_lookup_by_name(struct target *target,
int dir, const char *name)
int dir, const char *name)
{
const struct __qelem *list;
@@ -377,7 +377,7 @@ struct iscsi_attr *account_get_first(u32 tid, int dir)
}
struct iscsi_attr *account_lookup_by_sysfs_name(struct target *target,
int dir, const char *sysfs_name)
int dir, const char *sysfs_name)
{
const struct __qelem *list;
@@ -400,7 +400,7 @@ int config_account_query(u32 tid, int dir, const char *name, char *pass)
}
int config_account_list(u32 tid, int dir, u32 *cnt, u32 *overflow,
char *buf, size_t buf_sz)
char *buf, size_t buf_sz)
{
struct target *target;
const struct __qelem *list;
@@ -476,7 +476,7 @@ int config_account_del(u32 tid, int dir, char *name, u32 cookie)
}
log_debug(1, "Deleting %s user %s (%p, target %s, sysfs name %s)",
(dir == ISCSI_USER_DIR_OUTGOING) ? "outgoing" : "incoming",
(dir == ISCSI_USER_DIR_OUTGOING) ? "outgoing" : "incoming",
ISCSI_USER_NAME(user), user, target ? target->name : "discovery",
user->sysfs_name);
@@ -491,14 +491,14 @@ out:
}
static int account_create(struct __qelem *list, const char *sysfs_name,
const char *name, const char *pass, struct iscsi_attr **res_user)
const char *name, const char *pass, struct iscsi_attr **res_user)
{
return iscsi_attr_create(sizeof(struct iscsi_attr), list, sysfs_name,
name, pass, 0600, res_user);
}
int account_replace(struct target *target, int direction,
const char *sysfs_name, char *value)
const char *sysfs_name, char *value)
{
const struct __qelem *list;
@@ -546,7 +546,7 @@ int __config_account_add(struct target *target, int dir, char *name, const char
list_for_each_entry(old, list, ulist) {
log_warning("Only one outgoing %s account is supported. Replacing the old one.\n",
target ? "target" : "discovery");
target ? "target" : "discovery");
account_destroy(old);
break;
}
@@ -697,7 +697,7 @@ static int __initiator_match(int fd, char *str)
int err = 0;
len = sizeof(from);
if (getpeername(fd, (struct sockaddr *) &from, &len) < 0)
if (getpeername(fd, (struct sockaddr *)&from, &len) < 0)
return 0;
while ((p = strsep(&str, ","))) {
@@ -864,7 +864,7 @@ out:
}
int config_params_set(u32 tid, u64 sid, int type, u32 partial,
struct iscsi_param *params)
struct iscsi_param *params)
{
int err, i;
struct target *target;
@@ -889,11 +889,13 @@ int config_params_set(u32 tid, u64 sid, int type, u32 partial,
if (type == key_session) {
for (i = 0; i < session_key_last; i++) {
uint32_t in_val = params[i].val;
if (partial & (1 << i)) {
err = params_check_val(session_keys, i, &params[i].val);
if (err < 0) {
log_error("%s: Wrong value %u->%u for session parameter %s\n",
__func__, in_val, params[i].val, session_keys[i].name);
__func__, in_val, params[i].val,
session_keys[i].name);
goto out;
}
}
@@ -905,11 +907,13 @@ int config_params_set(u32 tid, u64 sid, int type, u32 partial,
} else {
for (i = 0; i < target_key_last; i++) {
uint32_t in_val = params[i].val;
if (partial & (1 << i)) {
err = params_check_val(target_keys, i, &params[i].val);
if (err < 0) {
log_error("%s: Wrong value %u->%u for target parameter %s\n",
__func__, in_val, params[i].val, target_keys[i].name);
__func__, in_val, params[i].val,
target_keys[i].name);
goto out;
}
}
@@ -992,11 +996,12 @@ int config_parse_main(const char *data, u32 cookie)
res = params_str_to_val(target_keys, idx, str, &val);
if (res < 0) {
log_error("Wrong value %s for parameter %s\n",
str, target_keys[idx].name);
str, target_keys[idx].name);
continue;
}
uint32_t in_val = val;
res = params_check_val(target_keys, idx, &val);
if (res < 0) {
log_error("%s: Wrong value %u->%u for target parameter %s\n",
@@ -1017,11 +1022,12 @@ int config_parse_main(const char *data, u32 cookie)
res = params_str_to_val(session_keys, idx, str, &val);
if (res < 0) {
log_error("Wrong value %s for parameter %s\n",
str, session_keys[idx].name);
str, session_keys[idx].name);
continue;
}
uint32_t in_val = val;
res = params_check_val(session_keys, idx, &val);
if (res < 0) {
log_error("%s: Wrong value %u->%u for session parameter %s\n",
@@ -1045,7 +1051,7 @@ int config_parse_main(const char *data, u32 cookie)
}
res = __config_account_add(target, idx, name, pass, p,
!target, 0);
!target, 0);
if (res < 0)
continue;
} else if (global_section &&
@@ -1138,7 +1144,7 @@ int config_load(const char *config_name)
} else {
err = -errno;
log_error("Open config file %s failed: %s", cname,
strerror(errno));
strerror(errno));
goto out;
}
}
@@ -1150,7 +1156,7 @@ int config_load(const char *config_name)
goto out_close;
}
buf = malloc(size+1);
buf = malloc(size + 1);
if (!buf) {
err = -ENOMEM;
log_error("malloc() failed: %s", strerror(-err));
+2 -2
View File
@@ -66,10 +66,10 @@ void conn_pass_to_kern(struct connection *conn, int fd)
int err;
log_debug(1, "fd %d, cid %u, stat_sn %u, exp_stat_sn %u sid %" PRIx64,
fd, conn->cid, conn->stat_sn, conn->exp_stat_sn, conn->sid.id64);
fd, conn->cid, conn->stat_sn, conn->exp_stat_sn, conn->sid.id64);
err = kernel_conn_create(conn->tid, conn->sess->sid.id64, conn->cid,
conn->stat_sn, conn->exp_stat_sn, fd);
conn->stat_sn, conn->exp_stat_sn, fd);
if (err == 0)
conn->passed_to_kern = 1;
+12 -13
View File
@@ -50,7 +50,7 @@ int kernel_open(void)
goto out_close;
} else {
log_debug(0, "max_data_seg_len %d, max_queued_cmds %d",
reg.max_data_seg_len, reg.max_queued_cmds);
reg.max_data_seg_len, reg.max_queued_cmds);
iscsi_init_params.max_data_seg_len = reg.max_data_seg_len;
iscsi_init_params.max_queued_cmds = reg.max_queued_cmds;
}
@@ -163,13 +163,13 @@ int kernel_target_create(struct target *target, u32 *tid, u32 cookie)
}
log_debug(1, "Adding target %s (attrs_num %d)", target->name,
info.attrs_num);
info.attrs_num);
err = ioctl(ctrl_fd, ADD_TARGET, &info);
if (err < 0) {
err = -errno;
log_error("Can't create target %s: %s\n", target->name,
strerror(errno));
strerror(errno));
} else {
target->tid = err;
if (tid)
@@ -201,9 +201,8 @@ int kernel_target_destroy(u32 tid, u32 cookie)
return res;
}
int kernel_attr_add(const struct target *target, const char *name, u32 mode,
u32 cookie)
u32 cookie)
{
struct iscsi_kern_attr_info info;
int res;
@@ -252,7 +251,6 @@ int kernel_user_del(const struct target *target, const struct iscsi_attr *user,
return kernel_attr_del(target, user->sysfs_name, cookie);
}
int kernel_initiator_allowed(u32 tid, const char *full_initiator_name)
{
int err;
@@ -327,7 +325,7 @@ out:
}
int kernel_params_set(u32 tid, u64 sid, int type, u32 partial,
const struct iscsi_param *params)
const struct iscsi_param *params)
{
int i, err;
struct iscsi_kern_params_info info;
@@ -383,9 +381,8 @@ int kernel_session_create(struct connection *conn)
info.exp_cmd_sn = conn->exp_cmd_sn;
iscsi_strscpy(info.initiator_name, conn->sess->initiator, sizeof(info.initiator_name));
iscsi_make_full_initiator_name(target->per_portal_acl,
conn->sess->initiator, conn->target_portal,
conn->sess->initiator, conn->target_portal,
info.full_initiator_name, sizeof(info.full_initiator_name));
for (i = 0; i < session_key_last; i++)
@@ -397,7 +394,9 @@ int kernel_session_create(struct connection *conn)
res = ioctl(ctrl_fd, ADD_SESSION, &info);
if (res < 0) {
res = -errno;
log_error("Can't create sess 0x%" PRIx64 " (tid %d, initiator %s): %s\n", conn->sess->sid.id64, conn->tid,
log_error("Can't create sess 0x%" PRIx64 " (tid %d, initiator %s): %s\n",
conn->sess->sid.id64,
conn->tid,
conn->sess->initiator, strerror(errno));
}
@@ -419,14 +418,14 @@ int kernel_session_destroy(u32 tid, u64 sid)
if (res < 0) {
res = -errno;
log_debug(2, "Can't destroy sess 0x%" PRIx64 " (tid %d): %s\n",
sid, tid, strerror(errno));
sid, tid, strerror(errno));
}
return res;
}
int kernel_conn_create(u32 tid, u64 sid, u32 cid, u32 stat_sn, u32 exp_stat_sn,
int fd)
int fd)
{
struct iscsi_kern_conn_info info;
int res;
@@ -444,7 +443,7 @@ int kernel_conn_create(u32 tid, u64 sid, u32 cid, u32 stat_sn, u32 exp_stat_sn,
if (res < 0) {
res = -errno;
log_error("Can't create conn %x (sess 0x%" PRIx64 ", tid %d): %s\n",
cid, sid, tid, strerror(errno));
cid, sid, tid, strerror(errno));
}
return res;
+43 -42
View File
@@ -36,7 +36,7 @@
#define ISCSI_ISNS_SYSFS_ACCESS_CONTROL_ENABLED "AccessControl"
#define STATIC_ASSERT(e) ((void)sizeof(int[1-2*!(e)]))
#define STATIC_ASSERT(e) ((void)sizeof(int[1 - 2 * !(e)]))
static struct sockaddr_nl src_addr, dest_addr;
@@ -97,7 +97,6 @@ static int nl_read(int fd, void *data, int len, bool wait)
return res;
}
static int strncasecmp_numwild(const char *name, const char *mask)
{
int err = -EINVAL;
@@ -119,7 +118,7 @@ out:
}
static int send_mgmt_cmd_res(u32 tid, u32 cookie, u32 req_cmd, int result,
const char *res_str)
const char *res_str)
{
struct iscsi_kern_mgmt_cmd_res_info cinfo;
int res;
@@ -177,7 +176,7 @@ static int handle_e_add_target(int fd, const struct iscsi_kern_event *event)
if (errno == EINTR || errno == EAGAIN)
continue;
log_error("read netlink fd (%d) failed: %s", fd,
strerror(errno));
strerror(errno));
send_mgmt_cmd_res(0, event->cookie, E_ADD_TARGET, -errno, NULL);
exit(1);
}
@@ -194,7 +193,7 @@ static int handle_e_add_target(int fd, const struct iscsi_kern_event *event)
if (errno == EINTR || errno == EAGAIN)
continue;
log_error("read netlink fd (%d) failed: %s", fd,
strerror(errno));
strerror(errno));
send_mgmt_cmd_res(0, event->cookie, E_ADD_TARGET, -errno, NULL);
exit(1);
}
@@ -244,7 +243,8 @@ static int handle_add_user(struct target *target, int dir,
}
static int __handle_add_attr(const struct target *target, struct __qelem *attrs_list,
const char *sysfs_name_tmpl, char *p, int single_param_only, u32 cookie)
const char *sysfs_name_tmpl, char *p, int single_param_only,
u32 cookie)
{
int res;
const char *name = p;
@@ -279,7 +279,7 @@ static int __handle_add_attr(const struct target *target, struct __qelem *attrs_
}
res = iscsi_attr_create(sizeof(*attr), attrs_list, sysfs_name_tmpl, key,
val, 0644, &attr);
val, 0644, &attr);
if (res != 0) {
log_error("Unknown portal %s", key);
goto out;
@@ -309,7 +309,7 @@ static int handle_add_attr(struct target *target, char *p, u32 cookie)
res = handle_add_user(target, dir, pp, p, cookie);
} else if (strncasecmp_numwild(ISCSI_ALLOWED_PORTAL_ATTR_NAME, pp) == 0) {
res = __handle_add_attr(target, &target->allowed_portals,
ISCSI_ALLOWED_PORTAL_ATTR_NAME, p, 1, cookie);
ISCSI_ALLOWED_PORTAL_ATTR_NAME, p, 1, cookie);
} else {
log_error("Syntax error at %s", pp);
res = -EINVAL;
@@ -328,13 +328,13 @@ static int handle_del_user(const struct target *target, int dir, char *p, u32 co
name = config_sep_string(&p);
res = config_account_del((target) ? target->tid : 0, dir,
name, cookie);
name, cookie);
return res;
}
static int __handle_del_attr(const struct target *target, struct __qelem *attrs_list,
char *p, u32 cookie)
char *p, u32 cookie)
{
int res;
const char *key;
@@ -377,7 +377,7 @@ static int handle_del_attr(struct target *target, char *p, u32 cookie)
res = handle_del_user(target, dir, p, cookie);
} else if (strncasecmp_numwild(ISCSI_ALLOWED_PORTAL_ATTR_NAME, pp) == 0) {
res = __handle_del_attr(target, &target->allowed_portals,
p, cookie);
p, cookie);
} else {
log_error("Syntax error at %s", pp);
res = -EINVAL;
@@ -417,7 +417,7 @@ static int handle_e_mgmt_cmd(int fd, const struct iscsi_kern_event *event)
if (errno == EINTR || errno == EAGAIN)
continue;
log_error("read netlink fd (%d) failed: %s", fd,
strerror(errno));
strerror(errno));
send_mgmt_cmd_res(0, event->cookie, E_MGMT_CMD, -errno, NULL);
exit(1);
}
@@ -473,7 +473,7 @@ static void add_key_mark(char *res_str, int res_str_len, int new_line)
int offs = strlen(res_str);
snprintf(&res_str[offs], res_str_len - offs, "%s%s\n",
new_line ? "\n" : "", SCST_SYSFS_KEY_MARK);
new_line ? "\n" : "", SCST_SYSFS_KEY_MARK);
}
static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
@@ -509,7 +509,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
if (errno == EINTR || errno == EAGAIN)
continue;
log_error("read netlink fd (%d) failed: %s", fd,
strerror(errno));
strerror(errno));
send_mgmt_cmd_res(0, event->cookie, E_GET_ATTR_VALUE, -errno, NULL);
exit(1);
}
@@ -533,7 +533,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
}
params_val_to_str(target_keys, idx, target->target_params[idx],
res_str, sizeof(res_str));
res_str, sizeof(res_str));
if (target->target_params[idx] != target_keys[idx].local_def)
add_key_mark(res_str, sizeof(res_str), 1);
@@ -545,7 +545,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
}
params_val_to_str(session_keys, idx, target->session_params[idx],
res_str, sizeof(res_str));
res_str, sizeof(res_str));
if (target->session_params[idx] != session_keys[idx].local_def)
add_key_mark(res_str, sizeof(res_str), 1);
@@ -560,7 +560,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
}
snprintf(res_str, sizeof(res_str), "%s %s\n", ISCSI_USER_NAME(user),
ISCSI_USER_PASS(user));
ISCSI_USER_PASS(user));
add_key_mark(res_str, sizeof(res_str), 0);
} else if (strncasecmp_numwild(ISCSI_ALLOWED_PORTAL_ATTR_NAME, pp) == 0) {
const struct iscsi_attr *portal;
@@ -583,7 +583,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_ENABLED_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -609,10 +609,10 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
ISCSI_TARGET_REDIRECTION_VALUE_PERM;
if (target->redirect.port != ISCSI_LISTEN_PORT)
snprintf(res_str, sizeof(res_str), "%s:%d %s\n",
target->redirect.addr, target->redirect.port, type);
target->redirect.addr, target->redirect.port, type);
else
snprintf(res_str, sizeof(res_str), "%s %s\n",
target->redirect.addr, type);
target->redirect.addr, type);
add_key_mark(res_str, sizeof(res_str), 0);
} else {
*res_str = '\0';
@@ -632,14 +632,15 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_ISNS_SERVER_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
if (isns_server) {
snprintf(res_str, sizeof(res_str), "%s %s\n", isns_server,
isns_access_control ? ISCSI_ISNS_SYSFS_ACCESS_CONTROL_ENABLED : "");
isns_access_control ?
ISCSI_ISNS_SYSFS_ACCESS_CONTROL_ENABLED : "");
add_key_mark(res_str, sizeof(res_str), 0);
} else {
snprintf(res_str, sizeof(res_str), "\n");
@@ -647,7 +648,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_ISNS_ENTITY_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -655,7 +656,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_LINK_LOCAL_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -665,7 +666,7 @@ static int handle_e_get_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_INTERNAL_PORTAL_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -739,7 +740,7 @@ static int handle_target_redirect(struct target *target, char *p)
if (port) {
*port = '\0';
port++;
port_num = strtol(port, (char **) NULL, 10);
port_num = strtol(port, (char **)NULL, 10);
if (port_num <= 0 || errno == EINVAL) {
log_error("Invalid port %s", port);
res = -EINVAL;
@@ -750,7 +751,7 @@ static int handle_target_redirect(struct target *target, char *p)
addr_len = strlen(addr);
if (addr_len >= sizeof(target->redirect.addr)) {
log_error("Too long addr %s, max allowed %zd", addr,
sizeof(target->redirect.addr)-1);
sizeof(target->redirect.addr) - 1);
res = -ERANGE;
goto out;
}
@@ -759,7 +760,7 @@ static int handle_target_redirect(struct target *target, char *p)
char tmp[sizeof(target->redirect.addr)];
if (*addr == '[')
t = addr+1;
t = addr + 1;
else
t = addr;
iscsi_strscpy(tmp, t, strchrnul(t, ']') - t + 1);
@@ -783,7 +784,7 @@ static int handle_target_redirect(struct target *target, char *p)
}
log_info("Target %s %s redirected to %s:%d", target->name,
(type_num == ISCSI_STATUS_TGT_MOVED_TEMP) ? "temporarily" : "permanently",
(type_num == ISCSI_STATUS_TGT_MOVED_TEMP) ? "temporarily" : "permanently",
addr, port_num);
memcpy(target->redirect.addr, addr, addr_len + 1);
@@ -831,7 +832,7 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
if (errno == EINTR || errno == EAGAIN)
continue;
log_error("read netlink fd (%d) failed: %s", fd,
strerror(errno));
strerror(errno));
send_mgmt_cmd_res(0, event->cookie, E_SET_ATTR_VALUE, -errno, NULL);
exit(1);
}
@@ -847,7 +848,7 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
if (errno == EINTR || errno == EAGAIN)
continue;
log_error("read netlink fd (%d) failed: %s", fd,
strerror(errno));
strerror(errno));
send_mgmt_cmd_res(0, event->cookie, E_SET_ATTR_VALUE, -errno, NULL);
exit(1);
}
@@ -886,14 +887,14 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
res = params_str_to_val(target_keys, idx, pp, &val);
if (res < 0) {
log_error("Wrong value %s for parameter %s\n",
pp, target_keys[idx].name);
pp, target_keys[idx].name);
goto out_free;
}
res = params_check_val(target_keys, idx, &val);
if (res < 0) {
log_error("Wrong value %u for parameter %s\n",
val, target_keys[idx].name);
val, target_keys[idx].name);
goto out_free;
}
@@ -903,7 +904,7 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
params[idx].val = val;
list_for_each_entry(session, &target->sessions_list, slist) {
kernel_params_set(event->tid, session->sid.id64,
key_target, 1 << idx, params);
key_target, 1 << idx, params);
}
} else if ((idx = params_index_by_name(pp, session_keys)) >= 0) {
if (!target) {
@@ -924,14 +925,14 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
res = params_str_to_val(session_keys, idx, pp, &val);
if (res < 0) {
log_error("Wrong value %s for parameter %s\n",
pp, session_keys[idx].name);
pp, session_keys[idx].name);
goto out_free;
}
res = params_check_val(session_keys, idx, &val);
if (res < 0) {
log_error("Wrong value %u for parameter %s\n",
val, session_keys[idx].name);
val, session_keys[idx].name);
goto out_free;
}
@@ -971,7 +972,7 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_ENABLED_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -1055,7 +1056,7 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_ISNS_SERVER_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -1114,7 +1115,7 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_LINK_LOCAL_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -1131,7 +1132,7 @@ static int handle_e_set_attr_value(int fd, const struct iscsi_kern_event *event)
} else if (strcasecmp(ISCSI_INTERNAL_PORTAL_ATTR_NAME, pp) == 0) {
if (target) {
log_error("Not NULL target %s for global attribute %s",
target->name, pp);
target->name, pp);
res = -EINVAL;
goto out_free;
}
@@ -1197,7 +1198,6 @@ out_free_server:
goto out;
}
/* Return zero after handling an event, or -EAGAIN when no event is available. */
int handle_iscsi_events(int fd, bool wait)
{
@@ -1315,7 +1315,8 @@ retry:
conn = conn_find(session, event.cid);
if (!conn) {
log_error("Connection %x for session %#" PRIx64 " not found", event.cid, event.sid);
log_error("Connection %x for session %#" PRIx64 " not found", event.cid,
event.sid);
goto retry;
}
+5 -5
View File
@@ -154,7 +154,7 @@ static int iscsid_request_send(int fd, const struct iscsi_adm_req *req)
}
static int iscsid_response_recv(int fd, struct iscsi_adm_req *req, void *rsp_data,
int rsp_data_sz)
int rsp_data_sz)
{
int err, ret;
struct iovec iov[2];
@@ -182,7 +182,7 @@ static int iscsid_response_recv(int fd, struct iscsi_adm_req *req, void *rsp_dat
if (ret != rsp_data_sz) {
err = (ret < 0) ? -errno : -EIO;
fprintf(stderr, "read failed: read %d instead of %d (%s)\n",
ret, (int)rsp_data_sz, strerror(-err));
ret, (int)rsp_data_sz, strerror(-err));
}
}
@@ -203,9 +203,9 @@ static int iscsid_connect(void)
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_LOCAL;
memcpy((char *) &addr.sun_path + 1, ISCSI_ADM_NAMESPACE, strlen(ISCSI_ADM_NAMESPACE));
memcpy((char *)&addr.sun_path + 1, ISCSI_ADM_NAMESPACE, strlen(ISCSI_ADM_NAMESPACE));
if (connect(fd, (struct sockaddr *) &addr, sizeof(addr))) {
if (connect(fd, (struct sockaddr *)&addr, sizeof(addr))) {
close(fd);
fd = -errno;
fprintf(stderr, "Unable to connect to iscsid: %s\n",
@@ -218,7 +218,7 @@ out:
}
static int iscsid_request(struct iscsi_adm_req *req, void *rsp_data,
int rsp_data_sz)
int rsp_data_sz)
{
int fd, err;
+35 -32
View File
@@ -119,7 +119,8 @@ static void create_listen_socket(struct pollfd *array)
break;
if (i == LISTEN_MAX) {
log_error("Cannot handle address %s! Too many were specified.", server_address);
log_error("Cannot handle address %s! Too many were specified.",
server_address);
exit(1);
}
@@ -149,7 +150,7 @@ static void create_listen_socket(struct pollfd *array)
strerror(errno));
opt = 1;
if (res->ai_family == AF_INET6 &&
setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt))) {
setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &opt, sizeof(opt))) {
log_error("Unable to restrict IPv6 socket (%s)", strerror(errno));
close(sock);
continue;
@@ -162,7 +163,8 @@ static void create_listen_socket(struct pollfd *array)
}
if (listen(sock, INCOMING_MAX)) {
log_error("Unable to listen to server socket (%s)!", strerror(errno));
log_error("Unable to listen to server socket (%s)!",
strerror(errno));
close(sock);
continue;
}
@@ -280,14 +282,15 @@ static void create_iser_listen_socket(struct pollfd *array)
break;
if (i == ISERT_MAX_PORTALS) {
log_error("iSER: Cannot handle address %s! Too many were specified.", server_address);
log_error("iSER: Cannot handle address %s! Too many were specified.",
server_address);
exit(1);
}
rc = getaddrinfo(server_address, servname, &hints, &res0);
if (rc != 0) {
log_error("iSER: Unable to get address info[%s] (%s)!",
server_address, get_error_str(rc));
server_address, get_error_str(rc));
exit(1);
}
@@ -298,7 +301,7 @@ static void create_iser_listen_socket(struct pollfd *array)
rc = ioctl(iser_fd, SET_LISTEN_ADDR, &info);
if (rc != 0) {
log_error("iSER: Unable to set listen address (%s)!",
strerror(errno));
strerror(errno));
}
++i;
}
@@ -347,7 +350,7 @@ static void iser_accept(int fd)
conn_fd = open(buff, O_RDWR);
if (conn_fd == -1) {
log_error("open(iser_connection) %s failed: %s\n",
buff, strerror(errno));
buff, strerror(errno));
goto out;
}
@@ -359,12 +362,12 @@ static void iser_accept(int fd)
}
ret = getnameinfo((struct sockaddr *)&addr, sizeof(addr), target_portal,
sizeof(target_portal), target_portal_port,
sizeof(target_portal), target_portal_port,
sizeof(target_portal_port),
NI_NUMERICHOST | NI_NUMERICSERV);
if (ret != 0) {
log_error("Target portal getnameinfo() failed: %s!",
get_error_str(ret));
get_error_str(ret));
goto out_close;
}
@@ -455,7 +458,7 @@ static void accept_connection(int listen)
break;
default:
log_error("accept(incoming_socket) failed: %s",
strerror(errno));
strerror(errno));
exit(1);
}
goto out;
@@ -469,25 +472,25 @@ static void accept_connection(int listen)
}
rc = getnameinfo(&to.sa, sizeof(to), target_portal, sizeof(target_portal),
target_portal_port, sizeof(target_portal_port),
target_portal_port, sizeof(target_portal_port),
NI_NUMERICHOST | NI_NUMERICSERV);
if (rc != 0) {
log_error("Target portal getnameinfo() failed: %s!",
get_error_str(rc));
get_error_str(rc));
goto out_close;
}
rc = getnameinfo(&from.sa, sizeof(from), initiator_addr,
sizeof(initiator_addr), initiator_port,
sizeof(initiator_addr), initiator_port,
sizeof(initiator_port), NI_NUMERICHOST | NI_NUMERICSERV);
if (rc != 0) {
log_error("Initiator getnameinfo() failed: %s!",
get_error_str(rc));
get_error_str(rc));
goto out_close;
}
log_info("Connect from %s:%s to %s:%s", initiator_addr, initiator_port,
target_portal, target_portal_port);
target_portal, target_portal_port);
if (conn_blocked) {
log_warning("Connection refused due to blocking\n");
@@ -544,12 +547,12 @@ again:
switch (conn->iostate) {
case IOSTATE_READ_BHS:
case IOSTATE_READ_AHS_DATA:
read_again:
read_again:
errno = 0; /* for the log_debug() */
res = read(pollfd->fd, conn->buffer, conn->rwsize);
if (res <= 0) {
log_debug(1, "read(%u, %p, %u) returned %d, errno=%u",
pollfd->fd, conn->buffer, conn->rwsize, res, errno);
pollfd->fd, conn->buffer, conn->rwsize, res, errno);
if (res == 0 || (errno != EINTR && errno != EAGAIN)) {
conn->state = STATE_DROP;
goto out;
@@ -573,7 +576,7 @@ again:
conn->rwsize = (conn->req.ahssize + conn->req.datasize + 3) & -4;
if (conn->rwsize > INCOMING_BUFSIZE) {
log_warning("Recv PDU with invalid size %d (max: %d)", conn->rwsize,
INCOMING_BUFSIZE);
INCOMING_BUFSIZE);
conn->state = STATE_DROP;
goto out;
}
@@ -612,12 +615,12 @@ again:
case IOSTATE_WRITE_BHS:
case IOSTATE_WRITE_AHS:
case IOSTATE_WRITE_DATA:
write_again:
write_again:
conn->cork_transmit(pollfd->fd);
res = write(pollfd->fd, conn->buffer, conn->rwsize);
if (res < 0) {
log_debug(1, "write(%u, %p, %u) returned %d, errno=%u",
pollfd->fd, conn->buffer, conn->rwsize, res, errno);
pollfd->fd, conn->buffer, conn->rwsize, res, errno);
if (errno != EINTR && errno != EAGAIN) {
conn->state = STATE_DROP;
goto out;
@@ -651,7 +654,7 @@ again:
o = conn->rwsize & 3;
if (o) {
for (o = 4 - o; o; o--)
*((u8 *) conn->buffer + conn->rwsize++) =
*((u8 *)conn->buffer + conn->rwsize++) =
0;
}
goto write_again;
@@ -684,7 +687,7 @@ again:
break;
default:
log_error("illegal iostate %d for port %d!\n", conn->iostate,
pollfd->fd);
pollfd->fd);
exit(1);
}
out:
@@ -734,13 +737,13 @@ static void event_loop(void)
__func__);
else
log_error("%s: poll() failed: %s", __func__,
strerror(errno));
strerror(errno));
exit(1);
}
for (i = 0; i < LISTEN_MAX; i++) {
if (poll_array[POLL_LISTEN + i].revents
&& incoming_cnt < INCOMING_MAX)
if (poll_array[POLL_LISTEN + i].revents &&
incoming_cnt < INCOMING_MAX)
accept_connection(poll_array[POLL_LISTEN + i].fd);
}
@@ -827,9 +830,9 @@ static void init_max_params(void)
target_keys[key_queued_cmnds].local_def = min((int)target_keys[key_queued_cmnds].local_def,
iscsi_init_params.max_queued_cmds);
target_keys[key_queued_cmnds].max = min_t(int, target_keys[key_queued_cmnds].max,
iscsi_init_params.max_queued_cmds);
iscsi_init_params.max_queued_cmds);
target_keys[key_queued_cmnds].min = min_t(int, target_keys[key_queued_cmnds].min,
iscsi_init_params.max_queued_cmds);
iscsi_init_params.max_queued_cmds);
/* MaxRecvDataSegmentLength */
session_keys[key_max_recv_data_length].local_def = iscsi_init_params.max_data_seg_len;
@@ -870,7 +873,6 @@ int main(int argc, char **argv)
gid_t gid = 0;
int err;
if (pipe(init_report_pipe) == -1) {
perror("pipe failed");
exit(-1);
@@ -885,6 +887,7 @@ int main(int argc, char **argv)
*/
struct sigaction act = (struct sigaction) { .sa_handler = SIG_IGN };
int rc = sigaction(SIGPIPE, &act, NULL);
assert(rc == 0);
act = (struct sigaction) { .sa_handler = suspend_logins };
@@ -963,16 +966,16 @@ int main(int argc, char **argv)
}
err = kernel_attr_add(NULL, ISCSI_ISNS_SERVER_ATTR_NAME,
0644, 0);
0644, 0);
if (err != 0)
exit(err);
err = kernel_attr_add(NULL, ISCSI_ENABLED_ATTR_NAME,
0644, 0);
0644, 0);
if (err != 0)
exit(err);
err = kernel_attr_add(NULL, ISCSI_ISNS_ENTITY_ATTR_NAME,
0644, 0);
0644, 0);
if (err != 0)
exit(err);
err = kernel_attr_add(NULL, ISCSI_LINK_LOCAL_ATTR_NAME, 0644, 0);
@@ -994,7 +997,7 @@ int main(int argc, char **argv)
pid_t pid;
int fd;
fd = open("/run/iscsi-scstd.pid", O_WRONLY|O_CREAT, 0644);
fd = open("/run/iscsi-scstd.pid", O_WRONLY | O_CREAT, 0644);
if (fd < 0) {
log_error("unable to create pid file");
exit(1);
+20 -17
View File
@@ -75,8 +75,8 @@ char *text_key_find(struct connection *conn, const char *search_key)
data++;
datasize--;
if (keylen == value - key - 1
&& !strncasecmp(key, search_key, keylen))
if (keylen == value - key - 1 &&
!strncasecmp(key, search_key, keylen))
return value;
}
}
@@ -110,7 +110,7 @@ static char *next_key(char **data, int *datasize, char **value)
}
static struct buf_segment *conn_alloc_buf_segment(struct connection *conn,
size_t sz)
size_t sz)
{
struct buf_segment *seg = malloc(sizeof(*seg) + sz);
@@ -287,12 +287,15 @@ static int login_check_reinstatement(struct connection *conn)
if (session) {
if (req->sid.id.tsih == 0) {
/* Kernel will do session reinstatement */
log_debug(1, "Session sid %#" PRIx64 " reinstatement detected (tid %d, initiator %s)", req->sid.id64,
log_debug(1, "Session sid %#" PRIx64 " reinstatement detected (tid %d, initiator %s)",
req->sid.id64,
conn->tid, conn->initiator);
res = ISCSI_SESS_REINSTATEMENT;
} else if (req->sid.id.tsih != session->sid.id.tsih) {
log_error("TSIH for existing session sid %#" PRIx64
") doesn't match (tid %d, initiator %s, sid requested %#" PRIx64, session->sid.id64, conn->tid,
") doesn't match (tid %d, initiator %s, sid requested %#" PRIx64,
session->sid.id64,
conn->tid,
conn->initiator, req->sid.id64);
/* Fail the login */
login_rsp_ini_err(conn, ISCSI_STATUS_SESSION_NOT_FOUND);
@@ -321,14 +324,15 @@ static int login_check_reinstatement(struct connection *conn)
} else {
if (req->sid.id.tsih != 0) {
log_error("Requested TSIH not 0 (TSIH %d, tid %d, initiator %s, sid requisted %#" PRIx64 ")",
req->sid.id.tsih, conn->tid, conn->initiator,
req->sid.id64);
req->sid.id.tsih, conn->tid, conn->initiator,
req->sid.id64);
/* Fail the login */
login_rsp_ini_err(conn, ISCSI_STATUS_SESSION_NOT_FOUND);
res = -1;
goto out;
} else {
log_debug(1, "New session sid %#" PRIx64 "(tid %d, initiator %s)", req->sid.id64,
log_debug(1, "New session sid %#" PRIx64 "(tid %d, initiator %s)",
req->sid.id64,
conn->tid, conn->initiator);
}
}
@@ -411,7 +415,7 @@ static void text_scan_login(struct connection *conn)
if (val != conn->session_params[idx].val) {
login_rsp_ini_err(conn, ISCSI_STATUS_INIT_ERR);
log_warning("%s %u %u\n", key,
val, conn->session_params[idx].val);
val, conn->session_params[idx].val);
goto out;
}
conn->session_params[idx].key_state = KEY_STATE_DONE;
@@ -445,7 +449,7 @@ static int text_check_params(struct connection *conn)
continue;
} else if (p[i].key_state == KEY_STATE_DONE_ADDED) {
log_debug(1, "Key %s was already added, val %d",
session_keys[i].name, p[i].val);
session_keys[i].name, p[i].val);
continue;
}
switch (conn->state) {
@@ -500,7 +504,6 @@ out:
static bool valid_ascii_name_char(char ch)
{
/*
* From rtf3722
*
@@ -859,7 +862,7 @@ static void login_start(struct connection *conn)
/* We may "leak" here if we have an iSCSI event on the wrong time */
if (!iscsi_enabled) {
log_info("Connect from %s to disabled iSCSI-SCST refused",
name);
name);
login_rsp_tgt_err(conn, 0);
conn->state = STATE_DROP;
return;
@@ -867,7 +870,7 @@ static void login_start(struct connection *conn)
if (!target->tgt_enabled) {
log_info("Connect from %s to disabled target %s refused",
name, target_name);
name, target_name);
login_rsp_tgt_err(conn, 0);
conn->state = STATE_DROP;
return;
@@ -890,7 +893,7 @@ static void login_start(struct connection *conn)
(struct iscsi_login_rsp_hdr *)&conn->rsp.bhs;
log_debug(1, "Redirecting target %s login to %s:%d",
target->name, target->redirect.addr,
target->name, target->redirect.addr,
target->redirect.port);
rsp->status_class = ISCSI_STATUS_REDIRECT;
@@ -931,7 +934,7 @@ static void login_start(struct connection *conn)
if (target->alias)
text_key_add(conn, "TargetAlias", target->alias);
log_debug(1, "target %s, sessions_count %d", target_name,
target->sessions_count);
target->sessions_count);
}
conn->exp_cmd_sn = be32_to_cpu(req->cmd_sn);
@@ -1117,7 +1120,7 @@ static void cmnd_exec_login(struct connection *conn)
if (rsp->status_class)
return;
if (!accounts_empty(conn->tid, ISCSI_USER_DIR_INCOMING) &&
!on_internal_portal(conn))
!on_internal_portal(conn))
goto auth_err;
if (rsp->status_class)
return;
@@ -1349,7 +1352,7 @@ int cmnd_execute(struct connection *conn)
break;
}
cmnd_exec_login(conn);
login_rsp = (struct iscsi_login_rsp_hdr *) &conn->rsp.bhs;
login_rsp = (struct iscsi_login_rsp_hdr *)&conn->rsp.bhs;
if (login_rsp->status_class && login_rsp->status_class != ISCSI_STATUS_REDIRECT)
conn_free_rsp_buf_list(conn);
break;
+3 -4
View File
@@ -379,10 +379,9 @@ struct iscsi_attr *account_lookup_by_sysfs_name(struct target *target,
int account_replace(struct target *target, int direction,
const char *sysfs_name, char *value);
void accounts_free(struct __qelem *accounts_list);
struct iscsi_attr *iscsi_attr_lookup_by_sysfs_name(
const struct __qelem *attrs_list, const char *sysfs_name);
struct iscsi_attr *iscsi_attr_lookup_by_key(
const struct __qelem *attrs_list, const char *key);
struct iscsi_attr *iscsi_attr_lookup_by_sysfs_name(const struct __qelem *attrs_list,
const char *sysfs_name);
struct iscsi_attr *iscsi_attr_lookup_by_key(const struct __qelem *attrs_list, const char *key);
void iscsi_attrs_free(struct __qelem *attrs_list);
int iscsi_attr_create(int attr_size, struct __qelem *attrs_list,
const char *sysfs_name_tmpl, const char *key, const char *val,
+29 -29
View File
@@ -187,7 +187,7 @@ static void isns_hdr_init(struct isns_hdr *hdr, uint16_t function,
}
static int isns_tlv_set(struct isns_tlv **tlv, int max_tlv_buflen,
uint32_t tag, uint32_t length, const void *value)
uint32_t tag, uint32_t length, const void *value)
{
int l = length;
int res;
@@ -197,7 +197,7 @@ static int isns_tlv_set(struct isns_tlv **tlv, int max_tlv_buflen,
if (sizeof(struct isns_tlv) + l > max_tlv_buflen) {
log_error("Too big tlv len %d (max allowed %d)", l,
max_tlv_buflen);
max_tlv_buflen);
res = -EOVERFLOW;
goto out;
}
@@ -237,13 +237,13 @@ static int isns_scn_deregister(const char *name)
max_buf = sizeof(buf) - offsetof(struct isns_hdr, pdu);
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(name) + 1, name);
strlen(name) + 1, name);
if (err < 0)
goto out;
length += err;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(name) + 1, name);
strlen(name) + 1, name);
if (err < 0)
goto out;
length += err;
@@ -299,10 +299,10 @@ static int isns_scn_register(void)
if (strlen(isns_entity_target_name) < 1) {
target = list_entry(targets_list.q_forw, struct target, tlist);
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(target->name) + 1, target->name);
strlen(target->name) + 1, target->name);
} else {
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(isns_entity_target_name) + 1, isns_entity_target_name);
strlen(isns_entity_target_name) + 1, isns_entity_target_name);
}
if (err < 0)
@@ -320,7 +320,7 @@ static int isns_scn_register(void)
scn_flags = htonl(scn_flags);
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_SCN_BITMAP,
sizeof(scn_flags), &scn_flags);
sizeof(scn_flags), &scn_flags);
if (err < 0)
goto out;
length += err;
@@ -375,13 +375,13 @@ static int isns_attr_query(const char *name)
}
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(name) + 1, name);
strlen(name) + 1, name);
if (err < 0)
goto out;
length += err;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NODE_TYPE,
sizeof(node), &node);
sizeof(node), &node);
if (err < 0)
goto out;
length += err;
@@ -445,7 +445,7 @@ static int isns_deregister(void)
target = list_entry(targets_list.q_forw, struct target, tlist);
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(target->name) + 1, target->name);
strlen(target->name) + 1, target->name);
if (err < 0)
goto out;
length += err;
@@ -456,7 +456,7 @@ static int isns_deregister(void)
length += err;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ENTITY_IDENTIFIER,
strlen(eid) + 1, eid);
strlen(eid) + 1, eid);
if (err < 0)
goto out;
length += err;
@@ -503,17 +503,17 @@ int isns_target_register(const char *name)
if (strlen(isns_entity_target_name) < 1) {
target = list_entry(targets_list.q_forw, struct target, tlist);
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(target->name) + 1, target->name);
strlen(target->name) + 1, target->name);
} else {
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(isns_entity_target_name) + 1, isns_entity_target_name);
strlen(isns_entity_target_name) + 1, isns_entity_target_name);
}
if (err < 0)
goto out;
length += err;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ENTITY_IDENTIFIER,
strlen(eid) + 1, eid);
strlen(eid) + 1, eid);
if (err < 0)
goto out;
length += err;
@@ -524,26 +524,26 @@ int isns_target_register(const char *name)
length += err;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ENTITY_IDENTIFIER,
strlen(eid) + 1, eid);
strlen(eid) + 1, eid);
if (err < 0)
goto out;
length += err;
if (initial) {
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ENTITY_PROTOCOL,
sizeof(type), &type);
sizeof(type), &type);
if (err < 0)
goto out;
length += err;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_PORTAL_IP_ADDRESS,
sizeof(ip), &ip);
sizeof(ip), &ip);
if (err < 0)
goto out;
length += err;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_PORTAL_PORT,
sizeof(port), &port);
sizeof(port), &port);
if (err < 0)
goto out;
length += err;
@@ -554,7 +554,7 @@ int isns_target_register(const char *name)
uint32_t sport = htonl(scn_listen_port);
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_SCN_PORT,
sizeof(sport), &sport);
sizeof(sport), &sport);
if (err < 0)
goto out;
length += err;
@@ -562,21 +562,21 @@ int isns_target_register(const char *name)
}
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(name) + 1, name);
strlen(name) + 1, name);
if (err < 0)
goto out;
length += err;
if (alias_target && alias_target->alias) {
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_ALIAS,
strlen(alias_target->alias) + 1, alias_target->alias);
strlen(alias_target->alias) + 1, alias_target->alias);
if (err < 0)
goto out;
length += err;
}
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NODE_TYPE,
sizeof(node), &node);
sizeof(node), &node);
if (err < 0)
goto out;
length += err;
@@ -641,7 +641,7 @@ int isns_target_deregister(const char *name)
max_buf = sizeof(buf) - offsetof(struct isns_hdr, pdu);
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(name) + 1, name);
strlen(name) + 1, name);
if (err < 0)
goto out;
length += err;
@@ -653,13 +653,13 @@ int isns_target_deregister(const char *name)
if (last) {
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ENTITY_IDENTIFIER,
strlen(eid) + 1, eid);
strlen(eid) + 1, eid);
if (err < 0)
goto out;
length += err;
} else {
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(name) + 1, name);
strlen(name) + 1, name);
if (err < 0)
goto out;
length += err;
@@ -814,7 +814,7 @@ static char *print_scn_pdu(struct isns_hdr *hdr)
switch (ntohl(tlv->tag)) {
case ISNS_ATTR_ISCSI_NAME:
((char *)tlv->value)[vlen-1] = '\0';
((char *)tlv->value)[vlen - 1] = '\0';
log_debug(3, "scn name: %u, %s", vlen, (char *)tlv->value);
if (!name)
name = (char *)tlv->value;
@@ -907,7 +907,7 @@ found:
switch (ntohl(tlv->tag)) {
case ISNS_ATTR_ISCSI_NAME:
((char *)tlv->value)[vlen-1] = '\0';
((char *)tlv->value)[vlen - 1] = '\0';
name = (char *)tlv->value;
break;
case ISNS_ATTR_ISCSI_NODE_TYPE:
@@ -1045,7 +1045,7 @@ static int send_scn_rsp(const char *name, uint16_t transaction)
length += 4;
err = isns_tlv_set(&tlv, max_buf - length, ISNS_ATTR_ISCSI_NAME,
strlen(name) + 1, name);
strlen(name) + 1, name);
if (err < 0)
goto out;
length += err;
@@ -1177,7 +1177,7 @@ int isns_init(void)
err = getaddrinfo(isns_server, (char *)&port, &hints, &res);
if (err) {
log_error("getaddrinfo error: %s, %s", get_error_str(err),
isns_server);
isns_server);
goto out;
}
memcpy(&ss, res->ai_addr, sizeof(*res->ai_addr));
+2 -2
View File
@@ -36,7 +36,7 @@ static void dolog_nofunc(int prio, const char *fmt, va_list ap)
{
if (log_daemon) {
int len = strlen(fmt);
char f[len+1+1];
char f[len + 1 + 1];
if (fmt[len] != '\n')
sprintf(f, "%s\n", fmt);
@@ -63,7 +63,7 @@ static void dolog(int prio, const char *func, int line, const char *fmt, va_list
if (log_daemon) {
int len = strlen(func) + strlen(fmt);
char f[len+1+1];
char f[len + 1 + 1];
if (fmt[len] != '\n')
sprintf(f, "%s:%d: %s %s\n", func, line,
+1 -1
View File
@@ -28,7 +28,7 @@
(w) = ((w) << (s) | (w) >> (32 - (s))) + (x))
static void __md5_transform(u32 hash[MD5_DIGEST_WORDS],
const u32 in[MD5_BLOCK_WORDS])
const u32 in[MD5_BLOCK_WORDS])
{
register u32 a, b, c, d;
+15 -15
View File
@@ -37,10 +37,10 @@ int iscsi_adm_request_listen(void)
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_LOCAL;
memcpy((char *) &addr.sun_path + 1, ISCSI_ADM_NAMESPACE,
strlen(ISCSI_ADM_NAMESPACE));
memcpy((char *)&addr.sun_path + 1, ISCSI_ADM_NAMESPACE,
strlen(ISCSI_ADM_NAMESPACE));
err = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
err = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
if (err < 0) {
close(fd);
return err;
@@ -56,12 +56,12 @@ int iscsi_adm_request_listen(void)
}
static void iscsi_adm_request_exec(struct iscsi_adm_req *req, struct iscsi_adm_rsp *rsp,
void **rsp_data, size_t *rsp_data_sz)
void **rsp_data, size_t *rsp_data_sz)
{
int err = 0;
log_debug(1, "request %u, tid %u, sid 0x%" PRIx64 ", cid %u",
req->rcmnd, req->tid, req->sid, req->cid);
req->rcmnd, req->tid, req->sid, req->cid);
switch (req->rcmnd) {
case C_TRGT_NEW:
@@ -73,7 +73,7 @@ static void iscsi_adm_request_exec(struct iscsi_adm_req *req, struct iscsi_adm_r
case C_TRGT_UPDATE:
if (req->u.trgt.type & (1 << key_session))
err = config_params_set(req->tid, req->sid,
key_session,
key_session,
req->u.trgt.session_partial,
req->u.trgt.session_params);
@@ -82,12 +82,12 @@ static void iscsi_adm_request_exec(struct iscsi_adm_req *req, struct iscsi_adm_r
if (req->u.trgt.type & (1 << key_target))
err = config_params_set(req->tid, req->sid, key_target,
req->u.trgt.target_partial,
req->u.trgt.target_partial,
req->u.trgt.target_params);
break;
case C_TRGT_SHOW:
err = config_params_get(req->tid, req->sid, key_target,
req->u.trgt.target_params);
req->u.trgt.target_params);
break;
case C_SESS_NEW:
@@ -96,7 +96,7 @@ static void iscsi_adm_request_exec(struct iscsi_adm_req *req, struct iscsi_adm_r
break;
case C_SESS_SHOW:
err = config_params_get(req->tid, req->sid, key_session,
req->u.trgt.session_params);
req->u.trgt.session_params);
break;
case C_CONN_NEW:
@@ -112,12 +112,12 @@ static void iscsi_adm_request_exec(struct iscsi_adm_req *req, struct iscsi_adm_r
case C_ACCT_NEW:
err = config_account_add(req->tid, req->u.acnt.auth_dir,
req->u.acnt.u.user.name,
req->u.acnt.u.user.name,
req->u.acnt.u.user.pass, NULL, 0);
break;
case C_ACCT_DEL:
err = config_account_del(req->tid, req->u.acnt.auth_dir,
req->u.acnt.u.user.name, 0);
req->u.acnt.u.user.name, 0);
break;
case C_ACCT_LIST:
*rsp_data = malloc(req->u.acnt.u.list.alloc_len);
@@ -130,7 +130,7 @@ static void iscsi_adm_request_exec(struct iscsi_adm_req *req, struct iscsi_adm_r
memset(*rsp_data, 0x0, *rsp_data_sz);
err = config_account_list(req->tid, req->u.acnt.auth_dir,
&req->u.acnt.u.list.count,
&req->u.acnt.u.list.count,
&req->u.acnt.u.list.overflow,
*rsp_data, *rsp_data_sz);
break;
@@ -138,7 +138,7 @@ static void iscsi_adm_request_exec(struct iscsi_adm_req *req, struct iscsi_adm_r
break;
case C_ACCT_SHOW:
err = config_account_query(req->tid, req->u.acnt.auth_dir,
req->u.acnt.u.user.name,
req->u.acnt.u.user.name,
req->u.acnt.u.user.pass);
break;
default:
@@ -163,7 +163,7 @@ int iscsi_adm_request_handle(int accept_fd)
memset(&rsp, 0, sizeof(rsp));
len = sizeof(addr);
fd = accept(accept_fd, (struct sockaddr *) &addr, &len);
fd = accept(accept_fd, (struct sockaddr *)&addr, &len);
if (fd < 0) {
if (errno == EINTR)
err = -EINTR;
@@ -174,7 +174,7 @@ int iscsi_adm_request_handle(int accept_fd)
}
len = sizeof(cred);
err = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, (void *) &cred, &len);
err = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, (void *)&cred, &len);
if (err < 0) {
rsp.err = -EPERM;
goto send;
+8 -4
View File
@@ -114,18 +114,22 @@ void sock_set_keepalive(int sock, int timeout)
int opt = 2;
if (setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &opt, sizeof(opt)))
log_warning("unable to set TCP_KEEPCNT on server socket (%s)!", strerror(errno));
log_warning("unable to set TCP_KEEPCNT on server socket (%s)!",
strerror(errno));
if (setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &timeout, sizeof(timeout)))
log_warning("unable to set TCP_KEEPIDLE on server socket (%s)!", strerror(errno));
log_warning("unable to set TCP_KEEPIDLE on server socket (%s)!",
strerror(errno));
opt = 3;
if (setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &opt, sizeof(opt)))
log_warning("unable to set KEEPINTVL on server socket (%s)!", strerror(errno));
log_warning("unable to set KEEPINTVL on server socket (%s)!",
strerror(errno));
opt = 1;
if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt)))
log_warning("unable to set SO_KEEPALIVE on server socket (%s)!", strerror(errno));
log_warning("unable to set SO_KEEPALIVE on server socket (%s)!",
strerror(errno));
}
}
+5 -5
View File
@@ -29,7 +29,7 @@ struct __qelem {
#ifdef __compiler_offsetof
#define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)
#endif
#define LIST_HEAD_INIT(name) { &(name), &(name) }
@@ -53,7 +53,7 @@ static inline int list_length_is_one(const struct __qelem *head)
}
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
const typeof(((type *)0)->member) * __mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
#define list_entry(ptr, type, member) \
@@ -67,7 +67,7 @@ static inline int list_length_is_one(const struct __qelem *head)
#define list_for_each_entry_safe(pos, n, head, member) \
for (pos = list_entry((head)->q_forw, typeof(*pos), member), \
n = list_entry(pos->member.q_forw, typeof(*pos), member); \
&pos->member != (head); \
&pos->member != (head); \
pos = n, n = list_entry(n->member.q_forw, typeof(*n), member))
#define list_del(elem) remque(elem)
@@ -86,13 +86,13 @@ static inline void list_del_init(struct __qelem *elem)
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
(void)(&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
#define max(x, y) ({ \
typeof(x) _max1 = (x); \
typeof(y) _max2 = (y); \
(void) (&_max1 == &_max2); \
(void)(&_max1 == &_max2); \
_max1 > _max2 ? _max1 : _max2; })
/* ... and their non-checking counterparts, also taken from the kernel. */
+2 -2
View File
@@ -192,7 +192,7 @@ static int digest_val_to_str(unsigned int val, char *str, int len)
if (val & DIGEST_CRC32C) {
len -= pos;
pos = snprintf(&str[pos], len, "%s%s",
(pos != 0) ? "," : "", "CRC32C");
(pos != 0) ? "," : "", "CRC32C");
}
if (pos >= len)
@@ -301,7 +301,7 @@ int params_check_val(const struct iscsi_key *keys, int idx, unsigned int *val)
}
int params_set_val(struct iscsi_key *keys, struct iscsi_param *param,
int idx, unsigned int *val)
int idx, unsigned int *val)
{
if (keys[idx].ops->set_val)
return keys[idx].ops->set_val(param, idx, val);
+1 -1
View File
@@ -183,7 +183,7 @@ void session_free(struct session *session)
target->sessions_count--;
log_debug(1, "target %s, sessions_count %d", target->name,
target->sessions_count);
target->sessions_count);
list_del(&session->slist);
}
+3 -3
View File
@@ -33,7 +33,7 @@ static inline u32 rol32(u32 word, unsigned int shift)
}
static void __sha1_transform(u32 hash[SHA1_DIGEST_WORDS],
const u32 in[SHA1_BLOCK_WORDS],
const u32 in[SHA1_BLOCK_WORDS],
u32 W[SHA1_WORKSPACE_WORDS])
{
register u32 a, b, c, d, e, t;
@@ -43,7 +43,7 @@ static void __sha1_transform(u32 hash[SHA1_DIGEST_WORDS],
W[i] = cpu_to_be32(in[i]);
for (i = 0; i < 64; i++)
W[i+16] = rol32(W[i+13] ^ W[i+8] ^ W[i+2] ^ W[i], 1);
W[i + 16] = rol32(W[i + 13] ^ W[i + 8] ^ W[i + 2] ^ W[i], 1);
a = hash[0];
b = hash[1];
@@ -79,7 +79,7 @@ static void __sha1_transform(u32 hash[SHA1_DIGEST_WORDS],
}
static inline void sha1_transform(u32 digest[SHA1_DIGEST_WORDS],
const u32 block[SHA1_BLOCK_WORDS])
const u32 block[SHA1_BLOCK_WORDS])
{
u32 workspace[SHA1_WORKSPACE_WORDS];
+15 -16
View File
@@ -37,12 +37,12 @@ struct __qelem targets_list = LIST_HEAD_INIT(targets_list);
int send_targets_link_local = DEFAULT_SEND_TARGETS_LINK_LOCAL;
const char *iscsi_make_full_initiator_name(int per_portal_acl,
const char *initiator_name, const char *target_portal,
const char *initiator_name, const char *target_portal,
char *buf, int size)
{
if (per_portal_acl)
snprintf(buf, size, "%s#%s", initiator_name,
target_portal);
target_portal);
else
snprintf(buf, size, "%s", initiator_name);
@@ -86,7 +86,7 @@ static int __wildcmp(const char *wild, const char *string, int recursion_level)
return 1;
mp = wild;
cp = string+1;
cp = string + 1;
} else if ((tolower(*wild) == tolower(*string)) || (*wild == '?')) {
wild++;
string++;
@@ -140,7 +140,7 @@ static int wildcmp(const char *wild, const char *string)
* the positive patterns must match and none of the negative.
*/
int target_portal_allowed(struct target *target,
const char *target_portal, const char *initiator_name)
const char *target_portal, const char *initiator_name)
{
int res;
char full_initiator_name[ISCSI_FULL_NAME_LEN];
@@ -164,9 +164,9 @@ int target_portal_allowed(struct target *target,
goto out;
}
initiator_name = iscsi_make_full_initiator_name(target->per_portal_acl,
initiator_name, target_portal,
full_initiator_name, sizeof(full_initiator_name));
initiator_name = iscsi_make_full_initiator_name(target->per_portal_acl, initiator_name,
target_portal, full_initiator_name,
sizeof(full_initiator_name));
res = kernel_initiator_allowed(target->tid, initiator_name);
if (res < 0)
res = 0; /* false */
@@ -212,14 +212,14 @@ static void target_print_addr(struct connection *conn, const char *addr, int fam
return;
snprintf(taddr, sizeof(taddr),
(family == AF_INET) ? "%s:%d,1" : "[%s]:%d,1",
(family == AF_INET) ? "%s:%d,1" : "[%s]:%d,1",
addr, server_port);
text_key_add(conn, "TargetAddress", taddr);
}
static void target_list_build_ifaddrs(struct connection *conn,
struct target *target, const char *exclude_addr, int family)
struct target *target, const char *exclude_addr, int family)
{
struct ifaddrs *ifaddr, *ifa;
char if_addr[NI_MAXHOST];
@@ -258,7 +258,7 @@ void target_list_build(struct connection *conn, const char *target_name)
char portal[NI_MAXHOST];
int family, i;
if (conn->getsockname(conn->fd, (struct sockaddr *) &ss1, &slen)) {
if (conn->getsockname(conn->fd, (struct sockaddr *)&ss1, &slen)) {
log_error("getsockname failed: %m");
return;
}
@@ -282,10 +282,10 @@ void target_list_build(struct connection *conn, const char *target_name)
slen = sizeof(struct sockaddr_storage);
if (getsockname(poll_array[i].fd,
(struct sockaddr *) &ss2, &slen))
(struct sockaddr *)&ss2, &slen))
continue;
if (getnameinfo((struct sockaddr *) &ss2, slen, portal,
if (getnameinfo((struct sockaddr *)&ss2, slen, portal,
sizeof(portal), NULL, 0, NI_NUMERICHOST))
continue;
@@ -294,12 +294,12 @@ void target_list_build(struct connection *conn, const char *target_name)
if (is_addr_unspecified(portal))
target_list_build_ifaddrs(conn, target,
conn->target_portal, family);
conn->target_portal, family);
else if (strcmp(conn->target_portal, portal) &&
!is_addr_loopback(portal) &&
target_portal_allowed(target, portal,
conn->initiator))
target_print_addr(conn, portal, family);
target_print_addr(conn, portal, family);
}
}
}
@@ -454,7 +454,6 @@ int target_add(struct target *target, u32 *tid, u32 cookie)
list_add_tail(&target->tlist, &targets_list);
out:
return err;
}
@@ -498,7 +497,7 @@ bool target_redirected(const struct target *target, struct connection *conn)
snprintf(addr, sizeof(addr), "%s", tmp);
snprintf(redirect, sizeof(redirect), "%s:%d", target->redirect.addr,
target->redirect.port);
target->redirect.port);
if (strcmp(target->redirect.addr, addr)) {
text_key_add(conn, "TargetAddress", redirect);
+22 -18
View File
@@ -31,11 +31,12 @@ char *app_name;
#if defined(DEBUG) || defined(TRACING)
#ifdef DEBUG
/*#define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF \
& ~TRACE_FUNCTION)
#define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF & \
~TRACE_SCSI & ~TRACE_SCSI_SERIALIZING & ~TRACE_DEBUG)
*/
/*
* #define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF \
* & ~TRACE_FUNCTION)
* #define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF & \
* ~TRACE_SCSI & ~TRACE_SCSI_SERIALIZING & ~TRACE_DEBUG)
*/
#define DEFAULT_LOG_FLAGS (TRACE_OUT_OF_MEM | TRACE_MINOR | TRACE_PID | \
TRACE_FUNCTION | TRACE_SPECIAL | TRACE_MGMT | TRACE_MGMT_DEBUG | \
TRACE_TIME)
@@ -87,13 +88,16 @@ static void usage(void)
static void handle_reg_vdev_received(struct scst_event_user *event_user)
{
const struct scst_event_reg_vdev_payload *p = (struct scst_event_reg_vdev_payload *)event_user->out_event.payload;
const struct scst_event_reg_vdev_payload *p =
(struct scst_event_reg_vdev_payload *)event_user->out_event.payload;
printf("Virtual device %s registration received.\n", p->device_name);
}
static void handle_tm_received(struct scst_event_user *event_user)
{
const struct scst_event_tm_fn_received_payload *p = (struct scst_event_tm_fn_received_payload *)event_user->out_event.payload;
const struct scst_event_tm_fn_received_payload *p =
(struct scst_event_tm_fn_received_payload *)event_user->out_event.payload;
printf("fn %u, device %s\n", p->fn, p->device_name);
}
@@ -116,14 +120,14 @@ int main(int argc, char **argv)
app_name = argv[0];
while ((ch = getopt_long(argc, argv, "+e:i:d:nhv",
long_options, &longindex)) >= 0) {
long_options, &longindex)) >= 0) {
switch (ch) {
case 'e':
if (allowed_events[allowed_events_num].event_code != 0) {
allowed_events_num++;
if (allowed_events_num >= MAX_ALLOWED_EVENTS) {
PRINT_ERROR("Too many allowed events %d",
allowed_events_num);
allowed_events_num);
exit(1);
}
}
@@ -134,12 +138,13 @@ int main(int argc, char **argv)
allowed_events_num++;
if (allowed_events_num >= MAX_ALLOWED_EVENTS) {
PRINT_ERROR("Too many allowed events %d",
allowed_events_num);
allowed_events_num);
exit(1);
}
}
snprintf(allowed_events[allowed_events_num].issuer_name,
sizeof(allowed_events[allowed_events_num].issuer_name), "%s", optarg);
sizeof(allowed_events[allowed_events_num].issuer_name), "%s",
optarg);
break;
case 'n':
non_blocking = 1;
@@ -176,7 +181,7 @@ int main(int argc, char **argv)
if (event_fd < 0) {
res = -errno;
PRINT_ERROR("Unable to open SCST event device %s (%s)",
SCST_EVENT_DEV, strerror(-res));
SCST_EVENT_DEV, strerror(-res));
goto out_done;
}
@@ -188,7 +193,7 @@ int main(int argc, char **argv)
struct scst_event e;
PRINT_INFO("Setting allowed event code %d, issuer_name %s",
allowed_events[i].event_code,
allowed_events[i].event_code,
allowed_events[i].issuer_name);
memset(&e, 0, sizeof(e));
e.event_code = allowed_events[i].event_code;
@@ -198,7 +203,7 @@ int main(int argc, char **argv)
res = ioctl(event_fd, SCST_EVENT_ALLOW_EVENT, &e);
if (res != 0) {
PRINT_ERROR("SCST_EVENT_ALLOW_EVENT failed: %s (res %d)",
strerror(errno), res);
strerror(errno), res);
goto out_done;
}
}
@@ -224,7 +229,7 @@ int main(int argc, char **argv)
continue;
default:
PRINT_ERROR("SCST_EVENT_GET_NEXT_EVENT failed: %s (res %d)",
strerror(errno), res);
strerror(errno), res);
goto out_done;
}
again_poll:
@@ -252,7 +257,6 @@ again_poll:
#endif
}
}
}
PRINT_INFO("\nevent_code %u, issuer_name %s",
@@ -260,7 +264,7 @@ again_poll:
event_user->out_event.issuer_name);
if (event_user->out_event.payload_len != 0)
PRINT_BUFFER("payoad", event_user->out_event.payload,
event_user->out_event.payload_len);
event_user->out_event.payload_len);
PRINT_INFO("%s", "");
if (event_user->out_event.event_code == 0x12345) {
@@ -297,7 +301,7 @@ again_poll:
struct scst_event e;
PRINT_INFO("Deleting allowed event code %d, issuer_name %s",
allowed_events[0].event_code,
allowed_events[0].event_code,
allowed_events[0].issuer_name);
memset(&e, 0, sizeof(e));
e.event_code = allowed_events[0].event_code;
+129 -121
View File
@@ -77,6 +77,7 @@ static void set_resp_data_len(struct vdisk_cmd *vcmd, int32_t resp_data_len)
if (vcmd->may_need_to_free_pbuf && resp_data_len == 0) {
struct scst_user_scsi_cmd_exec *cmd = &vcmd->cmd->exec_cmd;
free((void *)(unsigned long)cmd->pbuf);
cmd->pbuf = 0;
reply->pbuf = 0;
@@ -88,9 +89,10 @@ static void set_resp_data_len(struct vdisk_cmd *vcmd, int32_t resp_data_len)
}
static inline void set_cmd_error_status(struct vdisk_cmd *vcmd,
int status)
int status)
{
struct scst_user_scsi_cmd_reply_exec *reply = &vcmd->reply->exec_reply;
reply->status = status;
set_resp_data_len(vcmd, 0);
}
@@ -128,7 +130,7 @@ static void set_cmd_error(struct vdisk_cmd *vcmd, int key, int asc, int ascq)
set_cmd_error_status(vcmd, SAM_STAT_CHECK_CONDITION);
reply->sense_len = set_sense(vcmd->sense, sizeof(vcmd->sense), key,
asc, ascq);
asc, ascq);
reply->psense_buffer = (unsigned long)vcmd->sense;
TRACE_EXIT();
@@ -190,7 +192,7 @@ static struct vdisk_tgt_dev *find_tgt_dev(struct vdisk_dev *dev, uint64_t sess_h
unsigned int i;
struct vdisk_tgt_dev *res = NULL;
for(i = 0; i < ARRAY_SIZE(dev->tgt_devs); i++) {
for (i = 0; i < ARRAY_SIZE(dev->tgt_devs); i++) {
if (dev->tgt_devs[i].sess_h == sess_h) {
res = &dev->tgt_devs[i];
break;
@@ -204,7 +206,7 @@ static struct vdisk_tgt_dev *find_empty_tgt_dev(struct vdisk_dev *dev)
unsigned int i;
struct vdisk_tgt_dev *res = NULL;
for(i = 0; i < ARRAY_SIZE(dev->tgt_devs); i++) {
for (i = 0; i < ARRAY_SIZE(dev->tgt_devs); i++) {
if (dev->tgt_devs[i].sess_h == 0) {
res = &dev->tgt_devs[i];
break;
@@ -231,7 +233,7 @@ static int do_exec(struct vdisk_cmd *vcmd)
/* Must be reinitialized each time to avoid crash on stale value */
vcmd->may_need_to_free_pbuf = 0;
switch(cmd->queue_type) {
switch (cmd->queue_type) {
case SCST_CMD_QUEUE_ORDERED:
TRACE(TRACE_ORDER, "ORDERED cmd_h %u", vcmd->cmd->cmd_h);
break;
@@ -257,7 +259,7 @@ static int do_exec(struct vdisk_cmd *vcmd)
#ifdef DEBUG_TM_IGNORE
if (dev->debug_tm_ignore && (random() % 10000) == 75) {
TRACE_MGMT_DBG("Ignore cmd op %x (h=%d)", cdb[0],
vcmd->cmd->cmd_h);
vcmd->cmd->cmd_h);
res = 150;
goto out;
}
@@ -272,7 +274,7 @@ static int do_exec(struct vdisk_cmd *vcmd)
cmd->pbuf = (unsigned long)dev->alloc_fn(cmd->alloc_len);
vcmd->may_need_to_free_pbuf = 1;
TRACE_MEM("Buf %" PRIx64 " alloced, len %d", cmd->pbuf,
cmd->alloc_len);
cmd->alloc_len);
reply->pbuf = cmd->pbuf;
if (cmd->pbuf == 0) {
TRACE(TRACE_OUT_OF_MEM, "Unable to allocate buffer (len %d)",
@@ -292,10 +294,10 @@ static int do_exec(struct vdisk_cmd *vcmd)
", data_len %" PRId64, vcmd->cmd->cmd_h, cmd->pbuf, lba_start,
(uint64_t)loff, data_len);
if (loff < 0 || data_len < 0 || ((loff + data_len) > dev->file_size)) {
PRINT_INFO("Access beyond the end of the device (%" PRId64 " of %" PRId64 ", len %" PRId64 ")", (uint64_t)loff,
PRINT_INFO("Access beyond the end of the device (%" PRId64 " of %" PRId64 ", len %" PRId64 ")",
(uint64_t)loff,
(uint64_t)dev->file_size, data_len);
set_cmd_error(vcmd, SCST_LOAD_SENSE(
scst_sense_block_out_range_error));
set_cmd_error(vcmd, SCST_LOAD_SENSE(scst_sense_block_out_range_error));
goto out;
}
@@ -329,9 +331,9 @@ static int do_exec(struct vdisk_cmd *vcmd)
tgt_dev = find_tgt_dev(dev, cmd->sess_h);
if (!tgt_dev) {
PRINT_ERROR("Session %" PRIx64 " not found",
cmd->sess_h);
cmd->sess_h);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_hardw_error));
SCST_LOAD_SENSE(scst_sense_hardw_error));
goto out;
}
@@ -342,7 +344,7 @@ static int do_exec(struct vdisk_cmd *vcmd)
} else {
PRINT_WARNING("Attempt to write to read-only device %s", dev->name);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_data_protect));
SCST_LOAD_SENSE(scst_sense_data_protect));
}
break;
case WRITE_VERIFY:
@@ -354,9 +356,9 @@ static int do_exec(struct vdisk_cmd *vcmd)
tgt_dev = find_tgt_dev(dev, cmd->sess_h);
if (!tgt_dev) {
PRINT_ERROR("Session %" PRIx64 " not found",
cmd->sess_h);
cmd->sess_h);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_hardw_error));
SCST_LOAD_SENSE(scst_sense_hardw_error));
goto out;
}
@@ -367,18 +369,19 @@ static int do_exec(struct vdisk_cmd *vcmd)
} else {
PRINT_WARNING("Attempt to write to read-only device %s", dev->name);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_data_protect));
SCST_LOAD_SENSE(scst_sense_data_protect));
}
break;
case SYNCHRONIZE_CACHE:
case SYNCHRONIZE_CACHE_16:
{
int immed = cdb[1] & 0x2;
if (data_len == 0)
data_len = dev->file_size -
((loff_t)lba_start << dev->block_shift);
TRACE(TRACE_ORDER, "SYNCHRONIZE_CACHE: loff=%" PRId64 ", data_len=%" PRId64 ", immed=%d",
(uint64_t)loff, data_len, immed);
(uint64_t)loff, data_len, immed);
/* ToDo: execute immediate synchronization in the background. */
exec_fsync(vcmd);
break;
@@ -424,14 +427,14 @@ static int do_exec(struct vdisk_cmd *vcmd)
case WRITE_SAME_16:
exec_write_same(vcmd);
break;
case SERVICE_ACTION_IN_16:
case SERVICE_ACTION_IN_16:
if ((cmd->cdb[1] & 0x1f) == SAI_READ_CAPACITY_16) {
exec_read_capacity16(vcmd);
} else {
TRACE_DBG("Invalid service action %d for SERVICE ACTION IN",
cmd->cdb[1] & 0x1f);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
}
break;
case REPORT_LUNS:
@@ -455,12 +458,12 @@ static int do_alloc_mem(struct vdisk_cmd *vcmd)
TRACE_ENTRY();
TRACE_MEM("Alloc mem (cmd %d, sess_h %" PRIx64 ", cdb_len %d, alloc_len %d, queue_type %d, data_direction %d)",
cmd->cmd_h, cmd->alloc_cmd.sess_h,
cmd->alloc_cmd.cdb_len, cmd->alloc_cmd.alloc_len,
cmd->alloc_cmd.queue_type, cmd->alloc_cmd.data_direction);
cmd->cmd_h, cmd->alloc_cmd.sess_h,
cmd->alloc_cmd.cdb_len, cmd->alloc_cmd.alloc_len,
cmd->alloc_cmd.queue_type, cmd->alloc_cmd.data_direction);
TRACE_BUFF_FLAG(TRACE_MEMORY, "CDB", cmd->alloc_cmd.cdb,
cmd->alloc_cmd.cdb_len);
cmd->alloc_cmd.cdb_len);
memset(reply, 0, sizeof(*reply));
reply->cmd_h = cmd->cmd_h;
@@ -470,13 +473,13 @@ static int do_alloc_mem(struct vdisk_cmd *vcmd)
reply->alloc_reply.pbuf = 0;
else
#endif
reply->alloc_reply.pbuf = (unsigned long)vcmd->dev->alloc_fn(
cmd->alloc_cmd.alloc_len);
reply->alloc_reply.pbuf =
(unsigned long)vcmd->dev->alloc_fn(cmd->alloc_cmd.alloc_len);
TRACE_MEM("Buf %" PRIx64 " alloced, len %d", reply->alloc_reply.pbuf,
cmd->alloc_cmd.alloc_len);
cmd->alloc_cmd.alloc_len);
if (reply->alloc_reply.pbuf == 0) {
TRACE(TRACE_OUT_OF_MEM, "Unable to allocate buffer (len %d)",
cmd->alloc_cmd.alloc_len);
cmd->alloc_cmd.alloc_len);
}
TRACE_EXIT_RES(res);
@@ -492,7 +495,7 @@ static int do_cached_mem_free(struct vdisk_cmd *vcmd)
TRACE_ENTRY();
TRACE_MEM("Cached mem free (cmd %x, buf %" PRIx64 ")", cmd->cmd_h,
cmd->on_cached_mem_free.pbuf);
cmd->on_cached_mem_free.pbuf);
free((void *)(unsigned long)cmd->on_cached_mem_free.pbuf);
@@ -568,7 +571,7 @@ static int do_ext_copy_remap(struct vdisk_cmd *vcmd)
#else
rreply->status = SAM_STAT_CHECK_CONDITION;
rreply->sense_len = set_sense(vcmd->sense, sizeof(vcmd->sense),
SCST_LOAD_SENSE(scst_sense_data_protect));
SCST_LOAD_SENSE(scst_sense_data_protect));
rreply->psense_buffer = (unsigned long)vcmd->sense;
#endif
@@ -637,7 +640,7 @@ static int do_sess(struct vdisk_cmd *vcmd)
if (cmd->subcode == SCST_USER_ATTACH_SESS) {
if (tgt_dev) {
PRINT_ERROR("Session %" PRIx64 " already exists)",
cmd->sess.sess_h);
cmd->sess.sess_h);
res = EEXIST;
goto reply;
}
@@ -660,13 +663,13 @@ static int do_sess(struct vdisk_cmd *vcmd)
} else {
if (!tgt_dev) {
PRINT_ERROR("Session %" PRIx64 " not found)",
cmd->sess.sess_h);
cmd->sess.sess_h);
res = ESRCH;
goto reply;
}
tgt_dev->sess_h = 0;
PRINT_INFO("Session detached (sess_h %" PRIx64 ")",
cmd->sess.sess_h);
cmd->sess.sess_h);
}
reply:
@@ -689,17 +692,17 @@ static int process_cmd(struct vdisk_cmd *vcmd)
TRACE_BUFFER("Received cmd", cmd, sizeof(*cmd));
switch(cmd->subcode) {
switch (cmd->subcode) {
case SCST_USER_EXEC:
if (cmd->exec_cmd.data_direction & SCST_DATA_WRITE) {
TRACE_BUFFER("Received cmd data",
(void *)(unsigned long)cmd->exec_cmd.pbuf,
(void *)(unsigned long)cmd->exec_cmd.pbuf,
cmd->exec_cmd.bufflen);
}
res = do_exec(vcmd);
if (reply->exec_reply.resp_data_len != 0 && res != 150) {
TRACE_BUFFER("Reply data",
(void *)(unsigned long)reply->exec_reply.pbuf,
(void *)(unsigned long)reply->exec_reply.pbuf,
reply->exec_reply.resp_data_len);
}
break;
@@ -721,9 +724,9 @@ static int process_cmd(struct vdisk_cmd *vcmd)
break;
#ifdef DEBUG_EXT_COPY_REMAP
case SCST_USER_EXT_COPY_REMAP:
res = do_ext_copy_remap(vcmd);
break;
case SCST_USER_EXT_COPY_REMAP:
res = do_ext_copy_remap(vcmd);
break;
#endif
case SCST_USER_TASK_MGMT_RECEIVED:
@@ -745,7 +748,7 @@ static int process_cmd(struct vdisk_cmd *vcmd)
default:
PRINT_ERROR("Unknown or wrong cmd subcode %x",
cmd->subcode);
cmd->subcode);
res = -EINVAL;
goto out;
}
@@ -786,7 +789,7 @@ void *main_loop(void *arg)
if (vcmd.fd < 0) {
res = -errno;
PRINT_ERROR("Unable to open file %s (%s)", dev->file_name,
strerror(-res));
strerror(-res));
goto out;
}
@@ -828,7 +831,7 @@ void *main_loop(void *arg)
}
if (res != 0) {
res = errno;
switch(res) {
switch (res) {
case ESRCH:
case EBUSY:
TRACE_MGMT_DBG("SCST_USER returned %d (%s)", res, strerror(res));
@@ -868,7 +871,7 @@ again_poll:
goto again_poll;
} else {
res = errno;
switch(res) {
switch (res) {
case ESRCH:
case EBUSY:
case EAGAIN:
@@ -890,9 +893,13 @@ again_poll:
if (use_multi) {
if (multi.multi_cmd.replies_done < multi.multi_cmd.replies_cnt) {
TRACE_MGMT_DBG("replies_done %d < replies_cnt %d (dev %s)",
multi.multi_cmd.replies_done, multi.multi_cmd.replies_cnt, dev->name);
multi.multi_cmd.preplies = (uintptr_t)&multi.replies[multi.multi_cmd.replies_done];
multi.multi_cmd.replies_cnt = multi.multi_cmd.replies_cnt - multi.multi_cmd.replies_done;
multi.multi_cmd.replies_done,
multi.multi_cmd.replies_cnt,
dev->name);
multi.multi_cmd.preplies =
(uintptr_t)&multi.replies[multi.multi_cmd.replies_done];
multi.multi_cmd.replies_cnt =
multi.multi_cmd.replies_cnt - multi.multi_cmd.replies_done;
multi.multi_cmd.cmds_cnt = MULTI_CMDS_CNT;
continue;
}
@@ -944,7 +951,7 @@ uint64_t gen_dev_id_num(const struct vdisk_dev *dev)
{
uint32_t dev_id_num;
dev_id_num = crc32buf(dev->name, strlen(dev->name)+1);
dev_id_num = crc32buf(dev->name, strlen(dev->name) + 1);
return ((uint64_t)vdisk_ID << 32) | dev_id_num;
}
@@ -957,7 +964,7 @@ static void exec_inquiry(struct vdisk_cmd *vcmd)
int resp_len = 0;
int length = cmd->bufflen;
unsigned int i;
uint8_t *address = (uint8_t*)(unsigned long)cmd->pbuf;
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
uint8_t buf[INQ_BUF_SZ];
TRACE_ENTRY();
@@ -965,7 +972,7 @@ static void exec_inquiry(struct vdisk_cmd *vcmd)
if (cmd->cdb[1] & CMDDT) {
TRACE_DBG("%s", "INQUIRY: CMDDT is unsupported");
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
@@ -1004,7 +1011,7 @@ static void exec_inquiry(struct vdisk_cmd *vcmd)
buf[num + 1] = 0x1; /* Vendor ID */
memcpy(&buf[num + 4], VENDOR, 8);
snprintf(t10_id, sizeof(buf) - num - 12,
"%" PRIx64 "-%s", dev_id_num, dev->name);
"%" PRIx64 "-%s", dev_id_num, dev->name);
i = strlen(t10_id) + 1;
TRACE_DBG("t10_dev_id %s", t10_id);
buf[num + 3] = 8 + i;
@@ -1036,18 +1043,19 @@ static void exec_inquiry(struct vdisk_cmd *vcmd)
} else if (cmd->cdb[2] == 0xB0) {
/* Block Limits */
int max_transfer;
buf[1] = 0xB0;
buf[3] = 0x3C;
buf[5] = 0xFF; /* No MAXIMUM COMPARE AND WRITE LENGTH limit */
/* Optimal transfer granuality is PAGE_SIZE */
max_transfer = max((int)(4096/dev->block_size), 1);
max_transfer = max((int)(4096 / dev->block_size), 1);
buf[6] = (max_transfer >> 8) & 0xff;
buf[7] = max_transfer & 0xff;
/*
* Max transfer len is min of sg limit and 8M, but we
* don't have access to them here, so let's use 1M.
*/
max_transfer = 1*1024*1024;
max_transfer = 1 * 1024 * 1024;
buf[8] = (max_transfer >> 24) & 0xff;
buf[9] = (max_transfer >> 16) & 0xff;
buf[10] = (max_transfer >> 8) & 0xff;
@@ -1059,7 +1067,7 @@ static void exec_inquiry(struct vdisk_cmd *vcmd)
* From other side, too big transfers are not optimal,
* because SGV cache supports only <4M buffers.
*/
max_transfer = min((int)max_transfer, (int)(512*1024 / dev->block_size));
max_transfer = min((int)max_transfer, (int)(512 * 1024 / dev->block_size));
buf[12] = (max_transfer >> 24) & 0xff;
buf[13] = (max_transfer >> 16) & 0xff;
buf[14] = (max_transfer >> 8) & 0xff;
@@ -1084,9 +1092,9 @@ static void exec_inquiry(struct vdisk_cmd *vcmd)
resp_len = buf[3] + 4;
} else {
TRACE_DBG("INQUIRY: Unsupported EVPD page %x",
cmd->cdb[2]);
cmd->cdb[2]);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
} else {
@@ -1095,7 +1103,7 @@ static void exec_inquiry(struct vdisk_cmd *vcmd)
if (cmd->cdb[2] != 0) {
TRACE_DBG("INQUIRY: Unsupported page %x", cmd->cdb[2]);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
@@ -1136,7 +1144,7 @@ static void exec_request_sense(struct vdisk_cmd *vcmd)
struct scst_user_scsi_cmd_exec *cmd = &vcmd->cmd->exec_cmd;
const struct scst_user_scsi_cmd_reply_exec *reply = &vcmd->reply->exec_reply;
int length = cmd->bufflen, l;
uint8_t *address = (uint8_t*)(unsigned long)cmd->pbuf;
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
uint8_t b[SCST_STANDARD_SENSE_LEN];
TRACE_ENTRY();
@@ -1171,7 +1179,7 @@ static int err_recov_pg(unsigned char *p, int pcontrol)
}
static int disconnect_pg(unsigned char *p, int pcontrol)
{ /* Disconnect-Reconnect page for mode_sense */
{ /* Disconnect-Reconnect page for mode_sense */
const unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0};
@@ -1182,7 +1190,7 @@ static int disconnect_pg(unsigned char *p, int pcontrol)
}
static int rigid_geo_pg(unsigned char *p, int pcontrol,
const struct vdisk_dev *dev)
const struct vdisk_dev *dev)
{
unsigned char geo_m_pg[] = {0x04, 0x16, 0, 0, 0, DEF_HEADS, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1202,25 +1210,25 @@ static int rigid_geo_pg(unsigned char *p, int pcontrol,
}
static int format_pg(unsigned char *p, int pcontrol,
const struct vdisk_dev *dev)
const struct vdisk_dev *dev)
{ /* Format device page for mode_sense */
const unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0x40, 0, 0, 0};
memcpy(p, format_pg, sizeof(format_pg));
p[10] = (DEF_SECTORS >> 8) & 0xff;
p[11] = DEF_SECTORS & 0xff;
p[12] = (dev->block_size >> 8) & 0xff;
p[13] = dev->block_size & 0xff;
memcpy(p, format_pg, sizeof(format_pg));
p[10] = (DEF_SECTORS >> 8) & 0xff;
p[11] = DEF_SECTORS & 0xff;
p[12] = (dev->block_size >> 8) & 0xff;
p[13] = dev->block_size & 0xff;
if (pcontrol == 1)
memset(p + 2, 0, sizeof(format_pg) - 2);
return sizeof(format_pg);
memset(p + 2, 0, sizeof(format_pg) - 2);
return sizeof(format_pg);
}
static int caching_pg(unsigned char *p, int pcontrol,
const struct vdisk_dev *dev)
{ /* Caching page for mode_sense */
const struct vdisk_dev *dev)
{ /* Caching page for mode_sense */
const unsigned char caching_pg[] = {0x8, 18, 0x10, 0, 0xff, 0xff, 0, 0,
0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0, 0, 0, 0, 0};
@@ -1232,8 +1240,8 @@ static int caching_pg(unsigned char *p, int pcontrol,
}
static int ctrl_m_pg(unsigned char *p, int pcontrol,
const struct vdisk_dev *dev)
{ /* Control mode page for mode_sense */
const struct vdisk_dev *dev)
{ /* Control mode page for mode_sense */
const unsigned char ctrl_m_pg[] = {0xa, 0xa, 0x20, 0, 0, 0x40, 0, 0,
0, 0, 0x2, 0x4b};
@@ -1248,7 +1256,7 @@ static int ctrl_m_pg(unsigned char *p, int pcontrol,
static int iec_m_pg(unsigned char *p, int pcontrol)
{ /* Informational Exceptions control mode page for mode_sense */
const unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
0, 0, 0x0, 0x0};
0, 0, 0x0, 0x0};
memcpy(p, iec_m_pg, sizeof(iec_m_pg));
if (pcontrol == 1)
memset(p + 2, 0, sizeof(iec_m_pg) - 2);
@@ -1261,7 +1269,7 @@ static void exec_mode_sense(struct vdisk_cmd *vcmd)
struct scst_user_scsi_cmd_exec *cmd = &vcmd->cmd->exec_cmd;
const struct scst_user_scsi_cmd_reply_exec *reply = &vcmd->reply->exec_reply;
int length = cmd->bufflen;
uint8_t *address = (uint8_t*)(unsigned long)cmd->pbuf;
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
uint8_t buf[MSENSE_BUF_SZ];
int blocksize;
uint64_t nblocks;
@@ -1289,7 +1297,7 @@ static void exec_mode_sense(struct vdisk_cmd *vcmd)
if (pcontrol == 0x3) {
TRACE_DBG("%s", "MODE SENSE: Saving values not supported");
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_saving_params_unsup));
SCST_LOAD_SENSE(scst_sense_saving_params_unsup));
goto out;
}
@@ -1306,7 +1314,7 @@ static void exec_mode_sense(struct vdisk_cmd *vcmd)
if (subpcode != 0) { /* TODO: Control Extension page */
TRACE_DBG("%s", "MODE SENSE: Only subpage 0 is supported");
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
@@ -1341,9 +1349,9 @@ static void exec_mode_sense(struct vdisk_cmd *vcmd)
case 0x2: /* Disconnect-Reconnect page, all devices */
len = disconnect_pg(bp, pcontrol);
break;
case 0x3: /* Format device page, direct access */
len = format_pg(bp, pcontrol, dev);
break;
case 0x3: /* Format device page, direct access */
len = format_pg(bp, pcontrol, dev);
break;
case 0x4: /* Rigid disk geometry */
len = rigid_geo_pg(bp, pcontrol, dev);
break;
@@ -1368,7 +1376,7 @@ static void exec_mode_sense(struct vdisk_cmd *vcmd)
default:
TRACE_DBG("MODE SENSE: Unsupported page %x", pcode);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
@@ -1427,7 +1435,7 @@ static void exec_mode_select(struct vdisk_cmd *vcmd)
if (!(cmd->cdb[1] & PF) || (cmd->cdb[1] & SP)) {
PRINT_ERROR("MODE SELECT: PF and/or SP are wrongly set (cdb[1]=%x)", cmd->cdb[1]);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
@@ -1441,28 +1449,27 @@ static void exec_mode_select(struct vdisk_cmd *vcmd)
} else if (address[offset - 1] != 0) {
PRINT_ERROR("%s", "MODE SELECT: Wrong parameters list length");
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_parm_list));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_parm_list));
goto out;
}
while (length > offset + 2) {
if (address[offset] & PS) {
PRINT_ERROR("%s", "MODE SELECT: Illegal PS bit");
set_cmd_error(vcmd, SCST_LOAD_SENSE(
scst_sense_invalid_field_in_parm_list));
set_cmd_error(vcmd, SCST_LOAD_SENSE(scst_sense_invalid_field_in_parm_list));
goto out;
}
if ((address[offset] & 0x3f) == 0x8) { /* Caching page */
if (address[offset + 1] != 18) {
PRINT_ERROR("%s", "MODE SELECT: Invalid caching page request");
set_cmd_error(vcmd, SCST_LOAD_SENSE(
scst_sense_invalid_field_in_parm_list));
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_parm_list));
goto out;
}
if (set_wt(dev,
(address[offset + 2] & WCE) ? 0 : 1) != 0) {
(address[offset + 2] & WCE) ? 0 : 1) != 0) {
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_hardw_error));
SCST_LOAD_SENSE(scst_sense_hardw_error));
goto out;
}
break;
@@ -1480,7 +1487,7 @@ static void exec_read_capacity(struct vdisk_cmd *vcmd)
struct scst_user_scsi_cmd_exec *cmd = &vcmd->cmd->exec_cmd;
const struct scst_user_scsi_cmd_reply_exec *reply = &vcmd->reply->exec_reply;
int length = cmd->bufflen;
uint8_t *address = (uint8_t*)(unsigned long)cmd->pbuf;
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
uint32_t blocksize;
uint64_t nblocks;
uint8_t buffer[8];
@@ -1524,7 +1531,7 @@ static void exec_read_capacity16(struct vdisk_cmd *vcmd)
const struct scst_user_scsi_cmd_exec *cmd = &vcmd->cmd->exec_cmd;
const struct scst_user_scsi_cmd_reply_exec *reply = &vcmd->reply->exec_reply;
int length = cmd->bufflen;
uint8_t *address = (uint8_t*)(unsigned long)cmd->pbuf;
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
uint32_t blocksize;
uint64_t nblocks;
uint8_t buffer[32];
@@ -1585,7 +1592,7 @@ static void exec_read_toc(struct vdisk_cmd *vcmd)
int length = cmd->bufflen;
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
uint32_t nblocks;
uint8_t buffer[4+8+8] = { 0x00, 0x0a, 0x01, 0x01, 0x00, 0x14,
uint8_t buffer[4 + 8 + 8] = { 0x00, 0x0a, 0x01, 0x01, 0x00, 0x14,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00 };
TRACE_ENTRY();
@@ -1593,23 +1600,23 @@ static void exec_read_toc(struct vdisk_cmd *vcmd)
if (dev->type != TYPE_ROM) {
PRINT_ERROR("%s", "READ TOC for non-CDROM device");
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_opcode));
SCST_LOAD_SENSE(scst_sense_invalid_opcode));
goto out;
}
if (cmd->cdb[2] & 0x0e/*Format*/) {
PRINT_ERROR("%s", "READ TOC: invalid requested data format");
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
if ((cmd->cdb[6] != 0 && (cmd->cdb[2] & 0x01)) ||
(cmd->cdb[6] > 1 && cmd->cdb[6] != 0xAA)) {
PRINT_ERROR("READ TOC: invalid requested track number %x",
cmd->cdb[6]);
cmd->cdb[6]);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
SCST_LOAD_SENSE(scst_sense_invalid_field_in_cdb));
goto out;
}
@@ -1621,25 +1628,26 @@ static void exec_read_toc(struct vdisk_cmd *vcmd)
buffer[2] = 0x01; /* First Track/Session */
buffer[3] = 0x01; /* Last Track/Session */
off = 4;
if (cmd->cdb[6] <= 1)
{
/* Fistr TOC Track Descriptor */
buffer[off+1] = 0x14; /* ADDR 0x10 - Q Sub-channel encodes current position data
CONTROL 0x04 - Data track, recoreded uninterrupted */
buffer[off+2] = 0x01; /* Track Number */
if (cmd->cdb[6] <= 1) {
/* First TOC Track Descriptor */
/*
* ADDR 0x10 - Q Sub-channel encodes current position data.
* CONTROL 0x04 - Data track, recorded uninterrupted.
*/
buffer[off + 1] = 0x14;
buffer[off + 2] = 0x01; /* Track Number */
off += 8;
}
if (!(cmd->cdb[2] & 0x01))
{
}
if (!(cmd->cdb[2] & 0x01)) {
/* Lead-out area TOC Track Descriptor */
buffer[off+1] = 0x14;
buffer[off+2] = 0xAA; /* Track Number */
buffer[off+4] = (nblocks >> (BYTE * 3)) & 0xFF; /* Track Start Address */
buffer[off+5] = (nblocks >> (BYTE * 2)) & 0xFF;
buffer[off+6] = (nblocks >> (BYTE * 1)) & 0xFF;
buffer[off+7] = (nblocks >> (BYTE * 0)) & 0xFF;
buffer[off + 1] = 0x14;
buffer[off + 2] = 0xAA; /* Track Number */
buffer[off + 4] = (nblocks >> (BYTE * 3)) & 0xFF; /* Track Start Address */
buffer[off + 5] = (nblocks >> (BYTE * 2)) & 0xFF;
buffer[off + 6] = (nblocks >> (BYTE * 1)) & 0xFF;
buffer[off + 7] = (nblocks >> (BYTE * 0)) & 0xFF;
off += 8;
}
}
buffer[1] = off - 2; /* Data Length */
@@ -1690,7 +1698,7 @@ static void exec_read(struct vdisk_cmd *vcmd, loff_t loff)
const struct vdisk_dev *dev = vcmd->dev;
const struct scst_user_scsi_cmd_exec *cmd = &vcmd->cmd->exec_cmd;
int length = cmd->bufflen;
uint8_t *address = (uint8_t*)(unsigned long)cmd->pbuf;
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
int fd = vcmd->fd;
loff_t err;
@@ -1715,12 +1723,12 @@ static void exec_read(struct vdisk_cmd *vcmd, loff_t loff)
if (err < 0 || err < length) {
PRINT_ERROR("read() returned %" PRId64 " from %d (errno %d)",
(uint64_t)err, length, errno);
(uint64_t)err, length, errno);
if (err == -EAGAIN) {
set_busy(vcmd);
} else {
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_read_error));
SCST_LOAD_SENSE(scst_sense_read_error));
}
goto out;
}
@@ -1755,7 +1763,7 @@ restart:
" (errno %d)", (uint64_t)err, (uint64_t)loff,
errno);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_hardw_error));
SCST_LOAD_SENSE(scst_sense_hardw_error));
goto out;
}
@@ -1770,7 +1778,7 @@ restart:
set_busy(vcmd);
} else {
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_write_error));
SCST_LOAD_SENSE(scst_sense_write_error));
}
goto out;
} else if (err < length) {
@@ -1798,7 +1806,7 @@ static void exec_verify(struct vdisk_cmd *vcmd, loff_t loff)
uint8_t *address = (uint8_t *)(unsigned long)cmd->pbuf;
int compare;
int fd = vcmd->fd;
uint8_t mem_verify[128*1024];
uint8_t mem_verify[128 * 1024];
TRACE_ENTRY();
@@ -1807,7 +1815,7 @@ static void exec_verify(struct vdisk_cmd *vcmd, loff_t loff)
/*
* Until the cache is cleared prior the verifying, there is not
* much point in this code. ToDo.
* much point in this code. ToDo.
*
* Nevertherless, this code is valuable if the data have not read
* from the file/disk yet.
@@ -1836,7 +1844,7 @@ static void exec_verify(struct vdisk_cmd *vcmd, loff_t loff)
int64_t len_mem = (length > (int)sizeof(mem_verify)) ?
(int)sizeof(mem_verify) : length;
TRACE_DBG("Verify: length %" PRId64 " - len_mem %" PRId64,
length, len_mem);
length, len_mem);
if (!dev->nullio)
err = read(fd, (char *)mem_verify, len_mem);
@@ -1849,14 +1857,14 @@ static void exec_verify(struct vdisk_cmd *vcmd, loff_t loff)
set_busy(vcmd);
} else {
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_read_error));
SCST_LOAD_SENSE(scst_sense_read_error));
}
goto out;
}
if (compare && memcmp(address, mem_verify, len_mem) != 0) {
TRACE_DBG("Verify: error memcmp length %" PRId64, length);
set_cmd_error(vcmd,
SCST_LOAD_SENSE(scst_sense_miscompare_error));
SCST_LOAD_SENSE(scst_sense_miscompare_error));
goto out;
}
length -= len_mem;
@@ -1891,8 +1899,8 @@ static void exec_write_same(struct vdisk_cmd *vcmd)
uwhere[0].usdd_lba = cmd->lba;
uwhere[0].usdd_blocks = 1;
uwhere[1].usdd_lba = cmd->lba+1;
uwhere[1].usdd_blocks = blocks-1;
uwhere[1].usdd_lba = cmd->lba + 1;
uwhere[1].usdd_blocks = blocks - 1;
reply->reply_type = SCST_EXEC_REPLY_DO_WRITE_SAME;
reply->ws_descriptors_len = sizeof(uwhere);
+7 -8
View File
@@ -93,15 +93,14 @@ struct vdisk_dev {
struct vdisk_tgt_dev tgt_devs[64];
char *name; /* Name of virtual device,
must be <= SCSI Model + 1 */
/* Name of virtual device, must be <= SCSI Model + 1. */
char *name;
char *file_name; /* File name */
char usn[MAX_USN_LEN];
int type;
};
struct vdisk_cmd
{
struct vdisk_cmd {
int fd;
struct scst_user_get_cmd *cmd;
struct vdisk_dev *dev;
@@ -115,16 +114,16 @@ struct vdisk_cmd
* strict type-checking.. See the
* "unnecessary" pointer comparison.
*/
#define min(x, y) ({ \
#define min(x, y) ({ \
typeof(x) _x = (x); \
typeof(y) _y = (y); \
(void) (&_x == &_y); \
(void)(&_x == &_y); \
_x < _y ? _x : _y; })
#define max(x, y) ({ \
#define max(x, y) ({ \
typeof(x) _x = (x); \
typeof(y) _y = (y); \
(void) (&_x == &_y); \
(void)(&_x == &_y); \
_x > _y ? _x : _y; })
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+4 -2
View File
@@ -1,5 +1,7 @@
/* Copyright (C) 1986 Gary S. Brown. You may use this program, or
code or tables extracted from it, as desired without restriction.*/
/*
* Copyright (C) 1986 Gary S. Brown. You may use this program, or
* code or tables extracted from it, as desired without restriction.
*/
#include "common.h"
+35 -34
View File
@@ -45,11 +45,12 @@ char *app_name;
#if defined(DEBUG) || defined(TRACING)
#ifdef DEBUG
/*#define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF \
& ~TRACE_FUNCTION)
#define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF & \
~TRACE_SCSI & ~TRACE_SCSI_SERIALIZING & ~TRACE_DEBUG)
*/
/*
* #define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF \
* & ~TRACE_FUNCTION)
* #define DEFAULT_LOG_FLAGS (TRACE_ALL & ~TRACE_MEMORY & ~TRACE_BUFF & \
* ~TRACE_SCSI & ~TRACE_SCSI_SERIALIZING & ~TRACE_DEBUG)
*/
#define DEFAULT_LOG_FLAGS (TRACE_OUT_OF_MEM | TRACE_MINOR | TRACE_PID | \
TRACE_FUNCTION | TRACE_SPECIAL | TRACE_MGMT | TRACE_MGMT_DEBUG | \
TRACE_TIME)
@@ -102,8 +103,7 @@ bool use_multi = true;
static void *(*alloc_fn)(size_t size) = align_alloc;
static const struct option long_options[] =
{
static const struct option long_options[] = {
{"block", required_argument, 0, 'b'},
{"threads", required_argument, 0, 'e'},
{"write_through", no_argument, 0, 't'},
@@ -177,7 +177,7 @@ static int scst_calc_block_shift(int sector_size)
if (sector_size == 0)
goto out;
while(1) {
while (1) {
if ((t & 1) != 0)
break;
t >>= 1;
@@ -280,7 +280,7 @@ static int prealloc_buffers(struct vdisk_dev *dev)
if (pre.in.pbuf == 0) {
res = errno;
PRINT_ERROR("Unable to prealloc buffer: %s",
strerror(res));
strerror(res));
goto out;
}
@@ -288,7 +288,7 @@ static int prealloc_buffers(struct vdisk_dev *dev)
if (res != 0) {
res = errno;
PRINT_ERROR("Unable to send prealloced buffer: %s",
strerror(res));
strerror(res));
free((void *)(unsigned long)pre.in.pbuf);
goto out;
}
@@ -318,7 +318,7 @@ static int start(int argc, char **argv)
int j;
optind += 2;
if (optind > (argc-2))
if (optind > (argc - 2))
break;
devs[i].block_size = block_size;
@@ -336,14 +336,14 @@ static int start(int argc, char **argv)
#endif
devs[i].type = TYPE_DISK;
devs[i].name = argv[optind];
devs[i].file_name = argv[optind+1];
devs[i].file_name = argv[optind + 1];
TRACE_DBG("Opening file %s", devs[i].file_name);
fd = open(devs[i].file_name, O_RDONLY|O_LARGEFILE);
fd = open(devs[i].file_name, O_RDONLY | O_LARGEFILE);
if (fd < 0) {
res = -errno;
PRINT_ERROR("Unable to open file %s (%s)", devs[i].file_name,
strerror(-res));
strerror(-res));
continue;
}
@@ -355,11 +355,11 @@ static int start(int argc, char **argv)
PRINT_INFO("%s", " ");
PRINT_INFO("Virtual device \"%s\", path \"%s\", size %" PRId64 "MB, block size %d, nblocks %" PRId64 ", options:",
devs[i].name,
devs[i].file_name, (uint64_t)devs[i].file_size/1024/1024,
devs[i].file_name, (uint64_t)devs[i].file_size / 1024 / 1024,
devs[i].block_size, (uint64_t)devs[i].nblocks);
snprintf(devs[i].usn, sizeof(devs[i].usn), "%" PRIx64,
gen_dev_id_num(&devs[i]));
gen_dev_id_num(&devs[i]));
TRACE_DBG("usn %s", devs[i].usn);
devs[i].scst_usr_fd = open(DEV_USER_PATH DEV_USER_NAME, O_RDWR |
@@ -367,7 +367,7 @@ static int start(int argc, char **argv)
if (devs[i].scst_usr_fd < 0) {
res = -errno;
PRINT_ERROR("Unable to open SCST device %s (%s)",
DEV_USER_PATH DEV_USER_NAME, strerror(-res));
DEV_USER_PATH DEV_USER_NAME, strerror(-res));
goto out_unreg;
}
@@ -448,7 +448,7 @@ static int start(int argc, char **argv)
if (rc != 0) {
res = errno;
PRINT_ERROR("pthread_create() failed: %s",
strerror(res));
strerror(res));
break;
}
}
@@ -463,19 +463,20 @@ static int start(int argc, char **argv)
for (i = 0; i < num_devs; i++) {
int j = 0;
while (thread[i][j] != 0) {
rc = pthread_join(thread[i][j], &rc1);
if (rc != 0) {
res = errno;
PRINT_ERROR("pthread_join() failed: %s",
strerror(res));
strerror(res));
} else if (rc1) {
res = (long)rc1;
PRINT_INFO("Thread %d exited (dev %s), res %lx", j,
devs[i].name, (long)rc1);
devs[i].name, (long)rc1);
} else {
PRINT_INFO("Thread %d exited (dev %s)", j,
devs[i].name);
devs[i].name);
}
j++;
}
@@ -491,7 +492,7 @@ out_unreg:
if (res != 0) {
res = errno;
PRINT_ERROR("Unable to unregister device: %s",
strerror(res));
strerror(res));
/* Close the descriptor even if unregistering failed. */
}
}
@@ -518,7 +519,7 @@ int main(int argc, char **argv)
memset(devs, 0, sizeof(devs));
while ((ch = getopt_long(argc, argv, "+b:e:trongluF:I:cp:f:m:d:vsS:P:hDR:Z:M:",
long_options, &longindex)) >= 0) {
long_options, &longindex)) >= 0) {
switch (ch) {
case 'b':
block_size = atoi(optarg);
@@ -614,7 +615,7 @@ int main(int argc, char **argv)
flush_interval = strtol(optarg, (char **)NULL, 0);
if (flush_interval < 0) {
PRINT_ERROR("Wrong flush interval %d",
flush_interval);
flush_interval);
flush_interval = 0;
}
break;
@@ -634,7 +635,7 @@ int main(int argc, char **argv)
}
}
if (optind > (argc-2))
if (optind > (argc - 2))
goto out_usage;
if (!on_free_cmd_type_set &&
@@ -656,7 +657,7 @@ int main(int argc, char **argv)
if (non_blocking)
PRINT_INFO(" %s", "NON-BLOCKING");
switch(parse_type) {
switch (parse_type) {
case SCST_USER_PARSE_STANDARD:
PRINT_INFO(" %s", "Standard parse");
break;
@@ -670,7 +671,7 @@ int main(int argc, char **argv)
sBUG();
}
switch(on_free_cmd_type) {
switch (on_free_cmd_type) {
case SCST_USER_ON_FREE_CMD_IGNORE:
PRINT_INFO(" %s", "Ignore on_free_cmd");
break;
@@ -681,7 +682,7 @@ int main(int argc, char **argv)
sBUG();
}
switch(memory_reuse_type) {
switch (memory_reuse_type) {
case SCST_USER_MEM_REUSE_ALL:
PRINT_INFO(" %s", "Full memory reuse enabled");
break;
@@ -703,12 +704,12 @@ int main(int argc, char **argv)
if (sgv_single_alloc_pages != 0)
PRINT_INFO(" Use single entry SGV cache with %d pages/entry",
sgv_single_alloc_pages);
sgv_single_alloc_pages);
if (sgv_purge_interval != 0) {
if (sgv_purge_interval > 0)
PRINT_INFO(" Use SGV cache purge interval %d seconds",
sgv_purge_interval);
sgv_purge_interval);
else
PRINT_INFO(" %s", "SGV cache purging disabled");
}
@@ -718,7 +719,7 @@ int main(int argc, char **argv)
if (prealloc_buffers_num > 0 && prealloc_buffer_size > 0)
PRINT_INFO(" Prealloc %d buffers of %dKB",
prealloc_buffers_num, prealloc_buffer_size / 1024);
prealloc_buffers_num, prealloc_buffer_size / 1024);
if (!o_direct_flag && memory_reuse_type == SCST_USER_MEM_NO_REUSE) {
PRINT_INFO(" %s", "Using unaligned buffers");
@@ -745,7 +746,7 @@ int main(int argc, char **argv)
if (res != 0) {
res = errno;
PRINT_ERROR("sigaction() failed: %s",
strerror(res));
strerror(res));
/* don't do anything */
}
@@ -758,7 +759,7 @@ int main(int argc, char **argv)
if (res != 0) {
res = errno;
PRINT_ERROR("sigaction() failed: %s",
strerror(res));
strerror(res));
goto out_done;
}
@@ -766,7 +767,7 @@ int main(int argc, char **argv)
if (res != 0) {
res = errno;
PRINT_ERROR("alarm() failed: %s",
strerror(res));
strerror(res));
goto out_done;
}
}
+2 -2
View File
@@ -41,7 +41,7 @@ static char trace_buf[TRACE_BUF_SIZE];
static pthread_spinlock_t trace_buf_lock;
int debug_print_prefix(unsigned long flags, const char *prefix,
const char *func, int line)
const char *func, int line)
{
int i = 0;
@@ -77,7 +77,7 @@ int debug_print_prefix(unsigned long flags, const char *prefix,
void debug_print_buffer(const void *data, int len)
{
int z, z1, i;
const unsigned char *buf = (const unsigned char *) data;
const unsigned char *buf = (const unsigned char *)data;
if (!buf)
return;
+1 -1
View File
@@ -147,7 +147,7 @@ do { \
} \
} while (0)
#define TRACE_DBG_SPECIAL(args...) TRACE(TRACE_DEBUG|TRACE_SPECIAL, args)
#define TRACE_DBG_SPECIAL(args...) TRACE(TRACE_DEBUG | TRACE_SPECIAL, args)
#define TRACE_MGMT_DBG(format, args...) \
do { \
+10 -8
View File
@@ -51,7 +51,7 @@ char *app_name;
unsigned long trace_flag = DEFAULT_LOG_FLAGS;
#endif /* defined(DEBUG) || defined(TRACING) */
#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
bool log_daemon = true;
int transition_timeout = DEFAULT_TRANSITION_TIME;
@@ -97,7 +97,7 @@ static void stpg_handle_tm_received(const struct scst_event_user *event_user)
}
static int invoke_stpg(const uint8_t *device_name,
const struct scst_event_stpg_descr *descr, pid_t *out_pid)
const struct scst_event_stpg_descr *descr, pid_t *out_pid)
{
char *args[7], *env[7];
int res = 0, ret, i;
@@ -208,13 +208,14 @@ static int wait_until_finished(pid_t pid, unsigned long deadline, int *status, i
static int handle_stpg_received(struct scst_event_user *event_user)
{
const struct scst_event_stpg_payload *p = (struct scst_event_stpg_payload *)event_user->out_event.payload;
const struct scst_event_stpg_payload *p =
(struct scst_event_stpg_payload *)event_user->out_event.payload;
int num, k;
int res = 0;
pid_t pids[p->stpg_descriptors_cnt];
TRACE_DBG("device name %s, stpg_descriptors_cnt %d", p->device_name,
p->stpg_descriptors_cnt);
p->stpg_descriptors_cnt);
for (num = 0; num < p->stpg_descriptors_cnt; num++) {
res = invoke_stpg(p->device_name, &p->stpg_descriptors[num], &pids[num]);
@@ -248,7 +249,7 @@ static int handle_stpg_received(struct scst_event_user *event_user)
rc = killpg(pids[k], SIGTERM);
if (rc < 0)
PRINT_ERROR("Failed to send SIGTERM to child %d (pid %d): %d/%s",
k, pids[k], errno, strerror(errno));
k, pids[k], errno, strerror(errno));
rc = wait_until_finished(pids[k], 1, &status, k);
if (rc != 0)
@@ -479,7 +480,7 @@ int main(int argc, char **argv)
app_name = argv[0];
while ((ch = getopt_long(argc, argv, "+d:fp:t:hv",
long_options, &longindex)) >= 0) {
long_options, &longindex)) >= 0) {
switch (ch) {
case 'p':
stpg_path = optarg;
@@ -487,7 +488,7 @@ int main(int argc, char **argv)
#if defined(DEBUG) || defined(TRACING)
case 'd':
trace_flag = strtol(optarg, (char **)NULL, 0);
break;
break;
#endif
case 'v':
printf("%s version %s\n", app_name, VERSION_STR);
@@ -538,7 +539,8 @@ int main(int argc, char **argv)
int res1 = -1;
close(stpg_init_report_pipe[1]);
if ((unsigned int)read(stpg_init_report_pipe[0], &res1, sizeof(res1)) < sizeof(res1)) {
if ((unsigned int)read(stpg_init_report_pipe[0], &res1, sizeof(res1)) <
sizeof(res1)) {
res = -1;
goto out_done;
} else {