Skip to content

Commit b0a382c

Browse files
hreineckeNicholas Bellinger
authored andcommitted
target_core_configfs: split up ALUA supported states
Split up the various ALUA states into individual attributes to make parsing easier and adhere to the one value per attribute sysfs principle. (nab: Convert strict_strtoul -> kstrtoul usage) Signed-off-by: Hannes Reinecke <[email protected]>
1 parent 6be526c commit b0a382c

File tree

1 file changed

+84
-43
lines changed

1 file changed

+84
-43
lines changed

drivers/target/target_core_configfs.c

Lines changed: 84 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,51 +2133,86 @@ SE_DEV_ALUA_TG_PT_ATTR(alua_access_type, S_IRUGO | S_IWUSR);
21332133
/*
21342134
* alua_supported_states
21352135
*/
2136-
static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_supported_states(
2137-
struct t10_alua_tg_pt_gp *tg_pt_gp,
2138-
char *page)
2139-
{
2140-
return sprintf(page, "%02x\n",
2141-
tg_pt_gp->tg_pt_gp_alua_supported_states);
2142-
}
2143-
2144-
static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_supported_states(
2145-
struct t10_alua_tg_pt_gp *tg_pt_gp,
2146-
const char *page,
2147-
size_t count)
2148-
{
2149-
unsigned long tmp;
2150-
int new_states, valid_states, ret;
21512136

2152-
if (!tg_pt_gp->tg_pt_gp_valid_id) {
2153-
pr_err("Unable to do set supported ALUA states on non"
2154-
" valid tg_pt_gp ID: %hu\n",
2155-
tg_pt_gp->tg_pt_gp_valid_id);
2156-
return -EINVAL;
2157-
}
2158-
2159-
ret = strict_strtoul(page, 0, &tmp);
2160-
if (ret < 0) {
2161-
pr_err("Unable to extract new supported ALUA states"
2162-
" from %s\n", page);
2163-
return -EINVAL;
2164-
}
2165-
new_states = (int)tmp;
2166-
valid_states = ALUA_T_SUP | ALUA_O_SUP | ALUA_LBD_SUP | \
2167-
ALUA_U_SUP | ALUA_S_SUP | ALUA_AN_SUP | ALUA_AO_SUP;
2168-
2169-
2170-
if (new_states & ~valid_states) {
2171-
pr_err("Illegal supported ALUA states: 0x%02x\n",
2172-
new_states);
2173-
return -EINVAL;
2174-
}
2175-
2176-
tg_pt_gp->tg_pt_gp_alua_supported_states = new_states;
2177-
return count;
2137+
#define SE_DEV_ALUA_SUPPORT_STATE_SHOW(_name, _var, _bit) \
2138+
static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_support_##_name( \
2139+
struct t10_alua_tg_pt_gp *t, char *p) \
2140+
{ \
2141+
return sprintf(p, "%d\n", !!(t->_var & _bit)); \
21782142
}
21792143

2180-
SE_DEV_ALUA_TG_PT_ATTR(alua_supported_states, S_IRUGO | S_IWUSR);
2144+
#define SE_DEV_ALUA_SUPPORT_STATE_STORE(_name, _var, _bit) \
2145+
static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\
2146+
struct t10_alua_tg_pt_gp *t, const char *p, size_t c) \
2147+
{ \
2148+
unsigned long tmp; \
2149+
int ret; \
2150+
\
2151+
if (!t->tg_pt_gp_valid_id) { \
2152+
pr_err("Unable to do set ##_name ALUA state on non" \
2153+
" valid tg_pt_gp ID: %hu\n", \
2154+
t->tg_pt_gp_valid_id); \
2155+
return -EINVAL; \
2156+
} \
2157+
\
2158+
ret = kstrtoul(p, 0, &tmp); \
2159+
if (ret < 0) { \
2160+
pr_err("Invalid value '%s', must be '0' or '1'\n", p); \
2161+
return -EINVAL; \
2162+
} \
2163+
if (tmp > 1) { \
2164+
pr_err("Invalid value '%ld', must be '0' or '1'\n", tmp); \
2165+
return -EINVAL; \
2166+
} \
2167+
if (!tmp) \
2168+
t->_var |= _bit; \
2169+
else \
2170+
t->_var &= ~_bit; \
2171+
\
2172+
return c; \
2173+
}
2174+
2175+
SE_DEV_ALUA_SUPPORT_STATE_SHOW(transitioning,
2176+
tg_pt_gp_alua_supported_states, ALUA_T_SUP);
2177+
SE_DEV_ALUA_SUPPORT_STATE_STORE(transitioning,
2178+
tg_pt_gp_alua_supported_states, ALUA_T_SUP);
2179+
SE_DEV_ALUA_TG_PT_ATTR(alua_support_transitioning, S_IRUGO | S_IWUSR);
2180+
2181+
SE_DEV_ALUA_SUPPORT_STATE_SHOW(offline,
2182+
tg_pt_gp_alua_supported_states, ALUA_O_SUP);
2183+
SE_DEV_ALUA_SUPPORT_STATE_STORE(offline,
2184+
tg_pt_gp_alua_supported_states, ALUA_O_SUP);
2185+
SE_DEV_ALUA_TG_PT_ATTR(alua_support_offline, S_IRUGO | S_IWUSR);
2186+
2187+
SE_DEV_ALUA_SUPPORT_STATE_SHOW(lba_dependent,
2188+
tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
2189+
SE_DEV_ALUA_SUPPORT_STATE_STORE(lba_dependent,
2190+
tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
2191+
SE_DEV_ALUA_TG_PT_ATTR(alua_support_lba_dependent, S_IRUGO | S_IWUSR);
2192+
2193+
SE_DEV_ALUA_SUPPORT_STATE_SHOW(unavailable,
2194+
tg_pt_gp_alua_supported_states, ALUA_U_SUP);
2195+
SE_DEV_ALUA_SUPPORT_STATE_STORE(unavailable,
2196+
tg_pt_gp_alua_supported_states, ALUA_U_SUP);
2197+
SE_DEV_ALUA_TG_PT_ATTR(alua_support_unavailable, S_IRUGO | S_IWUSR);
2198+
2199+
SE_DEV_ALUA_SUPPORT_STATE_SHOW(standby,
2200+
tg_pt_gp_alua_supported_states, ALUA_S_SUP);
2201+
SE_DEV_ALUA_SUPPORT_STATE_STORE(standby,
2202+
tg_pt_gp_alua_supported_states, ALUA_S_SUP);
2203+
SE_DEV_ALUA_TG_PT_ATTR(alua_support_standby, S_IRUGO | S_IWUSR);
2204+
2205+
SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_optimized,
2206+
tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
2207+
SE_DEV_ALUA_SUPPORT_STATE_STORE(active_optimized,
2208+
tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
2209+
SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_optimized, S_IRUGO | S_IWUSR);
2210+
2211+
SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_nonoptimized,
2212+
tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
2213+
SE_DEV_ALUA_SUPPORT_STATE_STORE(active_nonoptimized,
2214+
tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
2215+
SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_nonoptimized, S_IRUGO | S_IWUSR);
21812216

21822217
/*
21832218
* alua_write_metadata
@@ -2399,7 +2434,13 @@ static struct configfs_attribute *target_core_alua_tg_pt_gp_attrs[] = {
23992434
&target_core_alua_tg_pt_gp_alua_access_state.attr,
24002435
&target_core_alua_tg_pt_gp_alua_access_status.attr,
24012436
&target_core_alua_tg_pt_gp_alua_access_type.attr,
2402-
&target_core_alua_tg_pt_gp_alua_supported_states.attr,
2437+
&target_core_alua_tg_pt_gp_alua_support_transitioning.attr,
2438+
&target_core_alua_tg_pt_gp_alua_support_offline.attr,
2439+
&target_core_alua_tg_pt_gp_alua_support_lba_dependent.attr,
2440+
&target_core_alua_tg_pt_gp_alua_support_unavailable.attr,
2441+
&target_core_alua_tg_pt_gp_alua_support_standby.attr,
2442+
&target_core_alua_tg_pt_gp_alua_support_active_nonoptimized.attr,
2443+
&target_core_alua_tg_pt_gp_alua_support_active_optimized.attr,
24032444
&target_core_alua_tg_pt_gp_alua_write_metadata.attr,
24042445
&target_core_alua_tg_pt_gp_nonop_delay_msecs.attr,
24052446
&target_core_alua_tg_pt_gp_trans_delay_msecs.attr,

0 commit comments

Comments
 (0)