[PATCH v4 3/3] mtd: Remove duplicate checks on mtd_oob_ops parameter

Boris Brezillon boris.brezillon at free-electrons.com
Tue Jan 9 00:11:21 PST 2018


On Tue, 9 Jan 2018 08:19:53 +0100
Miquel RAYNAL <miquel.raynal at free-electrons.com> wrote:

> Hello Boris,
> 
> On Mon, 8 Jan 2018 23:30:10 +0100
> Boris Brezillon <boris.brezillon at free-electrons.com> wrote:
> 
> > On Mon, 8 Jan 2018 23:04:55 +0100
> > Miquel RAYNAL <miquel.raynal at free-electrons.com> wrote:
> >   
> > > Hello Boris,
> > > 
> > > On Mon,  8 Jan 2018 22:15:42 +0100
> > > Boris Brezillon <boris.brezillon at free-electrons.com> wrote:
> > >     
> > > > Some of the check done in custom ->_read/write_oob()
> > > > implementation are already done by the core (in
> > > > mtd_check_oob_ops()).      
> > > 
> > > Not sure this is relevant here as your series introduces changes for
> > > the SPI NAND framework, but there are other places where these
> > > checks are, IMHO, also redundant and could be removed. The "past
> > > end" string when grepped in the MTD folder core returns a few more
> > > hits.
> > > 
> > > In the NAND core:
> > >   - nand_do_read_oob()
> > >   - nand_read_oob()
> > >   - nand_do_write_oob()
> > >   - nand_write_oob()    
> > 
> > That's true for nand_read/write_oob(). The one in nand_do_write_oob()
> > is still needed because mtd_check_oob_ops() allows OOB writes
> > crossing a page boundary. Finally, I don't see any boundary checks in
> > nand_do_read_oob().  
> 
> I forgot that crossing page boundaries was not a use case of
> mtd_check_oob_ops(), thanks for pointing it. However in
> nand_do_read/write_oob(), the comment and the code really state the
> checked boundary is the end of the device. So are you sure these two
> checks are needed?
> 
> [1]http://elixir.free-electrons.com/linux/latest/source/drivers/mtd/nand/nand_base.c#L2226
> [2]http://elixir.free-electrons.com/linux/latest/source/drivers/mtd/nand/nand_base.c#L2886

You mean, the lines I remove in this patch? :P

> 
> >   
> > > Maybe also in onenand_base.c, but I am less confident for this one:
> > >   - onenand_bbt_read_oob()    
> > 
> > Unfortunately no, this function is directly called from onenand_bbt.c,
> > which means the MTD layer layer is completely bypassed. I also found
> > boundary checks in onenand_mlc_read_ops_nolock(), but again, this
> > function is called from do_otp_read() which is not going through
> > mtd_check_oob_ops().
> >   
> > > 
> > > What do you think?    
> > 
> > I'll remove the extra checks in nand_read/write_oob(). For the other
> > ones, one solution would be to expose mtd_check_oob_ops(), but I'll
> > keep that for later.  
> 
> Ok.
> 
> Thanks,
> Miquèl




More information about the linux-mtd mailing list