[PATCH] tcm/alua: Cleanups for target_core_alua.c

From: Nicholas A. Bellinger
Date: Wed Sep 08 2010 - 20:03:47 EST


From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>

Greetings all,

This patch contains a number of recommended cleanups to target_core_alua.c from
Konrad Rzeszutek Wilk discussed here: http://marc.info/?l=linux-scsi&m=128398980011957&w=2

This includes the following changes:

*) Rename core_scsi3_emulate_report_target_port_groups() -> core_emulate_report_target_port_groups()
*) Rename core_scsi3_emulate_set_target_port_groups() -> core_emulate_set_target_port_groups()
*) Convert 'return -1' to proper PYX_TRANSPORT in core_emulate_set_target_port_groups()
*) Remove core_alua_state_optimized() NOP
*) Convert CDB usage of 0xa3 -> MAINTENANCE_IN
*) Convert CDB usage of 0xa4 -> MAINTENANCE_OUT
*) Add proper comments and -E* return codes for core_alua_state_check()
*) Add defines for local buffer lengths in core_alua_update_tpg_primary_metadata()
*) Add proper -E* return codes for core_alua_do_port_transition()
*) Add defines for local buffer lengths in core_alua_update_tpg_secondary_metadata()
*) Convert core_alua_allocate_lu_gp() failures to return ERR_PTR()
*) Convert a number of printks() to use the proper dmesg run level
*) Convert core_alua_free_lu_gp(), core_alua_free_lu_gp_mem(), core_alua_free_tg_pt_gp()
and core_alua_free_tg_pt_gp_mem() usage of msleep(10) to cpu_relax().
*) Convert struct t10_alua_lu_gp_member->lu_gp_assoc to bitfield
*) Convert struct t10_alua_tg_pt_gp_member->tg_pt_gp_assoc to bitfield.

Thanks again to Konrad Rzeszutek Wilk for his comments!

Signed-off-by: Nicholas A. Bellinger <nab@xxxxxxxxxxxxxxx>
---
drivers/target/target_core_alua.c | 129 +++++++++++++++++---------------
drivers/target/target_core_alua.h | 14 +++-
drivers/target/target_core_configfs.c | 4 +-
drivers/target/target_core_transport.c | 4 +-
include/target/target_core_base.h | 4 +-
5 files changed, 85 insertions(+), 70 deletions(-)

diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c
index f7ee15d..32f6fb6 100644
--- a/drivers/target/target_core_alua.c
+++ b/drivers/target/target_core_alua.c
@@ -46,14 +46,15 @@
*
* See spc4r17 section 6.27
*/
-int core_scsi3_emulate_report_target_port_groups(struct se_cmd *cmd)
+int core_emulate_report_target_port_groups(struct se_cmd *cmd)
{
struct se_subsystem_dev *su_dev = SE_DEV(cmd)->se_sub_dev;
struct se_port *port;
struct t10_alua_tg_pt_gp *tg_pt_gp;
struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem;
unsigned char *buf = (unsigned char *)T_TASK(cmd)->t_task_buf;
- u32 rd_len = 0, off = 4;
+ u32 rd_len = 0, off = 4; /* Skip over RESERVED area to first
+ Target port group descriptor */

spin_lock(&T10_ALUA(su_dev)->tg_pt_gps_lock);
list_for_each_entry(tg_pt_gp, &T10_ALUA(su_dev)->tg_pt_gps_list,
@@ -135,7 +136,7 @@ int core_scsi3_emulate_report_target_port_groups(struct se_cmd *cmd)
*
* See spc4r17 section 6.35
*/
-int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
+int core_emulate_set_target_port_groups(struct se_cmd *cmd)
{
struct se_device *dev = SE_DEV(cmd);
struct se_subsystem_dev *su_dev = SE_DEV(cmd)->se_sub_dev;
@@ -146,31 +147,31 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
unsigned char *buf = (unsigned char *)T_TASK(cmd)->t_task_buf;
unsigned char *ptr = &buf[4]; /* Skip over RESERVED area in header */
u32 len = 4; /* Skip over RESERVED area in header */
- int alua_access_state, primary = 0, ret;
+ int alua_access_state, primary = 0, rc;
u16 tg_pt_id, rtpi;

if (!(l_port))
- return -1;
+ return PYX_TRANSPORT_LU_COMM_FAILURE;
/*
* Determine if explict ALUA via SET_TARGET_PORT_GROUPS is allowed
* for the local tg_pt_gp.
*/
l_tg_pt_gp_mem = l_port->sep_alua_tg_pt_gp_mem;
if (!(l_tg_pt_gp_mem)) {
- printk(KERN_ERR "Unable to access *l_tg_pt_gp_mem\n");
+ printk(KERN_ERR "Unable to access l_port->sep_alua_tg_pt_gp_mem\n");
return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
}
spin_lock(&l_tg_pt_gp_mem->tg_pt_gp_mem_lock);
l_tg_pt_gp = l_tg_pt_gp_mem->tg_pt_gp;
if (!(l_tg_pt_gp)) {
spin_unlock(&l_tg_pt_gp_mem->tg_pt_gp_mem_lock);
- printk(KERN_ERR "Unable to access *l_l_tg_pt_gp\n");
+ printk(KERN_ERR "Unable to access *l_tg_pt_gp_mem->tg_pt_gp\n");
return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
}
- ret = (l_tg_pt_gp->tg_pt_gp_alua_access_type & TPGS_EXPLICT_ALUA);
+ rc = (l_tg_pt_gp->tg_pt_gp_alua_access_type & TPGS_EXPLICT_ALUA);
spin_unlock(&l_tg_pt_gp_mem->tg_pt_gp_mem_lock);

- if (!(ret)) {
+ if (!(rc)) {
printk(KERN_INFO "Unable to process SET_TARGET_PORT_GROUPS"
" while TPGS_EXPLICT_ALUA is disabled\n");
return PYX_TRANSPORT_UNKNOWN_SAM_OPCODE;
@@ -183,8 +184,8 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
* the state is a primary or secondary target port asymmetric
* access state.
*/
- ret = core_alua_check_transition(alua_access_state, &primary);
- if (ret != 0) {
+ rc = core_alua_check_transition(alua_access_state, &primary);
+ if (rc != 0) {
/*
* If the SET TARGET PORT GROUPS attempts to establish
* an invalid combination of target port asymmetric
@@ -197,7 +198,7 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
*/
return PYX_TRANSPORT_INVALID_PARAMETER_LIST;
}
- ret = -1;
+ rc = -1;
/*
* If the ASYMMETRIC ACCESS STATE field (see table 267)
* specifies a primary target port asymmetric access state,
@@ -232,7 +233,7 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
smp_mb__after_atomic_inc();
spin_unlock(&T10_ALUA(su_dev)->tg_pt_gps_lock);

- ret = core_alua_do_port_transition(tg_pt_gp,
+ rc = core_alua_do_port_transition(tg_pt_gp,
dev, l_port, nacl,
alua_access_state, 1);

@@ -246,9 +247,14 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
* If not matching target port group ID can be located
* throw an exception with ASCQ: INVALID_PARAMETER_LIST
*/
- if (ret != 0)
+ if (rc != 0)
return PYX_TRANSPORT_INVALID_PARAMETER_LIST;
} else {
+ /*
+ * Extact the RELATIVE TARGET PORT IDENTIFIER to identify
+ * the Target Port in question for the the incoming
+ * SET_TARGET_PORT_GROUPS op.
+ */
rtpi = ((ptr[2] << 8) & 0xff);
rtpi |= (ptr[3] & 0xff);
/*
@@ -264,7 +270,7 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
tg_pt_gp_mem = port->sep_alua_tg_pt_gp_mem;
spin_unlock(&dev->se_port_lock);

- ret = core_alua_set_tg_pt_secondary_state(
+ rc = core_alua_set_tg_pt_secondary_state(
tg_pt_gp_mem, port, 1, 1);

spin_lock(&dev->se_port_lock);
@@ -276,7 +282,7 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
* be located, throw an exception with ASCQ:
* INVALID_PARAMETER_LIST
*/
- if (ret != 0)
+ if (rc != 0)
return PYX_TRANSPORT_INVALID_PARAMETER_LIST;
}

@@ -287,18 +293,6 @@ int core_scsi3_emulate_set_target_port_groups(struct se_cmd *cmd)
return 0;
}

-static inline int core_alua_state_optimized(
- struct se_cmd *cmd,
- unsigned char *cdb,
- u8 *alua_ascq)
-{
- /*
- * For the Optimized ALUA access state case, we want to process the
- * incoming fabric cmd ASAP..
- */
- return 0;
-}
-
static inline int core_alua_state_nonoptimized(
struct se_cmd *cmd,
unsigned char *cdb,
@@ -333,7 +327,7 @@ static inline int core_alua_state_standby(
case REPORT_LUNS:
case RECEIVE_DIAGNOSTIC:
case SEND_DIAGNOSTIC:
- case 0xa3:
+ case MAINTENANCE_IN:
switch (cdb[1]) {
case MI_REPORT_TARGET_PGS:
return 0;
@@ -341,7 +335,7 @@ static inline int core_alua_state_standby(
*alua_ascq = ASCQ_04H_ALUA_TG_PT_STANDBY;
return 1;
}
- case 0xa4:
+ case MAINTENANCE_OUT:
switch (cdb[1]) {
case MO_SET_TARGET_PGS:
return 0;
@@ -375,7 +369,7 @@ static inline int core_alua_state_unavailable(
switch (cdb[0]) {
case INQUIRY:
case REPORT_LUNS:
- case 0xa3:
+ case MAINTENANCE_IN:
switch (cdb[1]) {
case MI_REPORT_TARGET_PGS:
return 0;
@@ -383,7 +377,7 @@ static inline int core_alua_state_unavailable(
*alua_ascq = ASCQ_04H_ALUA_TG_PT_UNAVAILABLE;
return 1;
}
- case 0xa4:
+ case MAINTENANCE_OUT:
switch (cdb[1]) {
case MO_SET_TARGET_PGS:
return 0;
@@ -415,7 +409,7 @@ static inline int core_alua_state_transition(
switch (cdb[0]) {
case INQUIRY:
case REPORT_LUNS:
- case 0xa3:
+ case MAINTENANCE_IN:
switch (cdb[1]) {
case MI_REPORT_TARGET_PGS:
return 0;
@@ -437,6 +431,8 @@ static inline int core_alua_state_transition(

/*
* Used for alua_type SPC_ALUA_PASSTHROUGH and SPC2_ALUA_DISABLED
+ * in transport_cmd_sequencer(). This function is assigned to
+ * struct t10_alua *->state_check() in core_setup_alua()
*/
int core_alua_state_check_nop(
struct se_cmd *cmd,
@@ -447,7 +443,16 @@ int core_alua_state_check_nop(
}

/*
- * Used for alua_type SPC3_ALUA_EMULATED
+ * Used for alua_type SPC3_ALUA_EMULATED in transport_cmd_sequencer().
+ * This function is assigned to struct t10_alua *->state_check() in
+ * core_setup_alua()
+ *
+ * Also, this function can return three different return codes to
+ * signal transport_generic_cmd_sequencer()
+ *
+ * return 1: Is used to signal LUN not accecsable, and TGCS_CHECK_CONDITION_NOT_READY
+ * return 0: Used to signal success
+ * reutrn -1: Used to signal failure, and TGCS_INVALID_CDB_FIELD
*/
int core_alua_state_check(
struct se_cmd *cmd,
@@ -488,9 +493,11 @@ int core_alua_state_check(
/*
* Process ALUA_ACCESS_STATE_ACTIVE_OPTMIZED in a seperate conditional
* statement so the complier knows explictly to check this case first.
+ * For the Optimized ALUA access state case, we want to process the
+ * incoming fabric cmd ASAP..
*/
if (out_alua_state == ALUA_ACCESS_STATE_ACTIVE_OPTMIZED)
- return core_alua_state_optimized(cmd, cdb, alua_ascq);
+ return 0;

switch (out_alua_state) {
case ALUA_ACCESS_STATE_ACTIVE_NON_OPTIMIZED:
@@ -629,7 +636,7 @@ int core_alua_write_tpg_metadata(
if (IS_ERR(file) || !file || !file->f_dentry) {
printk(KERN_ERR "filp_open(%s) for ALUA metadata failed\n",
path);
- return -1;
+ return -ENODEV;
}

iov[0].iov_base = &md_buf[0];
@@ -643,7 +650,7 @@ int core_alua_write_tpg_metadata(
if (ret < 0) {
printk(KERN_ERR "Error writing ALUA metadata file: %s\n", path);
filp_close(file, NULL);
- return -1;
+ return -EIO;
}
filp_close(file, NULL);

@@ -660,10 +667,10 @@ int core_alua_update_tpg_primary_metadata(
{
struct se_subsystem_dev *su_dev = tg_pt_gp->tg_pt_gp_su_dev;
struct t10_wwn *wwn = &su_dev->t10_wwn;
- char path[512];
+ char path[ALUA_METADATA_PATH_LEN];
int len;

- memset(path, 0, 512);
+ memset(path, 0, ALUA_METADATA_PATH_LEN);

len = snprintf(md_buf, tg_pt_gp->tg_pt_gp_md_buf_len,
"tg_pt_gp_id=%hu\n"
@@ -672,8 +679,8 @@ int core_alua_update_tpg_primary_metadata(
tg_pt_gp->tg_pt_gp_id, primary_state,
tg_pt_gp->tg_pt_gp_alua_access_status);

- snprintf(path, 512, "/var/target/alua/tpgs_%s/%s",
- &wwn->unit_serial[0],
+ snprintf(path, ALUA_METADATA_PATH_LEN,
+ "/var/target/alua/tpgs_%s/%s", &wwn->unit_serial[0],
config_item_name(&tg_pt_gp->tg_pt_gp_group.cg_item));

return core_alua_write_tpg_metadata(path, md_buf, len);
@@ -808,12 +815,12 @@ int core_alua_do_port_transition(
int primary;

if (core_alua_check_transition(new_state, &primary) != 0)
- return -1;
+ return -EINVAL;

md_buf = kzalloc(l_tg_pt_gp->tg_pt_gp_md_buf_len, GFP_KERNEL);
if (!(md_buf)) {
printk("Unable to allocate buf for ALUA metadata\n");
- return -1;
+ return -ENOMEM;
}

local_lu_gp_mem = l_dev->dev_alua_lu_gp_mem;
@@ -923,17 +930,17 @@ int core_alua_update_tpg_secondary_metadata(
u32 md_buf_len)
{
struct se_portal_group *se_tpg = port->sep_tpg;
- char path[512], wwn[1024];
+ char path[ALUA_METADATA_PATH_LEN], wwn[ALUA_SECONDARY_METADATA_WWN_LEN];
int len;

- memset(path, 0, 512);
- memset(wwn, 0, 1024);
+ memset(path, 0, ALUA_METADATA_PATH_LEN);
+ memset(wwn, 0, ALUA_SECONDARY_METADATA_WWN_LEN);

- len = snprintf(wwn, 512, "%s",
+ len = snprintf(wwn, ALUA_SECONDARY_METADATA_WWN_LEN, "%s",
TPG_TFO(se_tpg)->tpg_get_wwn(se_tpg));

if (TPG_TFO(se_tpg)->tpg_get_tag != NULL)
- snprintf(wwn+len, 1024-len, "+%hu",
+ snprintf(wwn+len, ALUA_SECONDARY_METADATA_WWN_LEN-len, "+%hu",
TPG_TFO(se_tpg)->tpg_get_tag(se_tpg));

len = snprintf(md_buf, md_buf_len, "alua_tg_pt_offline=%d\n"
@@ -941,7 +948,7 @@ int core_alua_update_tpg_secondary_metadata(
atomic_read(&port->sep_tg_pt_secondary_offline),
port->sep_tg_pt_secondary_stat);

- snprintf(path, 512, "/var/target/alua/%s/%s/lun_%u",
+ snprintf(path, ALUA_METADATA_PATH_LEN, "/var/target/alua/%s/%s/lun_%u",
TPG_TFO(se_tpg)->get_fabric_name(), wwn,
port->sep_lun->unpacked_lun);

@@ -1023,7 +1030,7 @@ struct t10_alua_lu_gp *core_alua_allocate_lu_gp(const char *name, int def_group)
lu_gp = kmem_cache_zalloc(t10_alua_lu_gp_cache, GFP_KERNEL);
if (!(lu_gp)) {
printk(KERN_ERR "Unable to allocate struct t10_alua_lu_gp\n");
- return NULL;
+ return ERR_PTR(-ENOMEM);;
}
INIT_LIST_HEAD(&lu_gp->lu_gp_list);
INIT_LIST_HEAD(&lu_gp->lu_gp_mem_list);
@@ -1047,7 +1054,7 @@ int core_alua_set_lu_gp_id(struct t10_alua_lu_gp *lu_gp, u16 lu_gp_id)
* The lu_gp->lu_gp_id may only be set once..
*/
if (lu_gp->lu_gp_valid_id) {
- printk(KERN_ERR "ALUA LU Group already has a valid ID,"
+ printk(KERN_WARNING "ALUA LU Group already has a valid ID,"
" ignoring request\n");
return -1;
}
@@ -1069,7 +1076,7 @@ again:
if (!(lu_gp_id))
goto again;

- printk(KERN_ERR "ALUA Logical Unit Group ID: %hu"
+ printk(KERN_WARNING "ALUA Logical Unit Group ID: %hu"
" already exists, ignoring request\n",
lu_gp_id);
spin_unlock(&se_global->lu_gps_lock);
@@ -1128,7 +1135,7 @@ void core_alua_free_lu_gp(struct t10_alua_lu_gp *lu_gp)
* released with core_alua_put_lu_gp_from_name()
*/
while (atomic_read(&lu_gp->lu_gp_ref_cnt))
- msleep(10);
+ cpu_relax();
/*
* Release reference to struct t10_alua_lu_gp * from all associated
* struct se_device.
@@ -1181,7 +1188,7 @@ void core_alua_free_lu_gp_mem(struct se_device *dev)
return;

while (atomic_read(&lu_gp_mem->lu_gp_mem_ref_cnt))
- msleep(10);
+ cpu_relax();

spin_lock(&lu_gp_mem->lu_gp_mem_lock);
lu_gp = lu_gp_mem->lu_gp;
@@ -1315,7 +1322,7 @@ int core_alua_set_tg_pt_gp_id(
* The tg_pt_gp->tg_pt_gp_id may only be set once..
*/
if (tg_pt_gp->tg_pt_gp_valid_id) {
- printk(KERN_ERR "ALUA TG PT Group already has a valid ID,"
+ printk(KERN_WARNING "ALUA TG PT Group already has a valid ID,"
" ignoring request\n");
return -1;
}
@@ -1401,7 +1408,7 @@ void core_alua_free_tg_pt_gp(
* to be released with core_alua_put_tg_pt_gp_from_name().
*/
while (atomic_read(&tg_pt_gp->tg_pt_gp_ref_cnt))
- msleep(10);
+ cpu_relax();
/*
* Release reference to struct t10_alua_tg_pt_gp from all associated
* struct se_port.
@@ -1454,7 +1461,7 @@ void core_alua_free_tg_pt_gp_mem(struct se_port *port)
return;

while (atomic_read(&tg_pt_gp_mem->tg_pt_gp_mem_ref_cnt))
- msleep(10);
+ cpu_relax();

spin_lock(&tg_pt_gp_mem->tg_pt_gp_mem_lock);
tg_pt_gp = tg_pt_gp_mem->tg_pt_gp;
@@ -1667,8 +1674,8 @@ ssize_t core_alua_store_tg_pt_gp_info(
*/
__core_alua_attach_tg_pt_gp_mem(tg_pt_gp_mem, tg_pt_gp_new);
spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock);
- printk("Target_Core_ConfigFS: %s %s/tpgt_%hu/%s to ALUA Target Port"
- " Group: alua/%s, ID: %hu\n", (move) ?
+ printk(KERN_INFO "Target_Core_ConfigFS: %s %s/tpgt_%hu/%s to ALUA"
+ " Target Port Group: alua/%s, ID: %hu\n", (move) ?
"Moving" : "Adding", TPG_TFO(tpg)->tpg_get_wwn(tpg),
TPG_TFO(tpg)->tpg_get_tag(tpg),
config_item_name(&lun->lun_group.cg_item),
@@ -1978,8 +1985,8 @@ int core_setup_alua(struct se_device *dev, int force_pt)
} else {
alua->alua_type = SPC2_ALUA_DISABLED;
alua->alua_state_check = &core_alua_state_check_nop;
- printk("%s: Disabling ALUA Emulation for SPC-2 device\n",
- TRANSPORT(dev)->name);
+ printk(KERN_INFO "%s: Disabling ALUA Emulation for SPC-2"
+ " device\n", TRANSPORT(dev)->name);
}

return 0;
diff --git a/drivers/target/target_core_alua.h b/drivers/target/target_core_alua.h
index 9362643..827f425 100644
--- a/drivers/target/target_core_alua.h
+++ b/drivers/target/target_core_alua.h
@@ -51,7 +51,15 @@
*/
#define ALUA_DEFAULT_TRANS_DELAY_MSECS 0
#define ALUA_MAX_TRANS_DELAY_MSECS 30000 /* 30 seconds */
-
+/*
+ * Used by core_alua_update_tpg_primary_metadata() and
+ * core_alua_update_tpg_secondary_metadata()
+ */
+#define ALUA_METADATA_PATH_LEN 512
+/*
+ * Used by core_alua_update_tpg_secondary_metadata()
+ */
+#define ALUA_SECONDARY_METADATA_WWN_LEN 256

extern struct se_global *se_global;

@@ -60,8 +68,8 @@ extern struct kmem_cache *t10_alua_lu_gp_mem_cache;
extern struct kmem_cache *t10_alua_tg_pt_gp_cache;
extern struct kmem_cache *t10_alua_tg_pt_gp_mem_cache;

-extern int core_scsi3_emulate_report_target_port_groups(struct se_cmd *);
-extern int core_scsi3_emulate_set_target_port_groups(struct se_cmd *);
+extern int core_emulate_report_target_port_groups(struct se_cmd *);
+extern int core_emulate_set_target_port_groups(struct se_cmd *);
extern int core_alua_check_transition(int, int *);
extern int core_alua_check_nonop_delay(struct se_cmd *);
extern int core_alua_do_transition_tg_pt(struct t10_alua_tg_pt_gp *,
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index 1d5ea7d..f66ac33 100644
--- a/drivers/target/target_core_configfs.c
+++ b/drivers/target/target_core_configfs.c
@@ -2250,7 +2250,7 @@ static struct config_group *target_core_alua_create_lu_gp(
struct config_item *alua_lu_gp_ci = NULL;

lu_gp = core_alua_allocate_lu_gp(name, 0);
- if (!(lu_gp))
+ if (IS_ERR(lu_gp))
return NULL;

alua_lu_gp_cg = &lu_gp->lu_gp_group;
@@ -3199,7 +3199,7 @@ int target_core_init_configfs(void)
* Add core/alua/lu_gps/default_lu_gp
*/
lu_gp = core_alua_allocate_lu_gp("default_lu_gp", 1);
- if (!(lu_gp))
+ if (IS_ERR(lu_gp))
goto out_global;

lu_gp_cg = &se_global->alua_lu_gps_group;
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index b53ca99..9e7582b 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -5447,7 +5447,7 @@ static int transport_generic_cmd_sequencer(
cmd->transport_emulate_cdb =
(T10_ALUA(su_dev)->alua_type ==
SPC3_ALUA_EMULATED) ?
- &core_scsi3_emulate_report_target_port_groups :
+ &core_emulate_report_target_port_groups :
NULL;
}
size = (cdb[6] << 24) | (cdb[7] << 16) |
@@ -5547,7 +5547,7 @@ static int transport_generic_cmd_sequencer(
cmd->transport_emulate_cdb =
(T10_ALUA(su_dev)->alua_type ==
SPC3_ALUA_EMULATED) ?
- &core_scsi3_emulate_set_target_port_groups :
+ &core_emulate_set_target_port_groups :
NULL;
}

diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index 70a67e1..3c14037 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -239,7 +239,7 @@ struct t10_alua_lu_gp {
} ____cacheline_aligned;

struct t10_alua_lu_gp_member {
- int lu_gp_assoc;
+ int lu_gp_assoc:1;
atomic_t lu_gp_mem_ref_cnt;
spinlock_t lu_gp_mem_lock;
struct t10_alua_lu_gp *lu_gp;
@@ -271,7 +271,7 @@ struct t10_alua_tg_pt_gp {
} ____cacheline_aligned;

struct t10_alua_tg_pt_gp_member {
- int tg_pt_gp_assoc;
+ int tg_pt_gp_assoc:1;
atomic_t tg_pt_gp_mem_ref_cnt;
spinlock_t tg_pt_gp_mem_lock;
struct t10_alua_tg_pt_gp *tg_pt_gp;
--
1.5.6.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/