forked from Minki/linux
target: Remove enum transport_lunflags_table
se_dev_entry.lun_flags and se_lun.lun_access are only used for keeping track of read-write vs. read-only state. Since this is an either/or thing we can represent it as bool, and remove the unneeded enum transport_lunflags_table, which is left over from when there were more flags. Change code that uses this enum to just use true/false, and make it clear through variable and param names that true means read-only, false means read-write. Signed-off-by: Andy Grover <agrover@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
07b6319687
commit
03a68b44fa
@ -86,7 +86,7 @@ transport_lookup_cmd_lun(struct se_cmd *se_cmd, u64 unpacked_lun)
|
|||||||
se_cmd->lun_ref_active = true;
|
se_cmd->lun_ref_active = true;
|
||||||
|
|
||||||
if ((se_cmd->data_direction == DMA_TO_DEVICE) &&
|
if ((se_cmd->data_direction == DMA_TO_DEVICE) &&
|
||||||
(deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY)) {
|
deve->lun_access_ro) {
|
||||||
pr_err("TARGET_CORE[%s]: Detected WRITE_PROTECTED LUN"
|
pr_err("TARGET_CORE[%s]: Detected WRITE_PROTECTED LUN"
|
||||||
" Access for 0x%08llx\n",
|
" Access for 0x%08llx\n",
|
||||||
se_cmd->se_tfo->get_fabric_name(),
|
se_cmd->se_tfo->get_fabric_name(),
|
||||||
@ -199,7 +199,7 @@ bool target_lun_is_rdonly(struct se_cmd *cmd)
|
|||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
deve = target_nacl_find_deve(se_sess->se_node_acl, cmd->orig_fe_lun);
|
deve = target_nacl_find_deve(se_sess->se_node_acl, cmd->orig_fe_lun);
|
||||||
ret = (deve && deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY);
|
ret = deve && deve->lun_access_ro;
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -258,22 +258,15 @@ void core_free_device_list_for_node(
|
|||||||
|
|
||||||
void core_update_device_list_access(
|
void core_update_device_list_access(
|
||||||
u64 mapped_lun,
|
u64 mapped_lun,
|
||||||
u32 lun_access,
|
bool lun_access_ro,
|
||||||
struct se_node_acl *nacl)
|
struct se_node_acl *nacl)
|
||||||
{
|
{
|
||||||
struct se_dev_entry *deve;
|
struct se_dev_entry *deve;
|
||||||
|
|
||||||
mutex_lock(&nacl->lun_entry_mutex);
|
mutex_lock(&nacl->lun_entry_mutex);
|
||||||
deve = target_nacl_find_deve(nacl, mapped_lun);
|
deve = target_nacl_find_deve(nacl, mapped_lun);
|
||||||
if (deve) {
|
if (deve)
|
||||||
if (lun_access & TRANSPORT_LUNFLAGS_READ_WRITE) {
|
deve->lun_access_ro = lun_access_ro;
|
||||||
deve->lun_flags &= ~TRANSPORT_LUNFLAGS_READ_ONLY;
|
|
||||||
deve->lun_flags |= TRANSPORT_LUNFLAGS_READ_WRITE;
|
|
||||||
} else {
|
|
||||||
deve->lun_flags &= ~TRANSPORT_LUNFLAGS_READ_WRITE;
|
|
||||||
deve->lun_flags |= TRANSPORT_LUNFLAGS_READ_ONLY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mutex_unlock(&nacl->lun_entry_mutex);
|
mutex_unlock(&nacl->lun_entry_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,7 +312,7 @@ int core_enable_device_list_for_node(
|
|||||||
struct se_lun *lun,
|
struct se_lun *lun,
|
||||||
struct se_lun_acl *lun_acl,
|
struct se_lun_acl *lun_acl,
|
||||||
u64 mapped_lun,
|
u64 mapped_lun,
|
||||||
u32 lun_access,
|
bool lun_access_ro,
|
||||||
struct se_node_acl *nacl,
|
struct se_node_acl *nacl,
|
||||||
struct se_portal_group *tpg)
|
struct se_portal_group *tpg)
|
||||||
{
|
{
|
||||||
@ -340,11 +333,7 @@ int core_enable_device_list_for_node(
|
|||||||
kref_init(&new->pr_kref);
|
kref_init(&new->pr_kref);
|
||||||
init_completion(&new->pr_comp);
|
init_completion(&new->pr_comp);
|
||||||
|
|
||||||
if (lun_access & TRANSPORT_LUNFLAGS_READ_WRITE)
|
new->lun_access_ro = lun_access_ro;
|
||||||
new->lun_flags |= TRANSPORT_LUNFLAGS_READ_WRITE;
|
|
||||||
else
|
|
||||||
new->lun_flags |= TRANSPORT_LUNFLAGS_READ_ONLY;
|
|
||||||
|
|
||||||
new->creation_time = get_jiffies_64();
|
new->creation_time = get_jiffies_64();
|
||||||
new->attach_count++;
|
new->attach_count++;
|
||||||
|
|
||||||
@ -433,7 +422,7 @@ void core_disable_device_list_for_node(
|
|||||||
|
|
||||||
hlist_del_rcu(&orig->link);
|
hlist_del_rcu(&orig->link);
|
||||||
clear_bit(DEF_PR_REG_ACTIVE, &orig->deve_flags);
|
clear_bit(DEF_PR_REG_ACTIVE, &orig->deve_flags);
|
||||||
orig->lun_flags = 0;
|
orig->lun_access_ro = false;
|
||||||
orig->creation_time = 0;
|
orig->creation_time = 0;
|
||||||
orig->attach_count--;
|
orig->attach_count--;
|
||||||
/*
|
/*
|
||||||
@ -558,8 +547,7 @@ int core_dev_add_lun(
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = core_tpg_add_lun(tpg, lun,
|
rc = core_tpg_add_lun(tpg, lun, false, dev);
|
||||||
TRANSPORT_LUNFLAGS_READ_WRITE, dev);
|
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
@ -635,7 +623,7 @@ int core_dev_add_initiator_node_lun_acl(
|
|||||||
struct se_portal_group *tpg,
|
struct se_portal_group *tpg,
|
||||||
struct se_lun_acl *lacl,
|
struct se_lun_acl *lacl,
|
||||||
struct se_lun *lun,
|
struct se_lun *lun,
|
||||||
u32 lun_access)
|
bool lun_access_ro)
|
||||||
{
|
{
|
||||||
struct se_node_acl *nacl = lacl->se_lun_nacl;
|
struct se_node_acl *nacl = lacl->se_lun_nacl;
|
||||||
/*
|
/*
|
||||||
@ -647,20 +635,19 @@ int core_dev_add_initiator_node_lun_acl(
|
|||||||
if (!nacl)
|
if (!nacl)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if ((lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) &&
|
if (lun->lun_access_ro)
|
||||||
(lun_access & TRANSPORT_LUNFLAGS_READ_WRITE))
|
lun_access_ro = true;
|
||||||
lun_access = TRANSPORT_LUNFLAGS_READ_ONLY;
|
|
||||||
|
|
||||||
lacl->se_lun = lun;
|
lacl->se_lun = lun;
|
||||||
|
|
||||||
if (core_enable_device_list_for_node(lun, lacl, lacl->mapped_lun,
|
if (core_enable_device_list_for_node(lun, lacl, lacl->mapped_lun,
|
||||||
lun_access, nacl, tpg) < 0)
|
lun_access_ro, nacl, tpg) < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
pr_debug("%s_TPG[%hu]_LUN[%llu->%llu] - Added %s ACL for "
|
pr_debug("%s_TPG[%hu]_LUN[%llu->%llu] - Added %s ACL for "
|
||||||
" InitiatorNode: %s\n", tpg->se_tpg_tfo->get_fabric_name(),
|
" InitiatorNode: %s\n", tpg->se_tpg_tfo->get_fabric_name(),
|
||||||
tpg->se_tpg_tfo->tpg_get_tag(tpg), lun->unpacked_lun, lacl->mapped_lun,
|
tpg->se_tpg_tfo->tpg_get_tag(tpg), lun->unpacked_lun, lacl->mapped_lun,
|
||||||
(lun_access & TRANSPORT_LUNFLAGS_READ_WRITE) ? "RW" : "RO",
|
lun_access_ro ? "RO" : "RW",
|
||||||
nacl->initiatorname);
|
nacl->initiatorname);
|
||||||
/*
|
/*
|
||||||
* Check to see if there are any existing persistent reservation APTPL
|
* Check to see if there are any existing persistent reservation APTPL
|
||||||
|
@ -78,7 +78,7 @@ static int target_fabric_mappedlun_link(
|
|||||||
struct se_lun_acl, se_lun_group);
|
struct se_lun_acl, se_lun_group);
|
||||||
struct se_portal_group *se_tpg;
|
struct se_portal_group *se_tpg;
|
||||||
struct config_item *nacl_ci, *tpg_ci, *tpg_ci_s, *wwn_ci, *wwn_ci_s;
|
struct config_item *nacl_ci, *tpg_ci, *tpg_ci_s, *wwn_ci, *wwn_ci_s;
|
||||||
int lun_access;
|
bool lun_access_ro;
|
||||||
|
|
||||||
if (lun->lun_link_magic != SE_LUN_LINK_MAGIC) {
|
if (lun->lun_link_magic != SE_LUN_LINK_MAGIC) {
|
||||||
pr_err("Bad lun->lun_link_magic, not a valid lun_ci pointer:"
|
pr_err("Bad lun->lun_link_magic, not a valid lun_ci pointer:"
|
||||||
@ -115,19 +115,18 @@ static int target_fabric_mappedlun_link(
|
|||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* If this struct se_node_acl was dynamically generated with
|
* If this struct se_node_acl was dynamically generated with
|
||||||
* tpg_1/attrib/generate_node_acls=1, use the existing deve->lun_flags,
|
* tpg_1/attrib/generate_node_acls=1, use the existing
|
||||||
* which be will write protected (READ-ONLY) when
|
* deve->lun_access_ro value, which will be true when
|
||||||
* tpg_1/attrib/demo_mode_write_protect=1
|
* tpg_1/attrib/demo_mode_write_protect=1
|
||||||
*/
|
*/
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
deve = target_nacl_find_deve(lacl->se_lun_nacl, lacl->mapped_lun);
|
deve = target_nacl_find_deve(lacl->se_lun_nacl, lacl->mapped_lun);
|
||||||
if (deve)
|
if (deve)
|
||||||
lun_access = deve->lun_flags;
|
lun_access_ro = deve->lun_access_ro;
|
||||||
else
|
else
|
||||||
lun_access =
|
lun_access_ro =
|
||||||
(se_tpg->se_tpg_tfo->tpg_check_prod_mode_write_protect(
|
(se_tpg->se_tpg_tfo->tpg_check_prod_mode_write_protect(
|
||||||
se_tpg)) ? TRANSPORT_LUNFLAGS_READ_ONLY :
|
se_tpg)) ? true : false;
|
||||||
TRANSPORT_LUNFLAGS_READ_WRITE;
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
/*
|
/*
|
||||||
* Determine the actual mapped LUN value user wants..
|
* Determine the actual mapped LUN value user wants..
|
||||||
@ -135,7 +134,7 @@ static int target_fabric_mappedlun_link(
|
|||||||
* This value is what the SCSI Initiator actually sees the
|
* This value is what the SCSI Initiator actually sees the
|
||||||
* $FABRIC/$WWPN/$TPGT/lun/lun_* as on their SCSI Initiator Ports.
|
* $FABRIC/$WWPN/$TPGT/lun/lun_* as on their SCSI Initiator Ports.
|
||||||
*/
|
*/
|
||||||
return core_dev_add_initiator_node_lun_acl(se_tpg, lacl, lun, lun_access);
|
return core_dev_add_initiator_node_lun_acl(se_tpg, lacl, lun, lun_access_ro);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int target_fabric_mappedlun_unlink(
|
static int target_fabric_mappedlun_unlink(
|
||||||
@ -167,8 +166,7 @@ static ssize_t target_fabric_mappedlun_write_protect_show(
|
|||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
deve = target_nacl_find_deve(se_nacl, lacl->mapped_lun);
|
deve = target_nacl_find_deve(se_nacl, lacl->mapped_lun);
|
||||||
if (deve) {
|
if (deve) {
|
||||||
len = sprintf(page, "%d\n",
|
len = sprintf(page, "%d\n", deve->lun_access_ro);
|
||||||
(deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY) ? 1 : 0);
|
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
@ -181,25 +179,23 @@ static ssize_t target_fabric_mappedlun_write_protect_store(
|
|||||||
struct se_lun_acl *lacl = item_to_lun_acl(item);
|
struct se_lun_acl *lacl = item_to_lun_acl(item);
|
||||||
struct se_node_acl *se_nacl = lacl->se_lun_nacl;
|
struct se_node_acl *se_nacl = lacl->se_lun_nacl;
|
||||||
struct se_portal_group *se_tpg = se_nacl->se_tpg;
|
struct se_portal_group *se_tpg = se_nacl->se_tpg;
|
||||||
unsigned long op;
|
unsigned long wp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = kstrtoul(page, 0, &op);
|
ret = kstrtoul(page, 0, &wp);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if ((op != 1) && (op != 0))
|
if ((wp != 1) && (wp != 0))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
core_update_device_list_access(lacl->mapped_lun, (op) ?
|
/* wp=1 means lun_access_ro=true */
|
||||||
TRANSPORT_LUNFLAGS_READ_ONLY :
|
core_update_device_list_access(lacl->mapped_lun, wp, lacl->se_lun_nacl);
|
||||||
TRANSPORT_LUNFLAGS_READ_WRITE,
|
|
||||||
lacl->se_lun_nacl);
|
|
||||||
|
|
||||||
pr_debug("%s_ConfigFS: Changed Initiator ACL: %s"
|
pr_debug("%s_ConfigFS: Changed Initiator ACL: %s"
|
||||||
" Mapped LUN: %llu Write Protect bit to %s\n",
|
" Mapped LUN: %llu Write Protect bit to %s\n",
|
||||||
se_tpg->se_tpg_tfo->get_fabric_name(),
|
se_tpg->se_tpg_tfo->get_fabric_name(),
|
||||||
se_nacl->initiatorname, lacl->mapped_lun, (op) ? "ON" : "OFF");
|
se_nacl->initiatorname, lacl->mapped_lun, (wp) ? "ON" : "OFF");
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
|
@ -60,10 +60,10 @@ struct se_dev_entry *core_get_se_deve_from_rtpi(struct se_node_acl *, u16);
|
|||||||
void target_pr_kref_release(struct kref *);
|
void target_pr_kref_release(struct kref *);
|
||||||
void core_free_device_list_for_node(struct se_node_acl *,
|
void core_free_device_list_for_node(struct se_node_acl *,
|
||||||
struct se_portal_group *);
|
struct se_portal_group *);
|
||||||
void core_update_device_list_access(u64, u32, struct se_node_acl *);
|
void core_update_device_list_access(u64, bool, struct se_node_acl *);
|
||||||
struct se_dev_entry *target_nacl_find_deve(struct se_node_acl *, u64);
|
struct se_dev_entry *target_nacl_find_deve(struct se_node_acl *, u64);
|
||||||
int core_enable_device_list_for_node(struct se_lun *, struct se_lun_acl *,
|
int core_enable_device_list_for_node(struct se_lun *, struct se_lun_acl *,
|
||||||
u64, u32, struct se_node_acl *, struct se_portal_group *);
|
u64, bool, struct se_node_acl *, struct se_portal_group *);
|
||||||
void core_disable_device_list_for_node(struct se_lun *, struct se_dev_entry *,
|
void core_disable_device_list_for_node(struct se_lun *, struct se_dev_entry *,
|
||||||
struct se_node_acl *, struct se_portal_group *);
|
struct se_node_acl *, struct se_portal_group *);
|
||||||
void core_clear_lun_from_tpg(struct se_lun *, struct se_portal_group *);
|
void core_clear_lun_from_tpg(struct se_lun *, struct se_portal_group *);
|
||||||
@ -73,7 +73,7 @@ void core_dev_del_lun(struct se_portal_group *, struct se_lun *);
|
|||||||
struct se_lun_acl *core_dev_init_initiator_node_lun_acl(struct se_portal_group *,
|
struct se_lun_acl *core_dev_init_initiator_node_lun_acl(struct se_portal_group *,
|
||||||
struct se_node_acl *, u64, int *);
|
struct se_node_acl *, u64, int *);
|
||||||
int core_dev_add_initiator_node_lun_acl(struct se_portal_group *,
|
int core_dev_add_initiator_node_lun_acl(struct se_portal_group *,
|
||||||
struct se_lun_acl *, struct se_lun *lun, u32);
|
struct se_lun_acl *, struct se_lun *lun, bool);
|
||||||
int core_dev_del_initiator_node_lun_acl(struct se_lun *,
|
int core_dev_del_initiator_node_lun_acl(struct se_lun *,
|
||||||
struct se_lun_acl *);
|
struct se_lun_acl *);
|
||||||
void core_dev_free_initiator_node_lun_acl(struct se_portal_group *,
|
void core_dev_free_initiator_node_lun_acl(struct se_portal_group *,
|
||||||
@ -119,7 +119,7 @@ void core_tpg_add_node_to_devs(struct se_node_acl *, struct se_portal_group *,
|
|||||||
void core_tpg_wait_for_nacl_pr_ref(struct se_node_acl *);
|
void core_tpg_wait_for_nacl_pr_ref(struct se_node_acl *);
|
||||||
struct se_lun *core_tpg_alloc_lun(struct se_portal_group *, u64);
|
struct se_lun *core_tpg_alloc_lun(struct se_portal_group *, u64);
|
||||||
int core_tpg_add_lun(struct se_portal_group *, struct se_lun *,
|
int core_tpg_add_lun(struct se_portal_group *, struct se_lun *,
|
||||||
u32, struct se_device *);
|
bool, struct se_device *);
|
||||||
void core_tpg_remove_lun(struct se_portal_group *, struct se_lun *);
|
void core_tpg_remove_lun(struct se_portal_group *, struct se_lun *);
|
||||||
struct se_node_acl *core_tpg_add_initiator_node_acl(struct se_portal_group *tpg,
|
struct se_node_acl *core_tpg_add_initiator_node_acl(struct se_portal_group *tpg,
|
||||||
const char *initiatorname);
|
const char *initiatorname);
|
||||||
|
@ -997,7 +997,6 @@ static sense_reason_t spc_emulate_modesense(struct se_cmd *cmd)
|
|||||||
int length = 0;
|
int length = 0;
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
bool read_only = target_lun_is_rdonly(cmd);;
|
|
||||||
|
|
||||||
memset(buf, 0, SE_MODE_PAGE_BUF);
|
memset(buf, 0, SE_MODE_PAGE_BUF);
|
||||||
|
|
||||||
@ -1008,7 +1007,7 @@ static sense_reason_t spc_emulate_modesense(struct se_cmd *cmd)
|
|||||||
length = ten ? 3 : 2;
|
length = ten ? 3 : 2;
|
||||||
|
|
||||||
/* DEVICE-SPECIFIC PARAMETER */
|
/* DEVICE-SPECIFIC PARAMETER */
|
||||||
if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || read_only)
|
if (cmd->se_lun->lun_access_ro || target_lun_is_rdonly(cmd))
|
||||||
spc_modesense_write_protect(&buf[length], type);
|
spc_modesense_write_protect(&buf[length], type);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -121,7 +121,7 @@ void core_tpg_add_node_to_devs(
|
|||||||
struct se_portal_group *tpg,
|
struct se_portal_group *tpg,
|
||||||
struct se_lun *lun_orig)
|
struct se_lun *lun_orig)
|
||||||
{
|
{
|
||||||
u32 lun_access = 0;
|
bool lun_access_ro = true;
|
||||||
struct se_lun *lun;
|
struct se_lun *lun;
|
||||||
struct se_device *dev;
|
struct se_device *dev;
|
||||||
|
|
||||||
@ -137,27 +137,26 @@ void core_tpg_add_node_to_devs(
|
|||||||
* demo_mode_write_protect is ON, or READ_ONLY;
|
* demo_mode_write_protect is ON, or READ_ONLY;
|
||||||
*/
|
*/
|
||||||
if (!tpg->se_tpg_tfo->tpg_check_demo_mode_write_protect(tpg)) {
|
if (!tpg->se_tpg_tfo->tpg_check_demo_mode_write_protect(tpg)) {
|
||||||
lun_access = TRANSPORT_LUNFLAGS_READ_WRITE;
|
lun_access_ro = false;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Allow only optical drives to issue R/W in default RO
|
* Allow only optical drives to issue R/W in default RO
|
||||||
* demo mode.
|
* demo mode.
|
||||||
*/
|
*/
|
||||||
if (dev->transport->get_device_type(dev) == TYPE_DISK)
|
if (dev->transport->get_device_type(dev) == TYPE_DISK)
|
||||||
lun_access = TRANSPORT_LUNFLAGS_READ_ONLY;
|
lun_access_ro = true;
|
||||||
else
|
else
|
||||||
lun_access = TRANSPORT_LUNFLAGS_READ_WRITE;
|
lun_access_ro = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_debug("TARGET_CORE[%s]->TPG[%u]_LUN[%llu] - Adding %s"
|
pr_debug("TARGET_CORE[%s]->TPG[%u]_LUN[%llu] - Adding %s"
|
||||||
" access for LUN in Demo Mode\n",
|
" access for LUN in Demo Mode\n",
|
||||||
tpg->se_tpg_tfo->get_fabric_name(),
|
tpg->se_tpg_tfo->get_fabric_name(),
|
||||||
tpg->se_tpg_tfo->tpg_get_tag(tpg), lun->unpacked_lun,
|
tpg->se_tpg_tfo->tpg_get_tag(tpg), lun->unpacked_lun,
|
||||||
(lun_access == TRANSPORT_LUNFLAGS_READ_WRITE) ?
|
lun_access_ro ? "READ-ONLY" : "READ-WRITE");
|
||||||
"READ-WRITE" : "READ-ONLY");
|
|
||||||
|
|
||||||
core_enable_device_list_for_node(lun, NULL, lun->unpacked_lun,
|
core_enable_device_list_for_node(lun, NULL, lun->unpacked_lun,
|
||||||
lun_access, acl, tpg);
|
lun_access_ro, acl, tpg);
|
||||||
/*
|
/*
|
||||||
* Check to see if there are any existing persistent reservation
|
* Check to see if there are any existing persistent reservation
|
||||||
* APTPL pre-registrations that need to be enabled for this dynamic
|
* APTPL pre-registrations that need to be enabled for this dynamic
|
||||||
@ -522,7 +521,7 @@ int core_tpg_register(
|
|||||||
return PTR_ERR(se_tpg->tpg_virt_lun0);
|
return PTR_ERR(se_tpg->tpg_virt_lun0);
|
||||||
|
|
||||||
ret = core_tpg_add_lun(se_tpg, se_tpg->tpg_virt_lun0,
|
ret = core_tpg_add_lun(se_tpg, se_tpg->tpg_virt_lun0,
|
||||||
TRANSPORT_LUNFLAGS_READ_ONLY, g_lun0_dev);
|
true, g_lun0_dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
kfree(se_tpg->tpg_virt_lun0);
|
kfree(se_tpg->tpg_virt_lun0);
|
||||||
return ret;
|
return ret;
|
||||||
@ -616,7 +615,7 @@ struct se_lun *core_tpg_alloc_lun(
|
|||||||
int core_tpg_add_lun(
|
int core_tpg_add_lun(
|
||||||
struct se_portal_group *tpg,
|
struct se_portal_group *tpg,
|
||||||
struct se_lun *lun,
|
struct se_lun *lun,
|
||||||
u32 lun_access,
|
bool lun_access_ro,
|
||||||
struct se_device *dev)
|
struct se_device *dev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -644,9 +643,9 @@ int core_tpg_add_lun(
|
|||||||
spin_unlock(&dev->se_port_lock);
|
spin_unlock(&dev->se_port_lock);
|
||||||
|
|
||||||
if (dev->dev_flags & DF_READ_ONLY)
|
if (dev->dev_flags & DF_READ_ONLY)
|
||||||
lun->lun_access = TRANSPORT_LUNFLAGS_READ_ONLY;
|
lun->lun_access_ro = true;
|
||||||
else
|
else
|
||||||
lun->lun_access = lun_access;
|
lun->lun_access_ro = lun_access_ro;
|
||||||
if (!(dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE))
|
if (!(dev->se_hba->hba_flags & HBA_FLAGS_INTERNAL_USE))
|
||||||
hlist_add_head_rcu(&lun->link, &tpg->tpg_lun_hlist);
|
hlist_add_head_rcu(&lun->link, &tpg->tpg_lun_hlist);
|
||||||
mutex_unlock(&tpg->tpg_lun_mutex);
|
mutex_unlock(&tpg->tpg_lun_mutex);
|
||||||
|
@ -144,12 +144,6 @@ enum se_cmd_flags_table {
|
|||||||
SCF_USE_CPUID = 0x00800000,
|
SCF_USE_CPUID = 0x00800000,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* struct se_dev_entry->lun_flags and struct se_lun->lun_access */
|
|
||||||
enum transport_lunflags_table {
|
|
||||||
TRANSPORT_LUNFLAGS_READ_ONLY = 0x01,
|
|
||||||
TRANSPORT_LUNFLAGS_READ_WRITE = 0x02,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Used by transport_send_check_condition_and_sense()
|
* Used by transport_send_check_condition_and_sense()
|
||||||
* to signal which ASC/ASCQ sense payload should be built.
|
* to signal which ASC/ASCQ sense payload should be built.
|
||||||
@ -634,11 +628,10 @@ struct se_lun_acl {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct se_dev_entry {
|
struct se_dev_entry {
|
||||||
/* See transport_lunflags_table */
|
|
||||||
u64 mapped_lun;
|
u64 mapped_lun;
|
||||||
u64 pr_res_key;
|
u64 pr_res_key;
|
||||||
u64 creation_time;
|
u64 creation_time;
|
||||||
u32 lun_flags;
|
bool lun_access_ro;
|
||||||
u32 attach_count;
|
u32 attach_count;
|
||||||
atomic_long_t total_cmds;
|
atomic_long_t total_cmds;
|
||||||
atomic_long_t read_bytes;
|
atomic_long_t read_bytes;
|
||||||
@ -712,7 +705,7 @@ struct se_lun {
|
|||||||
u64 unpacked_lun;
|
u64 unpacked_lun;
|
||||||
#define SE_LUN_LINK_MAGIC 0xffff7771
|
#define SE_LUN_LINK_MAGIC 0xffff7771
|
||||||
u32 lun_link_magic;
|
u32 lun_link_magic;
|
||||||
u32 lun_access;
|
bool lun_access_ro;
|
||||||
u32 lun_index;
|
u32 lun_index;
|
||||||
|
|
||||||
/* RELATIVE TARGET PORT IDENTIFER */
|
/* RELATIVE TARGET PORT IDENTIFER */
|
||||||
|
Loading…
Reference in New Issue
Block a user