mtd: rawnand: Ensure continuous reads are well disabled
authorMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 7 Mar 2024 11:53:15 +0000 (12:53 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 14 Mar 2024 23:04:51 +0000 (00:04 +0100)
The cont_read.ongoing flag should only be enabled at the beginning of a
read operation, and also disabled at its end, so we never end up
triggering nasty side effects outside of this scope. The mtd core being
highly serialized, we should not be bothered by parallel accesses
anyway.

In case we reach the end of a read operation and the boolean was not
properly disabled, it's a bug, but it's totally manageable. So warn, and
then fix the boolean state.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20240307115315.1942678-2-miquel.raynal@bootlin.com
drivers/mtd/nand/raw/nand_base.c

index 2479fa98f9912a5494dc80c3e3993d25f989ade6..d7dbbd469b892536bdf2ea01b4f226006b75a8dc 100644 (file)
@@ -3728,6 +3728,9 @@ read_retry:
        }
        nand_deselect_target(chip);
 
+       if (WARN_ON_ONCE(chip->cont_read.ongoing))
+               chip->cont_read.ongoing = false;
+
        ops->retlen = ops->len - (size_t) readlen;
        if (oob)
                ops->oobretlen = ops->ooblen - oobreadlen;