diff options
| author | Brian Norris <[email protected]> | 2016-01-29 19:25:32 +0000 |
|---|---|---|
| committer | Brian Norris <[email protected]> | 2016-03-08 02:01:54 +0000 |
| commit | f8860802da84aa2bbc9f316e549a349fb40cda63 (patch) | |
| tree | d2d263ccf2e6bf5b12ce704692f6c12b0b55b68d /net/switchdev/switchdev.c | |
| parent | mtd: spi-nor: silently drop lock/unlock for already locked/unlocked region (diff) | |
| download | kernel-f8860802da84aa2bbc9f316e549a349fb40cda63.tar.gz kernel-f8860802da84aa2bbc9f316e549a349fb40cda63.zip | |
mtd: spi-nor: make lock/unlock bounds checks more obvious and robust
There are a few different corner cases to the current logic that seem
undesirable:
* mtd_lock() with offs==0 trips a bounds issue on
ofs - mtd->erasesize < 0
* mtd_unlock() on the middle of a flash that is already unlocked will
return -EINVAL
* probably other corner cases
So, let's stop doing "smart" checks like "check the block below us",
let's just do the following:
(a) pass only non-negative offsets/lengths to stm_is_locked_sr()
(b) add a similar stm_is_unlocked_sr() function, so we can check if the
*entire* range is unlocked (and not just whether some part of it is
unlocked)
Then armed with (b), we can make lock() and unlock() much more
symmetric:
(c) short-circuit the procedure if there is no work to be done, and
(d) check the entire range above/below
This also aligns well with the structure needed for proper TB
(Top/Bottom) support.
Signed-off-by: Brian Norris <[email protected]>
Tested-by: Ezequiel Garcia <[email protected]>
Diffstat (limited to 'net/switchdev/switchdev.c')
0 files changed, 0 insertions, 0 deletions
