mtd: spi-nor: silently drop lock/unlock for already locked/unlocked region

If, for instance, the entire flash is already unlocked and I try to
mtd_unlock() the entire device, I don't expect to see an EINVAL error.
It should just silently succeed. Ditto for mtd_lock().

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Reviewed-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Tested-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
This commit is contained in:
Brian Norris 2016-01-29 11:25:31 -08:00
parent edf891ef9a
commit 4c0dba447e
1 changed files with 10 additions and 2 deletions

View File

@ -515,8 +515,12 @@ static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
status_new = (status_old & ~mask) | val;
/* Don't bother if they're the same */
if (status_new == status_old)
return 0;
/* Only modify protection if it will not unlock other areas */
if ((status_new & mask) <= (status_old & mask))
if ((status_new & mask) < (status_old & mask))
return -EINVAL;
write_enable(nor);
@ -569,8 +573,12 @@ static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
status_new = (status_old & ~mask) | val;
/* Don't bother if they're the same */
if (status_new == status_old)
return 0;
/* Only modify protection if it will not lock other areas */
if ((status_new & mask) >= (status_old & mask))
if ((status_new & mask) > (status_old & mask))
return -EINVAL;
write_enable(nor);