block: sed-opal: fix IOC_OPAL_ENABLE_DISABLE_MBR
[ Upstream commit 78bf47353b0041865564deeed257a54f047c2fdc ] The implementation of IOC_OPAL_ENABLE_DISABLE_MBR handled the value opal_mbr_data.enable_disable incorrectly: enable_disable is expected to be one of OPAL_MBR_ENABLE(0) or OPAL_MBR_DISABLE(1). enable_disable was passed directly to set_mbr_done and set_mbr_enable_disable where is was interpreted as either OPAL_TRUE(1) or OPAL_FALSE(0). The end result was that calling IOC_OPAL_ENABLE_DISABLE_MBR with OPAL_MBR_ENABLE actually disabled the shadow MBR and vice versa. This patch adds correct conversion from OPAL_MBR_DISABLE/ENABLE to OPAL_FALSE/TRUE. The change affects existing programs using IOC_OPAL_ENABLE_DISABLE_MBR but this is typically used only once when setting up an Opal drive. Acked-by: Jon Derrick <jonathan.derrick@intel.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Scott Bauer <sbauer@plzdonthack.me> Signed-off-by: David Kozub <zub@linux.fjfi.cvut.cz> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
9d8b1d5db7
commit
2b18febc8c
@ -2095,13 +2095,16 @@ static int opal_erase_locking_range(struct opal_dev *dev,
|
||||
static int opal_enable_disable_shadow_mbr(struct opal_dev *dev,
|
||||
struct opal_mbr_data *opal_mbr)
|
||||
{
|
||||
u8 enable_disable = opal_mbr->enable_disable == OPAL_MBR_ENABLE ?
|
||||
OPAL_TRUE : OPAL_FALSE;
|
||||
|
||||
const struct opal_step mbr_steps[] = {
|
||||
{ opal_discovery0, },
|
||||
{ start_admin1LSP_opal_session, &opal_mbr->key },
|
||||
{ set_mbr_done, &opal_mbr->enable_disable },
|
||||
{ set_mbr_done, &enable_disable },
|
||||
{ end_opal_session, },
|
||||
{ start_admin1LSP_opal_session, &opal_mbr->key },
|
||||
{ set_mbr_enable_disable, &opal_mbr->enable_disable },
|
||||
{ set_mbr_enable_disable, &enable_disable },
|
||||
{ end_opal_session, },
|
||||
{ NULL, }
|
||||
};
|
||||
@ -2221,7 +2224,7 @@ static int __opal_lock_unlock(struct opal_dev *dev,
|
||||
|
||||
static int __opal_set_mbr_done(struct opal_dev *dev, struct opal_key *key)
|
||||
{
|
||||
u8 mbr_done_tf = 1;
|
||||
u8 mbr_done_tf = OPAL_TRUE;
|
||||
const struct opal_step mbrdone_step [] = {
|
||||
{ opal_discovery0, },
|
||||
{ start_admin1LSP_opal_session, key },
|
||||
|
Loading…
Reference in New Issue
Block a user