@ -533,6 +533,7 @@ DEF_CONFIGFS_ATTRIB_SHOW(emulate_3pc);
DEF_CONFIGFS_ATTRIB_SHOW ( pi_prot_type ) ;
DEF_CONFIGFS_ATTRIB_SHOW ( hw_pi_prot_type ) ;
DEF_CONFIGFS_ATTRIB_SHOW ( pi_prot_format ) ;
DEF_CONFIGFS_ATTRIB_SHOW ( pi_prot_verify ) ;
DEF_CONFIGFS_ATTRIB_SHOW ( enforce_pr_isids ) ;
DEF_CONFIGFS_ATTRIB_SHOW ( is_nonrot ) ;
DEF_CONFIGFS_ATTRIB_SHOW ( emulate_rest_reord ) ;
@ -823,6 +824,7 @@ static ssize_t pi_prot_type_store(struct config_item *item,
ret = dev - > transport - > init_prot ( dev ) ;
if ( ret ) {
da - > pi_prot_type = old_prot ;
da - > pi_prot_verify = ( bool ) da - > pi_prot_type ;
return ret ;
}
@ -830,6 +832,7 @@ static ssize_t pi_prot_type_store(struct config_item *item,
dev - > transport - > free_prot ( dev ) ;
}
da - > pi_prot_verify = ( bool ) da - > pi_prot_type ;
pr_debug ( " dev[%p]: SE Device Protection Type: %d \n " , dev , flag ) ;
return count ;
}
@ -872,6 +875,35 @@ static ssize_t pi_prot_format_store(struct config_item *item,
return count ;
}
static ssize_t pi_prot_verify_store ( struct config_item * item ,
const char * page , size_t count )
{
struct se_dev_attrib * da = to_attrib ( item ) ;
bool flag ;
int ret ;
ret = strtobool ( page , & flag ) ;
if ( ret < 0 )
return ret ;
if ( ! flag ) {
da - > pi_prot_verify = flag ;
return count ;
}
if ( da - > hw_pi_prot_type ) {
pr_warn ( " DIF protection enabled on underlying hardware, "
" ignoring \n " ) ;
return count ;
}
if ( ! da - > pi_prot_type ) {
pr_warn ( " DIF protection not supported by backend, ignoring \n " ) ;
return count ;
}
da - > pi_prot_verify = flag ;
return count ;
}
static ssize_t force_pr_aptpl_store ( struct config_item * item ,
const char * page , size_t count )
{
@ -1067,6 +1099,7 @@ CONFIGFS_ATTR(, emulate_3pc);
CONFIGFS_ATTR ( , pi_prot_type ) ;
CONFIGFS_ATTR_RO ( , hw_pi_prot_type ) ;
CONFIGFS_ATTR ( , pi_prot_format ) ;
CONFIGFS_ATTR ( , pi_prot_verify ) ;
CONFIGFS_ATTR ( , enforce_pr_isids ) ;
CONFIGFS_ATTR ( , is_nonrot ) ;
CONFIGFS_ATTR ( , emulate_rest_reord ) ;
@ -1104,6 +1137,7 @@ struct configfs_attribute *sbc_attrib_attrs[] = {
& attr_pi_prot_type ,
& attr_hw_pi_prot_type ,
& attr_pi_prot_format ,
& attr_pi_prot_verify ,
& attr_enforce_pr_isids ,
& attr_is_nonrot ,
& attr_emulate_rest_reord ,